Visibility Culling using Hierarchical Occlusion Maps Hansong Zhang
Visibility Culling using Hierarchical Occlusion Maps Hansong Zhang, Dinesh Manocha, Tom Hudson, Kenneth E. Hoff III Presented by: Chris Wassenius
Outline ● Introduction ● Related Work ● Method ● Results ● Conclusion / Future work
Introduction ● GPU power has increased year after year ● So has the size of models. . . ● Need acceleration algorithms – Visibility culling – Level of detail – texturing
Introduction
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 ● – Occluder Fusion ● – No restriction on types of occluders 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
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 Approximate Visibility Culling
Method ● Depth Test vs. Overlap Test
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)
Results
Results 635, 252 polygons 82. 7 % culled
Conclusion and Future Work ● ● Pros – Good visibility culling algorithm for large models with large depths – Works well with arbitrary models Cons – Fairly large overhead
Conclusion and Future Work ● Integrate LOD ● Occlusion preserving simplification
- Slides: 26