Title: Hierarchical Occluders for Interactive Rendering of Large Models
1Hierarchical Occluders for Interactive Rendering
of Large Models
2Motivation
- The Dream of Viewing the Double Eagle at 20 fps
in good fidelity
3Occlusion Culling
- Hidden Surface Removal methods are not fast
enough for massive models on current hardware - Occlusion Culling avoids rendering primitives
that are occluded by another part of the scene - Occlusion Culling techniques are ideally output
sensitive runtime is proportional to the size
of exact visibility set
4Related Work
- Hierarchical Z-Buffer
- Image space occlusion culling method Greene93
- Build a layered Z-pyramid with a different
resolution of the Z-buffer at each level - Allows quick accept/reject
- Hierarchical LODs
- Simplification Culling Approximate entire
branch of the scene graph by an HLOD - Can we use HLODs as occluders/occludees?
5Parallel Occlusion Culling
- Bill Baxters idea of using separate pipelines
for occlusion tests and rendering Spring 2000 - Use the HZB for rendering acceleration
6Hierarchical Parallel Occlusion Culling
- Build an HLOD representation of the model and
find a set of hierarchical occluders for culling - Build a HZB from the hierarchy of occluders in
the occlusion pipeline - Test the objects against the HZB and pass the
visible nodes to the rendering pipeline for
displaying at the appropriate LOD
7HPOC System
- 4 Threads
- Software Culling
- Hardware Culling
- Display
- Load
- LOD selection on pixel error
- Display and Culling threads in synch or asynch
modes
8HPOC System
Coarse HZB
Coarse HZB
All Nodes Camera
VFC
VFC
SW Culler
Maybe Occluded
Visible
Build HZB
Occlusion Pipeline
HW Culler
Histogram Test
Z-Buffer
Visible Nodes
Renderer
Display Pipeline
Render
9Partitioning
- Repartition the model for better visibility
coherence Karl Hillesland Fall 00 - Worked well with small disconnected objects (e.g.
split Double Eagle) - Fixed bug to work with connected meshes
10Partitioning
- Even then splits could be lopsided
Torpedo Room Leaf Object 232627 faces of 705917
Try splitting across different axes if a split
across the longest axis fails !
11Constructing the Scene Graph
- Build an AABBTree hierarchy
- Create HLODs from geometry at leaf nodes
- Use GAPS to simplify geometry at each node
- Need better terminating conditions for GAPS
12Scene Graph AABBTree
- While the partitioning is smart, AABBTree
subdivides across longest axis
Rightmost leaf node of the AABBTree Most of the
geometry inside the shell is grouped into 1 node.
Use a different partitioning hierarchy
13Occluder/Occludee Selection
- Currently use same nodes for culling and display
Bad Occludee Selection Close up top view of the
double eagle HPOC is rendering 323 objects and
160k polygons while there are 4 objects and 370
polygons visible.
14Further Work
- Better partitioning, HLOD construction
- Memory management
- Using coarser HLOD occlusion bounding volumes,
finer LODs for occludee selection - Timing Analysis
15Lessons
- Working with massive models is a pain
- Multithreaded massive model rendering is a bigger
pain - Good Occlusion Culling is a tough problem