Unconstrained Isosurface Extraction on Arbitrary Octrees
SGP 2007 Paper
The code provides an implementation of the isosurface extraction in the context of mesh-simplification. Given an input mesh, the Euclidean Distance Transform of the mesh is computed and an octree is adapted to the data, sampling the transform more finely near the surface of the mesh. (Additional parameters allow the user to restrict octree refinement to high-curvature regions.) Finally, the zero-crossing isosurface is computed and written to the specified output file. (By default, the output is a polygonal representation, though a triangulation can be obtained as well by enabling the flag that computes the minimal area triangulation.)
Note: The construction of the EDT assumes that the input mesh is watertight with properly oriented triangles. In the case that these conditions are not satisfied (and sometimes even if they are) spurious disconnected surface patches may be generated.
- --in <input mesh>
- This string is the name of the file containing the mesh used to bulid the Euclidean Distance Transform. The mesh is assumed to be in the PLY format.
- --out <output mesh>
- This string is the name of the file to which the extracted isosurface will be written. The mesh will be written in the
- --maxDepth <octree depth>
- This integer is the maximum depth of the octree used to sample the Euclidean Distance Transform of the input mesh.
- [--curvature <cut-off value>]
- This floating point value represents the cut-off used for determining if the octree is to be refined.
(In practice, a cut-off value of about 0.99 does a good job of generating an adaptively sampled Euclidean Distance Transform that results in a simplified model with coarser triangles in flatter regions and finer triangles in regions of high-detail.)
- If this argument is specified, the octree sampling the Euclidean Distance Transform will be forced to satisfy the condtion that the depth-disparity between face-adjacent leaf nodes is never greater than one.
- If this argument is specified, the ambiguous Marching-Cubes cases are dis-ambiguated by assigning a value to the center of a face equal to the average of the corners.
- If this argument is specified, the minimal area triangulation is used to triangulate the polygons making up the isosurface.
- If this argument is specified the primal/dual method of [Schaeffer and Warren 04] is used to compute the isosurface, sampling the Euclidean Distance Transform at the centers of octree leaf-nodes rather than the corners.