410 likes | 602 Views
Culling Techniques. “To cull” means “to select from group” In graphics context: do not process data that will not contribute to the final image The “group” is the entire scene, and the selection is a subset of the scene that we do not consider to contribute. Culling: Overview.
E N D
Culling Techniques • “To cull” means “to select from group” • In graphics context: do not process data that will not contribute to the final image • The “group” is the entire scene, and the selection is a subset of the scene that we do not consider to contribute
Culling: Overview • Backface culling • Hierarchical view-frustum culling • Portal culling • Detail culling • Occlusion culling
view frustum detail backface occlusion portal Culling examples
Backface Culling • Simple technique to discard polygons that faces away from the viewer • Can be used for: • closed surface (example: sphere) • or whenever we know that the backfaces never should be seen (example: walls in a room) • Two methods (screen space, eye space) • Which stages benefits? Rasterizer, but also Geometry (where test is done)
Backface culling (cont’d) • Often implemented for you in the API • OpenGL: glCullFace(GL_BACK); • How to determine what faces away? • First, must have consistently oriented polygons, e.g., counterclockwise 2 2 0 1 0 front facing back facing 1
How to cull backfaces 1 2 back 2 eye 1 front 0 0 front back screen space eye space
View-Frustum Culling • Bound every “natural” group of primitives by a simple volume (e.g., sphere, box) • If a bounding volume (BV) is outside the view frustum, then the entire contents of that BV is also outside (not visible) • Avoid further processing of such BV’s and their containing geometry
Can we accelerate VF culling further? • Do what we always do in graphics… • Use a hierarchical approach, e.g, the scene graph • Which stages benefits? • Geometry and Rasterizer • Bus between CPU and Geometry
root Example of Hierarchical View Frustum Culling camera
view frustum detail backface occlusion portal Culling examples
Cells and Portals [Airey90, Teller91, Luebke95]
Cells and Portals • For each cell, create a list (set) of potentially visible objects (or PVS) from any viewpoint in the cell. • During run-time: • Determine cell of the current eye-point and gets its PVS. • Cull down this list by clipping to the viewing frustum. • Render this set.
Determining the PVS • Two options: • Static (preprocessing stage) • Cell-to-cell visibility • Cell-to-region visibility • Cell-to-object visibility • Leads to very large and complicated data structures. • Dynamic (dependent on the viewing frustum) • Eye-to-cell • Eye-to-region • Eye-object
Cells and Portals(Teller and Sequin, SIG 91) • Decompose space into convex cells • For each cell, identify its boundary edges into two sets: opaque or portal • Pre-compute visibility among cells • During viewing (e.g., walkthrough phase), use the pre-computed potentially visible polygon set (PVS) of each cell to speed-up rendering
Cell-to-Cell Visibility • For Each Cell Find Stabbing Tree
S•L 0, L L S•R 0, R R Find_Visible_Cells(cell C, portal sequence P, visible cell set V) V=V C for each neighbor N of C for each portal p connecting C and N orient p from C to N P’ = P concatenate p if Stabbing_Line(P’) exists then Find_Visible_Cells (N, P’, V) Compute Cells Visible From EachCell Linear programming problem:
Cell-to-Region Visibility • A cell is visible if • cell is in VV • all cells along stab tree are in VV • all portals along stab tree are in VV • sightline within VV exists through portals • The cell-to-region visibility is a subset of the cell-to-cell visibility for the current cell.
Cell-to-Region Visibility • The cell-to-object visibility is a list of those objects that are in the visible regions.
Instead of pre-processing all the PVS calculation, it is possible to use image-space portals to make the computation easier Can be used in a dynamic setting Image Space Cells and Portals (Luebke and Georges, I3D 95)
Portal Culling Images courtesy of David P. Luebke and Chris Georges • Average: culled 20-50% of the polys in view • Speedup: from slightly better to 10 times
Portal culling example • In a building from above • Circles are objects to be rendered
Portal Culling Algorithm • Divide into cells with portals (build graph) • For each frame: • Locate cell of viewer and init 2D AABB to whole screen • * Render current cell with VF cull w.r.t. AABB • Traverse to closest cells (through portals) • Intersection of AABB & AABB of traversed portal • Goto *
Portal overestimation • To simplify: actual portal overestimated portal
Portal Culling Algorithm • When to exit: • When the current AABB is empty • When we do not have enough time to render a cell (“far away” from the viewer) • Also: mark rendered objects • Which stages benefits? • Geometry, Rasterizer, and Bus • Source (for Performer-based pfPortal): http://www.cs.virginia.edu/~luebke/
Replacing Geometry with Images • Algorithm • Select subset of model • Create image of the subset • Cull subset and replace with image • Why? • Image displayed in (approx.) constant time • Image reused for several frames
Portal Images [Aliaga97]
Creating Portal Images Ideal portal image would be one sampled from the current eye position portal eye
portal Creating Portal Images Reference COPs Display one of a large number of pre-computed images (~120)
Creating Portal Images Reference COPs or… Warp one of a much smaller number of reference images portal
Example Rendering Geometry + = Final Scene Image
Discussion on Object Space • Visibility culling with large occluders • good for outdoor urban scenes where occluders are large and depth complexity can be very high • not good for general scenes with small occluders • Cells and portals • gives excellent results IF you can find the cells and portals • good for interior scenes • identifying cells and portals is often done by hand
VISUALIZE fx’s Occlusion Culling Algorithm • Algorithm (extension to OpenGL): • Scan convert faces of object, typically bounding box of complex object, but do not write Z • Get boolean which says if there was a Z-value from scan conversion that was closer than that of the Z-buffer (NVIDIA: get pixels seen count) • If seen, render complex object
VISUALIZE fx’s Occlusion Culling Algorithm (cont’d) • Implications: • If an object is occluded, then we gain (hopefully) a lot of performance since we only scan convert one Bounding Box (BB) instead of the entire object • If BB is not occluded, then we have to render the object, and we lose a little performance • Drawing order matters: drawing front-to-back gives more occlusion
Real-Time Rendering? • In computer graphics, “real-time” is used in a soft way: say >30 fps for most frames • In other contexts, it’s a tougher requirement: the framerate must never be <30 fps, i.e., constant framerate • What can we do? • Reactive LOD algorithm • Reactive detail culling • Reactive visual quality
Resources and Pointers • http://www.realtimerendering.com • Journal of Graphics Tools • http://www.acm.org/jgt/ • source for projected screen area of box • intersection test routines • occlusion culling • http://www.magic-software.com