robust repair of polygonal models tao ju rice university
TRANSCRIPT
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