Robust Repair of Polygonal ModelsRobust Repair of Polygonal ModelsRobust Repair of Polygonal ModelsRobust Repair of Polygonal Models
Tao JuRice University
Polygonal ModelsPolygonal Models
Closed ModelClosed Model
• Partitions the space into disjoint inside and outside volumes– Each polygon lies between inside and outside
Not Closed Closed ClosedNot Closed
Model RepairModel Repair
• Close polygonal models– Not just hole-filling
• Challenges:– Models may contain complex errors
– Models are often very big
– Geometry features need to be preserved
Previous WorkPrevious Work
• Mesh-based model repair– Zippering [Turk and Levoy 1994] – Stitching [Barequet and Kumar 1997] – Progressive boundary decimation [Borodin et al. 2002]– Hole filling with fairing [Liepa 2003]
• Scattered data reconstruction– Tangent plane estimation [Hoppe et al. 1992] – Level sets [Zhao and Osher 2002]– Radial basis functions [Turk and O’Brien 2002]– Partition-of-unity methods [Ohtake et al. 2003]– Moving least squares surfaces [Shen et al. 2004]– Context-based completion [Sharf et al. 2004]
Previous WorkPrevious Work
• Volumetric model repair
How to determine signs ? How to generate surface ?
Previous WorkPrevious Work
• Volumetric model repair – Sign generation– Adaptive signed distances [Frisken et al. 2000]
– Flood-filling [Oomes et al. 1997] [Andujar et al. 2002] – Space carving [Curless and Levoy 1996]– Volumetric diffusion [Davis et al. 2002]– Parity count and ray stabbing [Nooruddin and Turk
2003]
• Volumetric model repair – Contouring– Marching Cubes [Lorensen and Cline 1987]– Extended Marching Cubes [Kobbelt et al. 2001]– Dual Contouring [Ju et al. 2002]
Robust Model RepairRobust Model Repair
• Robust– Closes arbitrary polygon soups
• Efficient– Processes gigantic models on standard PCs
• Accurate– Preserves surface quality
• Simple !
Algorithm in a NutshellAlgorithm in a Nutshell
Contour
Patch
Closed Dual Surface
Scan-convert
“Dual Surface”
• They convert the input model to a volumetric form by constructing an octree grid that records edges intersecting the input model.
Scan-conversionScan-conversion
Scan-conversionScan-conversion
• They recursively walk down the octree, expanding nodes when necessary, until all the leaf cells at the bottom level of the tree that intersect the polygon are located .
• Then, cell edges that intersect the polygon are identified in those leaf cells and are marked as intersection edges (figure 4 (d)).
Scan-conversionScan-conversion
Scan-conversionScan-conversion
• Octree grid
• Memory-less octree construction
• Reliable and fast intersection tests
• Edges intersected with model
• Top-down creation
Fast intersection testsFast intersection tests
• a triangle and a cube are disjoint if their projections on any one of the following 13 vectors are disjoint:(1) the triangle face normal,(2) 3 cube face normals,(3) and 9 pair-wise cross-products of the 3 edges of
the cube and the 3 edges of the triangle.
Dual SurfaceDual Surface
• Each face dual to an intersected octree edge
Octree Edge Dual Face
Finding HolesFinding Holes
• Boundary edges– Odd-valence edges– Closed dual surface
No boundary edge
• Set of boundary edges partitioned into cycles– Each cycle encloses
a “hole”
Detect boundary cyclesDetect boundary cycles
•Detecting the boundary edges in (S) simply involves enumerating the cell faces on the primal grid containing an odd number of intersection edges.
• To form cycles, we introduce a bottom-up procedure detectProc[N] that returns all complete cycles B and incomplete cycles R inside the octree node N.
• At a leaf node, detectProc[N] returns B = 0 and R = 0.
• At an internal node,(1) Call detectProc[Ni] for every child node Ni,
which return cycles Bi and incomplete cycles Ri.
(2) Detect the boundary edges E crossing the faces between adjacent children nodes. (3) Connect Ri by E to form complete cycles B’ and incomplete cycles R. B is the union of B’ and the Bis.
Detect boundary cyclesDetect boundary cycles
Patch boundary cyclesPatch boundary cycles
• seek the surface of minimum area spanning a given curve in 3-D space.
Building a PatchBuilding a Patch
• Build one patch for each cycle– Each quad dual to an
octree edge– Patch boundary is
the cycle
• Divide-and-conquer!– Using octree
Integrating a PatchIntegrating a Patch
• Add a quad– If does not exist on
the dual surface
• Remove a quad– If already exists on
the dual surface
• Key: parity of edge valence
Integrating a PatchIntegrating a Patch
• Add a quad– If not already on the
dual surface
• Remove a quad– If already on the dual
surface
• Key: parity of edge valence
Sign GenerationSign Generation
• Sign changes across dual surface– Flood-filling
Dual Face Octree Signs
ContouringContouring
• Marching Cubes– Edge intersections– Rounded corners
• Dual Contouring– Hermite data– Sharp features
Examples – CAD ModelExamples – CAD Model
Input Model
Examples – CAD ModelExamples – CAD Model
Dual Surface
Examples – CAD ModelExamples – CAD Model
Closed Dual Surface
Examples – CAD ModelExamples – CAD Model
Output (Marching Cubes)
Examples – CAD ModelExamples – CAD Model
Output (Dual Contouring)
Examples - BunnyExamples - Bunny1. Input 2. DS
3. DS Closed
4. Output
Model Courtesy of the Stanford 3D Scanning Repository
Examples - HorseExamples - Horse1. Input 2. DS
3. DS Closed
4. Output
Model Courtesy of the Stanford 3D Scanning Repository
Examples – David (at 1mm)Examples – David (at 1mm)
Input Output
Model Courtesy of the Digital Michelangelo Project
PerformancePerformance
Model Triangles Grid Time Memory
Bunny 69,451 64 3.6 sec < 10 MB
Horse 80,805 128 6.0 sec < 10 MB
Dragon 871,414 256 45.2 sec 16 MB
Buddha 1,087,716 1024 1.3 min 28 MB
David (2mm) 8,254,150 4096 8.4 min 92 MB
David (1mm) 56,230,343 8192 53.2 min 417 MB
• On PC with 1.5GHz CPU and 2GB memory
ConclusionConclusion
• A simple, fast, and robust method to repair arbitrary polygon models
• Future work– Remove topological noise– Improve the quality of hole filling– Repair using an adaptive grid