Occluding Contour Breakthroughs, Part 1: A Surprisingly Hard Problem
aaronhertzmann.com
aaronhertzmann.com
This is fine, if you want a simple ~solid stroke. A simple edge detection kernel filter (e.g. Sobel) on the depth and/or normal map is the basis of most outline-like things you see (in games at least) today. This is useful, but it's not an accurate representation of the occluding contour, and it's in an unhelpful form for further processing (kind of like a raster vs. vector image).
Sure, we've gotten really good at it; but at this point it seems like we are starting with a complex smooth shape, approximating that shape with triangles, then trying to make that collection of triangles look like a smooth shape. Can we factor out the triangle step?
The most painful part of this experience is 3D printing: millions of people are using mathematical formulas to first construct a 3D object (CSG modeling), then to wrap the object in triangles (export to an STL file), so that a slicer can tell the printer how to fill in the domain of triangles. The triangles are literally inserting themselves into our reality!
This introduces a lot of finicky problems:
* Sharp edges and flat faces on what was supposed to be a smooth sphere or cylinder
* Broken manifolds that result in slicer errors
* Holes that get mistakenly filled in by the slicer.
* The topology of triangles defining what can and cannot be changed in the object, and where.
Back in the good old days™, I could tell POVRay that there is a 2-unit diameter sphere with a 1-unit diameter cylindrical hole in it; and it would go right ahead and raytrace that. If I wanted to do the same in Blender, I could only create a vain approximation of that, spoiled by triangles and entropy.
I think the reason for using triangle meshes in 3D printing is for the benefit of the slicer (or its developers) -- the slicers consume triangle meshes because that made building the software feasible. Your printer quite likely implements some amount of non-linear (as in curved) moves.
Having said that, I'm sure I heard relatively recently about some slicers starting to support STEP input files or some other solid modeling format, but my searches just turned up "how to convert your STL files to STEP files" SEO trash, which is a bit funny.
I would think that a method that only calculates the contour up to a given resolution to be much easier. Rendering the model using location mapped to color and then a post processing step on the image seems like it should be able to do the job.
At the risk of getting semantic, I'd argue that the raster representation of such a contour is not the contour. That is, calculating the contour as a raster image is just calculating something different.