1 / 19

Visibility Culling

Visibility Culling. Visibility Culling. Back face culling View-frustrum culling Detail culling Occlusion culling. Construct bounding volumes (BVs) Create hierarchy BV/V-F intersection tests. View-Frustum Culling. Remove objects that are outside the viewing frustum.

Télécharger la présentation

Visibility Culling

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

  2. Visibility Culling • Back face culling • View-frustrum culling • Detail culling • Occlusion culling

  3. Construct bounding • volumes (BVs) • Create hierarchy • BV/V-F intersection • tests View-Frustum Culling • Remove objects that are outside the viewing frustum Mostly done in “Application Stage”

  4. View-Frustum Culling (2) • Culling against bounding volumes to save time • Bounding volumes – AABB, OBB, Spheres, etc. – easy to compute, as tight as possible Sphere OBB AABB

  5. View-Frustum Culling (3) • Often done hierarchically to save time In-order, top-down traversal and test

  6. View-Frustum Culling (4) • Two popular hierarchical data structures – BSP Tree and Octree Axis-Aligned BSP Polygon-Aligned BSP Intersecting?

  7. View-Frustum Culling (5) • Octree • A parent has 8 childrens • Subdivide the space until the • number of primitives within • each leaf node is less than a • threshold • In-order, top-down traversal

  8. Detail Culling • A technique that sacrifices quality for speed • Base on the size of projected BV – if it is too small, discard it. • Also often done hierarchilcally Always helps to create a hierarchical structure, or scene graph.

  9. Occulusion Culling • Discard objects that are occluded • Z-buffer is not the smartest algorithm in the world (particularly for high depth- complexity scenes) • We want to avoid the processing of invisible objects

  10. Occlusion Culling (2) • G: input graphics data • Or: occlusion representation • The problem: • algorithms for isOccluded() • Fast update Or OcclusionCulling (G) Or = empty For each object g in G if (isOccluded(g, Or)) skip g else render (g) update (Or) end End

  11. Hierarchical Visibility • Object-space octree • Primitives in a octree node are hidden if the octree node (cube) is hidden • A octree cube is hidden if its 6 faces are hidden polygons • Hierarchical visibility test:

  12. Hierarchical Visibility (obj-sp.) From the root of octree: • View-frustum culling • Scan conversion each of the 6 faces and perform z-buffering • If all 6 faces are hidden, discard the entire node and sub-branches • Otherwise, render the primitives here and traverse the front-to-back children recursively A conservative algorithm – why?

  13. Hierarchical Visibility (obj-sp.) • Scan conversion the octree faces can be expensive – cover a large number of pixels (overhead) • How can we reduce the overhead? • Goal: quickly conclude that a large polygon is hidden • Method: use hierarchical z-buffer !

  14. Hierarchical Z-buffer An image-space approach • Create a Z-pyramid 1 value ¼ resolutin ½ resolution Original Z-buffer

  15. 1 0 6 0 3 1 2 • 6 9 3 9 1 2 9 2 9 1 2 2 Hierarchical Z-buffer (2) ?

  16. Hierarchical Z-buffer (3) Isoccluded(g, Zp) near z = nearZ(BV(g)) if (near Z behind Zp_root.z) return true else return ( Isoccluded(g,Zp.c[0]) && Isoccluded(g,Zp.c[1]) && Isoccluded(g,Zp.c[2]) && Isoccluded(g,Zp.c[3]) ) end

  17. Hierarchical Z-buffer (4) update Visibility (OctreeNode N) if (isOccluded (N, Zp) then return; for each primitive p in N render and update Zp end for each child node C of N in front-to-back order Visibility ( C ) end

  18. Some Practical Issues • A fast software algorithm • Lack of hardware support • Scan conversion • Efficient query of if a polygon is visible (without render it) • Z feedback

  19. Combining with hardware • Utilizing frame-to-frame coherence • First frame – regular HZ algorithm (software) • Remember the visible octree nodes • Second frame (view changes slightly) • Render the previous visible nodes using OpenGL • Read back the Z-buffer and construct Z-pyramid • Perform regular HZ (software) • What about the third frame? • Utilizing hardware to perform rendering and Z-buffering – considerably faster

More Related