Introduction to Massive Model Visualization
Introduction to Massive Model Visualization. Patrick Cozzi Analytical Graphics, Inc. Contents. Minimal computer graphics background Culling Level of Detail (LOD) Memory Management Videos throughout. Computer Graphics Background. Goal: Convert 3D model to pixels
Introduction to Massive Model Visualization
E N D
Presentation Transcript
Introduction to Massive Model Visualization Patrick Cozzi Analytical Graphics, Inc.
Contents • Minimal computer graphics background • Culling • Level of Detail (LOD) • Memory Management • Videos throughout
Computer Graphics Background • Goal: Convert 3D model to pixels • 3D models are composed of triangles
(x0, y0, z0) (x1, y1, z1) (x2, y2, z2) Computer Graphics Background • 1 triangle = 3 vertices • Gross over simplification: 3 floats per vertex
far plane near plane viewer Computer Graphics Background • Triangles go through graphics pipeline to become pixels • View parameters define the size and shape of the world
Color Depth Stencil Computer Graphics Background PCIe Bus CPU GPU Monitor Vertex Processing Geometry Processing Fragment Processing
Computer Graphics Background • Visible Surfaces
Example Massive Models Procedurally generated model of Pompeii: ~1.4 billion polygons. Image from [Mueller06]
Example Massive Models Boeing 777 model: ~350 million polygons. Image from http://graphics.cs.uni-sb.de/MassiveRT/boeing777.html
Trends • No upper bound on model complexity • Procedural generation • Laser scans • Aerial imagery Image from [Lakhia06]
Trends • High GPU throughput • At least 10-200 million triangles per second • Widen gap between processor and memory performance • CPU – GPU bottleneck
Goal • output-sensitivity: performance as a function of the number of pixels rendered, not the size of the model
culled culled culled View Frustum Culling • Can be slower than brute force. When? rendered rendered rendered
Bounding Volumes • Spheres • Axis aligned bounding boxes • Object oriented bounding boxes • Hybrids
3 4 5 1 0 2 0 1 3 4 2 5 View Frustum Culling
3 4 5 1 0 2 0 1 3 4 2 5 View Frustum Culling
View Frustum Culling • Demo
culled Occlusion Culling • Effective in scenes with high depth complexity
Occlusion Culling • From-region or from-point • Most are conservative • Occluder Fusion • Difficult for general scenes with arbitrary occluders. So make simplifying assumptions: • [Wonka00] – urban environments • [Ohlarik08] – planets and satellites
Hardware Occlusion Queries • From-point visibility that handles general scenes with arbitrary occluders and occluder fusion • How? • Use the GPU
Hardware Occlusion Queries • Render occluders • Render object’s BV using HOQ • Render full object based on result
CPU Drawo1 Drawo2 Drawo3 GPU Drawo1 Drawo2 Drawo3 CPU Queryo1 -- stall -- Drawo1 GPU Queryo1 -- starve -- Drawo1 Hardware Occlusion Queries • CPU stalls and GPU starvation
Hardware Occlusion Queries • Demo
Level of Detail • Generation: less triangles, simpler shader • Selection: distance, pixel size • Switching: avoid popping • Discrete, Continuous, Hierarchical
Simplification Operations edge collapse • Also • Vertex Merge • Vertex Removal • Cell Collapse • See [Luebke01]
Discrete LOD 3,086 Triangles 52,375 Triangles 69,541 Triangles
Discrete LOD Not enough detail up close Too much detail in the distance
Continuous LOD edge collapse Image from [Luebke01] vertex split
Hierarchical LOD • 1 Node • 3,086 Triangles 4 Nodes 9,421 Triangles 16 Nodes 77,097 Triangles
Hierarchical LOD • 1 Node • 3,086 Triangles 4 Nodes 9,421 Triangles 16 Nodes 77,097 Triangles
Node Refinement Hierarchical LOD visit(node) { if (computeSSE(node) < pixel tolerance) { render(node); } else { foreach (child in node.children) visit(child); } }
Hierarchical LOD • Demo
Hierarchical LOD • Easy to • Add view frustum culling • Add occlusion culling via HOQs • Render front to back • Use VMSSE to drive refinement • Requires preprocessing • Is Culling + HLOD enough?
Memory Management • Out-of-Core • Compression • Cache Coherent Layouts
Out-of-Core HLOD visit(node) { if ((computeSSE(node) < pixel tolerance) || (not all children resident)) { render(node); foreach (child in node.children) requestResidency(child); } else { foreach (child in node.children) visit(child); } }
Out-of-Core HLOD • Multithreaded • Disk reads • Decompression, normal generation, etc • Cache management • Prioritize reads, e.g. distance from viewer • Replacement policy • Skeleton in memory? • BV, error metric, parent – child relationships
Out-of-Core Prefetching • Reduce geometry cache misses • Predict and load required nodes
Out-of-Core Prefetching • Predict camera position [Correa03] f’ v’ v f
Out-of-Core Prefetching • [Varadhan02] • Coherence of Front • Prefetch ascendants/descendants • Prefetch with enlarged view frustum • Prioritize 0 1 4 5 6 7 2 3
Compression • “Size is Speed” • Geometric • Vertices, Indices • I/O and Rendering Performance • Texture • Performance or Quality Disk De/re-compress Render
Reorder Vertices Reorder Triangles Cache Coherent Layouts • Reorder vertices and indies to maximize GPU cache hits GPU Main Memory Pre VS Cache Vertex Shader Post VS Cache Primitive Assembly
Cache Coherent Layouts • Minimize ACMR • Average Cache Miss Ratio • Cache Oblivious [Yoon05] • Linear Time [Sander07]
Not Covered Today • Dynamic Scenes • Clustered backface culling • IBR, Mapping • Sorting • Batching • Ray Tracing
Summary • Combine culling, LOD, and out-of-core techniques • Keep the CPU and GPU busy • Exploit Coherence: Spatial and Temporal
For More Information • [Gobbetti08] – Technical Strategies for Massive Model Visualization • [Luebke01] – A Developer’s Survey of Polygonal Simplification Algorithms • My email: pjcozzi@siggraph.org