1 / 30

Visibility Culling III: Image-Space Occlusion

Visibility Culling III: Image-Space Occlusion. David Luebke Computer Science Department University of Virginia <luebke@cs.virginia.edu>. Review: General Occlusion Culling. When cells and portals don’t work… Trees in a forest A crowded train station

ruana
Download Presentation

Visibility Culling III: Image-Space Occlusion

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Visibility Culling III:Image-Space Occlusion David Luebke Computer Science Department University of Virginia <luebke@cs.virginia.edu>

  2. Review: General Occlusion Culling • When cells and portals don’t work… • Trees in a forest • A crowded train station • Need general occlusion culling algorithms: • Aggregate occlusion • Dynamic scenes • Non-polygonal scenes

  3. Review: Hierarchical Z-Buffer • A Z-pyramid represents depth buffer in hierarchical fashion • Depth at each pixel at a given level represents the max of the depth of the four corresponding pixels at next level • Rasterize triangles into buffer hierarchically with early termination

  4. Review:Hierarchical Z-Buffer • Organize scene into an octree (a kind of spatial hierarchy) • Before rendering the polygons associated with a node in the octree, test if the node’s bbox is visible • Do an occlusion query to “test render” the faces of the bounding box against the depth-buffer • If query fails, bbox would not be visible and we can skip the node’s geometry

  5. Review: Hierarchical Z-Buffer • HZB algorithm is most effective when Z-pyramid is “mostly complete” • Start by rendering nodes visible last frame directly into full-res Z-buffer • Build Z-pyramid from full-res Z-buffer • Traverse octree front-to-back, using Z-query to test nodes and render if needed • Note: also test nodes already rendered to see if they have become invisible

  6. Review: Hierarchical Z-Buffer • HZB algorithm exploits: • Image-space coherence: • Polygons occluded in one pixel are probably occluded in nearby pixels • Object-space coherence: • Polygons near an occluded polygon are probably also occluded • Temporal coherence: • Polygons visible recently are probably still visible

  7. Hierarchical Occlusion Maps • A more hardware-friendly general occlusion culling algorithm • Two major differences from HZB: • Separates occluders from occludees • Decouples occlusion test into an depth test and a overlap test

  8. HierarchicalOcclusion Maps • Occluders versus occludees: Blue parts: occluders Red parts: occludees

  9. View X Point Y Z Hierarchical Occlusion Maps • Depth versus overlap: Depth + Overlap = Occlusion

  10. Hierarchical Occlusion Maps • Representation of projection for overlap test: occlusion map • Corresponds to a screen subdivision • Records average opacity per partition • Generate by rendering occluders • Record pixel opacities (i.e., coverage)

  11. Occlusion Maps Rendered Image Occlusion Map

  12. Occlusion Map Pyramid • Analyzing cumulative projection: • A hierarchical occlusion map (HOM) • Generate by recursive averaging (once per frame) • Records average opacities for blocks of multiple pixels, representing occlusion at multiple resolutions • Construction can be accelerated by texture hardware

  13. Occlusion Map Pyramid 64 x 64 32 x 32 16 x 16

  14. Occlusion Map Pyramid

  15. Overlap Tests • Query: is projection of occludee inside cumulative projection of occluders? • Cumulative projection: occlusion pyramid • Occludee projection: expensive in general • Overestimate occludee with 3-D bounding box • Overestimate projection of 3-D bounding box with 2-D bounding rectangle in screen-space

  16. Overlap Tests • Hierarchical structure enables some optimizations: • Predictive rejection • Terminate test when it must fail later • Conservative rejection • The transparency threshold • Aggressive Approximate Culling • Ignore objects barely visible through holes • The opacity threshold

  17. 1 0 2 3 4 Aggressive Approximate Culling

  18. Hierarchical Occlusion Maps • Not discussed here: • Depth test • Depth estimation buffer • Modified Z-buffer • Selecting occluders • For more details, see Hansong Zhang’s dissertation at UNC

  19. HOM: Discussion • Provides a robust, general, hardware-friendly occlusion culling algorithm • Supports dynamic scenes • Supports non-polygonal geometry • Few hardware assumptions

  20. HOM: Discussion • Not clear how relevant the actual algorithm is on modern hardware • Most interesting/important points: • Separation of occluders and occludees • Factoring occlusion into overlap + depth • Aggressive approximate culling • To think about: • How could we simplify the occluders to accelerate occlusion testing?

  21. Current Hardware Support • Recent hardware supports Z-query operation • Allows systems to exploit: • Object-space coherence (bounding boxes) • Temporal coherence (last-rendered list) • Examples in OpenGL: • HP_OCCLUSION_QUERY • NV_OCCLUSION_QUERY • Go to NVIDIA occlusion presentation… • An aside: applies to cell-portal culling!

  22. Visibility Culling: Discussion • When is visibility culling worthwhile? • When scene has high depth complexity • Examples: architectural walkthroughs, complex CAD assemblies, dense forest • Non-examples: terrain (usually), single highly-tessellated object (e.g., bunny, a radiositized room)

  23. Visibility Culling:Discussion • How does visibility culling compare to: • Level-of-detail: • Reduces geometry processing • Helps transform-bound apps • Visibility culling: • Reduces geometry and pixel processing • Helps transform- and fill rate-bound apps • Texture / Image representations: • Reduces geometry and pixel processing • Incurs texture/image processing costs

  24. Visibility Culling: Discussion • How does visibility culling interact with level of detail? • Fairly seamless integration; generally a win • One issue: visibility of simplified model may differ from original model; requires some care • LODs can speed up occluder selection and rendering

  25. Visibility Culling: Discussion • How does visibility culling interact with texture and image-based representations? • Texture/image reps generally replace far-field geometry • Involves an implicit occlusion culling step • Reduces scene depth complexity, decreasing the utility of visibility culling • If near-field geometry still includes complex heavily-occlusive assemblies, still a win

  26. Visibility Culling:Discussion • How much culling effort is appropriate? • Cells and portals: relatively cheap, with large potential speedups • Hierarchical occlusion maps: relatively costly, carefully weigh potential gains • Multiple processors allow much more aggressive culling calculation • Pipelining culling calculations, Performer-style, allows cull time = render time • Tradeoff: one frame increased latency

  27. Summary • The basic, very powerful idea: • Rapidly compute a potentially visible set • Let hardware handle the rest • For many scenes, visibility culling is a simple way to get huge speedups • View-frustum culling always a must • For scenes with high depth complexity, occlusion culling can be a big win

  28. Summary • Architectural models: visibility is practically a solved problem • Cells and portals work well • Cull-box portal culling: simple, fast • Line-stabbing: elegant, powerful

  29. Summary • Occlusion culling of general models: still a largely open problem • Important issues: • Dynamic scenes • Aggregate occlusion effects • Image-based approaches seem most promising at this time

  30. Summary • General occlusion culling algorithms: • Hierarchical Z-buffer: • A simple, truly elegant algorithm • But doesn’t seem amenable to hardware • Hierarchical occlusion maps: • Separates occluders from occludees, overlap from depth • Lends itself well to aggressive culling • Fairly high overhead, only worthwhile with high depth complexity • Recent hardware supports (asynchronous) occlusion query

More Related