330 likes | 512 Views
Visibility Culling. David Luebke Computer Science Department University of Virginia <luebke@cs.virginia.edu>. Recap: 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
E N D
Visibility Culling David Luebke Computer Science Department University of Virginia <luebke@cs.virginia.edu>
Recap: 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
Recap:General Occlusion Culling • I’ll discuss two algorithms: • Hierarchical Z-Buffer • Ned Greene, SIGGRAPH 93 • Hierarchical Occlusion Maps • Hansong Zhang, SIGGRAPH 97
Recap: Hierarchical Z-Buffer • Replace Z-buffer with a Z-pyramid • Lowest level: full-resolution Z-buffer • Higher levels: each pixel represents the maximum depth of the four pixels “underneath” it • Basic idea: hierarchical rasterization of the polygon, with early termination where polygon is occluded
Hierarchical Z-Buffer • Idea: test polygon against highest level first • If polygon is further than distance recorded in pixel, stop—it’s occluded • If polygon is closer, recursively check against next lower level • If polygon is visible at lowest level, set new distance value and propagate up
Hierarchical Z-Buffer • Z-pyramid exploits image-space coherence: • Polygon occluded in a pixel is probably occluded in nearby pixels • HZB also exploits object-space coherence • Polygons near an occluded polygon are probably occluded
Hierarchical Z-Buffer • Exploiting object-space coherence: • Subdivide scene with an octree • All geometry in an octree node is contained by a cube • Before rendering the contents of a node, “render” the faces of its cube (i.e., query the Z-pyramid) • If cube faces are occluded, ignore the entire node
Hierarchical Z-Buffer • HZB can exploit temporal coherence • Most polygons affecting the Z-buffer last frame will affect Z-buffer this frame • HZB also operates at max efficiency when Z-pyramid already built • So start each frame by rendering octree nodes visible last frame
Hierarchical Z-Buffer:Discussion • HZB needs hardware support to be really competitive • To date, hardware vendors haven’t bought in: • Z-pyramid (and hierarchies in general) unfriendly to hardware • Unpredictable Z-query times generate bubbles in rendering pipe • But there is a promising trend…
Hierarchical Z-Buffer • Hardware beginning to support Z-query operation • Allows systems to exploit: • Object-space coherence (bounding boxes) • Temporal coherence (last-rendered list) • Systems I’m aware of: • HP Visualize-fx graphics • SGI Visual Workstation products • An aside: applies to cell-portal culling!
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
HierarchicalOcclusion Maps • Occluders versus occludees: Blue parts: occluders Red parts: occludees
View X Point Y Z Hierarchical Occlusion Maps • Depth versus overlap: Depth + Overlap = Occlusion
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)
Occlusion Maps Rendered Image Occlusion Map
Occlusion Map Pyramid 64 x 64 32 x 32 16 x 16
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
Overlap Tests • Query: is projection of occludee inside cumulative projection of occluders? • Cumulative projection: occlusion pyramid • Ocludee projection: expensive in general • Overestimate ocludee with 3-D bounding box • Overestimate projection of 3-D bounding box with 2-D bounding rectangle in screen-space
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
1 0 2 3 4 Aggressive Approximate Culling
Hierarchical Occlusion Maps • Not discussed here: • Depth test • Depth estimation buffer • Modified Z-buffer • Selecting occluders • For more details, see attached excerpt from Hansong Zhang’s dissertation
HOM: Discussion • Provides a robust, general, hardware-friendly occlusion culling algorithm • Supports dynamic scenes • Supports non-polygonal geometry • Not many hardware assumptions
HOM: Discussion • Efficient coding, careful tuning a must • Fairly high per-frame overhead • Needs high depth complexity, good occluder selection to be worthwhile • UNC’s MMR system:
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, single highly-tesselated object (e.g., a radiositized room)
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
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
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
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
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
Summary • Architectural models: visibility is practically a solved problem • Cells and portals work well • Cull-box portal culling: simple, fast • Line-stabbing: elegant, powerful
Summary • Occlusion culling of general models: still a largely open problem • Important issues: • Dynamic scenes • Aggregate occlusion effects
Summary • General occlusion culling algorithms: • Hierarchical Z-buffer: • A simple, truly elegant algorithm • But doesn’t seem amenable to hardware • Hierarchical occlusion maps: • More complicated, difficult to code & tune • Better suited to current hardware • Lends itself well to aggressive culling • Fairly high overhead, only worthwhile with high depth complexity • Promising trend in hardware