Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introduction To Massive Model Visualization

2,464 views

Published on

Published in: Technology, Education
  • Be the first to comment

  • Be the first to like this

Introduction To Massive Model Visualization

  1. 1. Introduction to Massive Model Visualization Patrick Cozzi Analytical Graphics, Inc.
  2. 2. Contents <ul><li>Minimal computer graphics background </li></ul><ul><li>Culling </li></ul><ul><li>Level of Detail (LOD) </li></ul><ul><li>Memory Management </li></ul><ul><li>Videos throughout </li></ul>
  3. 3. Computer Graphics Background <ul><li>Goal: Convert 3D model to pixels </li></ul><ul><li>3D models are composed of triangles </li></ul>
  4. 4. Computer Graphics Background <ul><li>1 triangle = 3 vertices </li></ul><ul><li>Gross over simplification: 3 floats per vertex </li></ul>(x 0 , y 0 , z 0 ) (x 1 , y 1 , z 1 ) (x 2 , y 2 , z 2 )
  5. 5. Computer Graphics Background <ul><li>Triangles go through graphics pipeline to become pixels </li></ul><ul><li>View parameters define the size and shape of the world </li></ul>viewer near plane far plane
  6. 6. Computer Graphics Background CPU GPU Monitor Vertex Processing Geometry Processing Fragment Processing PCIe Bus Color Depth Stencil
  7. 7. Computer Graphics Background <ul><li>Visible Surfaces </li></ul>
  8. 8. Example Massive Models Procedurally generated model of Pompeii: ~1.4 billion polygons. Image from [Mueller06]
  9. 9. Example Massive Models Boeing 777 model: ~350 million polygons. Image from http://graphics.cs.uni-sb.de/MassiveRT/boeing777.html
  10. 10. Example Massive Models
  11. 11. Trends <ul><li>No upper bound on model complexity </li></ul><ul><ul><li>Procedural generation </li></ul></ul><ul><ul><li>Laser scans and aerial imagery </li></ul></ul><ul><ul><li>Imagery </li></ul></ul>Image from [Lakhia06]
  12. 12. Trends <ul><li>High GPU throughput </li></ul><ul><ul><li>At least 10-200 million triangles per second </li></ul></ul><ul><li>Widen gap between processor and memory performance </li></ul><ul><li>CPU – GPU bottleneck </li></ul>
  13. 13. Goal <ul><li>output-sensitivity : performance as a function of the number of pixels rendered, not the size of the model </li></ul>
  14. 14. View Frustum Culling <ul><li>Use bounding volume: spheres, AABBs, OOBBs, etc </li></ul>rendered rendered rendered culled culled culled
  15. 15. View Frustum Culling 0 1 2 3 4 5 0 1 3 4 2 5
  16. 16. View Frustum Culling 0 1 2 3 4 5 0 1 3 4 2 5
  17. 17. View Frustum Culling <ul><li>Demo </li></ul>
  18. 18. Occlusion Culling <ul><li>Effective in scenes with high depth complexity </li></ul>culled
  19. 19. Occlusion Culling <ul><li>From-region or from-point </li></ul><ul><li>Most are conservative </li></ul><ul><li>Occluder Fusion </li></ul><ul><li>Difficult for general scenes with arbitrary occluders. So make simplifying assumptions: </li></ul><ul><ul><li>[Wonka00] – urban environments </li></ul></ul><ul><ul><li>[Ohlarik08] – planets and satellites </li></ul></ul>
  20. 20. Hardware Occlusion Queries <ul><li>From-point visibility that handles general scenes with arbitrary occluders and occluder fusion </li></ul><ul><li>How? </li></ul><ul><ul><li>Use the GPU </li></ul></ul>
  21. 21. Hardware Occlusion Queries <ul><li>Render occluders </li></ul><ul><li>Render object’s BV using HOQ </li></ul><ul><li>Render full object based on result </li></ul>
  22. 22. Hardware Occlusion Queries <ul><li>CPU stalls and GPU starvation </li></ul>Draw o1 Draw o2 Draw o3 Draw o1 Draw o2 Draw o3 CPU GPU Query o1 Query o1 Draw o1 Draw o1 -- stall -- -- starve -- CPU GPU
  23. 23. Is Culling Enough?
  24. 24. Is Culling Enough?
  25. 25. Hardware Occlusion Queries <ul><li>Demo </li></ul>
  26. 26. Level of Detail <ul><li>Generation: less triangles, simpler shader </li></ul><ul><li>Selection: distance, pixel size </li></ul><ul><li>Switching: avoid popping </li></ul><ul><li>Discrete, Continuous, Hierarchical </li></ul>
  27. 27. Discrete LOD <ul><li>3,086 Triangles </li></ul>52,375 Triangles 69,541 Triangles
  28. 28. Discrete LOD Not enough detail up close Too much detail in the distance
  29. 29. Continuous LOD edge collapse vertex split Image from [Luebke01]
  30. 30. Hierarchical LOD <ul><li>1 Node </li></ul><ul><li>3,086 Triangles </li></ul>4 Nodes 9,421 Triangles 16 Nodes 77,097 Triangles
  31. 31. Hierarchical LOD <ul><li>1 Node </li></ul><ul><li>3,086 Triangles </li></ul>4 Nodes 9,421 Triangles 16 Nodes 77,097 Triangles
  32. 32. Hierarchical LOD visit(node) { if (computeSSE(node) < pixel tolerance) { render(node); } else { foreach (child in node.children) visit(child); } } Node Refinement
  33. 33. Hierarchical LOD
  34. 34. Hierarchical LOD
  35. 35. Hierarchical LOD <ul><li>Demo </li></ul>
  36. 36. Hierarchical LOD <ul><li>Easy to </li></ul><ul><ul><li>Add view frustum culling </li></ul></ul><ul><ul><li>Add occlusion culling via HOQs </li></ul></ul><ul><ul><ul><li>Render front to back </li></ul></ul></ul><ul><ul><li>Use VMSSE to drive refinement </li></ul></ul><ul><li>Requires preprocessing </li></ul><ul><li>Is Culling + HLOD enough? </li></ul>
  37. 37. Memory Management <ul><li>Out-of-Core </li></ul><ul><li>Compression </li></ul><ul><li>Cache Coherent Layouts </li></ul>
  38. 38. 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); } }
  39. 39. Out-of-Core HLOD <ul><li>Multithreaded </li></ul><ul><ul><li>Disk reads </li></ul></ul><ul><ul><li>Decompression, normal generation, etc </li></ul></ul><ul><li>Cache management </li></ul><ul><ul><li>Prioritize reads, e.g. distance from viewer </li></ul></ul><ul><ul><li>Replacement policy </li></ul></ul><ul><li>Skeleton in memory? </li></ul><ul><ul><li>BV, error metric, parent – child relationships </li></ul></ul>
  40. 40. Out-of-Core Prefetching <ul><li>Reduce geometry cache misses </li></ul><ul><li>Predict and load required nodes </li></ul>
  41. 41. Out-of-Core Prefetching <ul><li>Predict camera position [Correa03] </li></ul>v v’ f f’
  42. 42. Out-of-Core Prefetching <ul><li>[Varadhan02] </li></ul><ul><ul><li>Coherence of Front </li></ul></ul><ul><ul><li>Prefetch ascendants/descendants </li></ul></ul><ul><ul><li>Prefetch with enlarged view frustum </li></ul></ul><ul><ul><li>Prioritize </li></ul></ul>0 1 2 3 4 5 6 7
  43. 43. Compression <ul><li>“Size is Speed” </li></ul><ul><li>Geometric </li></ul><ul><ul><li>Vertices, Indices </li></ul></ul><ul><ul><li>I/O and Rendering Performance </li></ul></ul><ul><li>Texture </li></ul><ul><ul><li>Performance or Quality </li></ul></ul>Render Disk De/re-compress
  44. 44. Cache Coherent Layouts <ul><li>Reorder vertices and indies to maximize GPU cache hits </li></ul>Vertex Shader Post VS Cache Pre VS Cache GPU Main Memory Primitive Assembly Reorder Triangles Reorder Vertices
  45. 45. Cache Coherent Layouts <ul><li>Minimize ACMR </li></ul><ul><ul><li>Average Cache Miss Ratio </li></ul></ul><ul><li>Cache Oblivious [Yoon05] </li></ul><ul><li>Linear Time [Sander07] </li></ul>
  46. 46. Not Covered Today <ul><li>Clustered backface culling </li></ul><ul><li>IBR </li></ul><ul><li>Sorting </li></ul><ul><li>Batching </li></ul><ul><li>Ray Tracing </li></ul>
  47. 47. Summary <ul><li>Combine culling, LOD, and out-of-core techniques </li></ul><ul><li>Keep the CPU and GPU busy </li></ul><ul><li>Exploit Coherence: Spatial and Temporal </li></ul>

×