visibility culling using hierarchical occlusion maps hansong zhang, dinesh manocha, tom hudson,...
TRANSCRIPT
Visibility Culling using Hierarchical Occlusion Maps
Hansong Zhang, Dinesh Manocha, Tom Hudson, Kenneth E. Hoff III
Presented by:Chris Wassenius
Introduction
● GPU power has increased year after year
● So has the size of models...
● Need acceleration algorithms – Visibility culling
– Level of detail
– texturing
Related Work
● Z-buffer
● BSP (Binary Space Partitioning) Trees– creation is time consuming
– not dynamic
● PVS (potentially visible set)– works well for specific models
– doesn't work so well with arbitrary models
Related Work
● Object space algorithms (Coorg and Teller, and Hudson et al. 1996)– convex objects only
– can't combine occluders
● Hierarchical Z-buffer algorithm– Octree and Z-pyramid
– good, but expensive
Method
● Features– Generality
● No restriction on types of occluders
– Occluder Fusion● combines a “forest” of small and/or disjoint occluders
– Significant Culling
Method
● Features (continued)– Portability
– Efficiency ● algorithm only takes a few milliseconds per frame● significant speedup in interactive walkthroughs of models
– Approximate Visibility Culling● able to cull small visible holes in occluders
Method
● Basic Idea– Select objects of the model as occluders
– Create hierarchical occlusion maps (HOM)
– Render objects in the model based on:● overlap test with HOM● depth test
Method
● Construction of the Occlusion Map Hierarchy – Selects occluders from the occluder database
(preprocessing step)● traverses the bounding volume hierarchy of the occluder
database● selects subset, utilizes temporal coherence
– Occluders are rendered in pure white
– Builds hierarchy by averaging pixels
Method
● Occlusion Map– object is projected to
screen, area of projection is made opaque
– each pixel records opacity of a rectangular block in screen space
– opacity: the ratio of the sum of the opaque areas in the block to the total area in the block
Method
● Occlusion Map Hierarchy – Recursively average 2
x 2 blocks of pixels● case use GPU and
CPU● special case of bilinear
interpolation
– Stop at some minimal resolution (e.g. 4 x 4)
Method
● Overlap Test (to see if an object is occluded)– Check opacity of the pixels it overlaps in the HOM
– Exact overlap test is too expensive
– Use screen spaced bounding rectangle for projection
Method
● Overlap test (continued)– uses HOM to accelerate test
– Begins at the level of the hierarchy where the size of a pixel is close to the size of the bounding rectangle
– Examines each pixel that overlaps rectangle● If each pixel is completely opaque, object is overlapped
by occluders● Else recursively descends to higher resolution level
– If all pixels in rectangle are opaque then object is overlapped by occluders
– Else algorithm renders object
Method
● High level opacity estimation– If low resolution map pixel has a low opacity level,
descendants most likely have low opacity levels
– If low resolution map pixel has a high opacity level, descendants most likely have high opacity levels.
Method
● Opacity Threshold– Value at which a pixel is “considered” completely
opaque
– Different threshold for each level in hierarchy
– In effect, specifies the size of allowable holes
Method
● Depth Estimation Buffer– partition screen space and use separate Z-plane for
each region
– estimate depth and position of occluders by projected bounding box
– take furthest z-value of projected rectangle for each occluder
– for each partition, set distance to the furthest occluder
Method
● Depth Test (for a potential occluded objection)– Again, use projected rectangle as aproximation
– Check each partition of the depth estimation buffer that is covered by the rectangle
● if any partition is greater than (further than) rectangle's depth
– object is rendered● otherwise,
– object is not rendered
Method
● Occluder selection to form Occluder Database (preprocessing step)– Size
● small objects typically don't serve as good occluders
– Redundancy
– Complexity
Method
● Dynamic Selection of occluders at run-time– Selects based on distance from view point, size,
and temporal coherence
– limits the amount of selected occluders (can vary per frame)
Conclusion and Future Work
● Pros– Good visibility culling algorithm for large models
with large depths
– Works well with arbitrary models
● Cons– Fairly large overhead