Upload
jeffry-walker
View
215
Download
0
Tags:
Embed Size (px)
Citation preview
Culling TechniquesCulling Techniques
“To cull” means “to select from group” In graphics context: do not process data
that will not contribute to the final imageThe “group” is the entire scene, and the
selection is a subset of the scene that we do not consider to contribute
Culling: OverviewCulling: Overview
Backface cullingHierarchical view-frustum cullingPortal cullingDetail cullingOcclusion culling
Backface CullingBackface 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)Backface culling (cont’d)
Often implemented for you in the APIOpenGL: glCullFace(GL_BACK);How to determine what faces away?First, must have consistently oriented
polygons, e.g., counterclockwise
0
1
2
front facing0
1
2
back facing
How to cull backfacesHow to cull backfaces
screen space
1
0
2
front
01
2
back
front
backeye
eye space
View-Frustum CullingView-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 Can we accelerate VF culling further?further?
Do what we always do in graphics…Use a hierarchical approach, e.g,
the scene graphWhich stages benefits?
– Geometry and Rasterizer – Bus between CPU and Geometry
Example of Hierarchical View Example of Hierarchical View Frustum CullingFrustum Culling
root
camera
Cells and PortalsCells 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 PVSDetermining 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
CellsCells andand PortalsPortals(Teller and Sequin, SIG 91)(Teller and Sequin, SIG 91)
Decompose space into convex cellsFor each cell, identify its boundary edges
into two sets: opaque or portalPre-compute visibility among cellsDuring viewing (e.g., walkthrough phase),
use the pre-computed potentially visible polygon set (PVS) of each cell to speed-up rendering
Compute Compute CCells ells VisibleVisible From From EachEach CCellell
S•L 0, L LS•R 0, R RLinear programming problem:
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)
Cell-to-Region VisibilityCell-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 VisibilityCell-to-Region Visibility
The cell-to-object visibility is a list of those objects that are in the visible regions.
Image Space Cells and PortalsImage Space Cells and Portals ((Luebke and Georges, I3D 95)Luebke and Georges, I3D 95) 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
Top View Showing Top View Showing tthe Recursivehe Recursive Clipping Clipping of the View Volumeof the View Volume
Portal CullingPortal CullingImages 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 examplePortal culling example In a building from above Circles are objects to be rendered
Portal Culling AlgorithmPortal 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 Culling AlgorithmPortal 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 objectsWhich stages benefits?
– Geometry, Rasterizer, and Bus
Source (for Performer-based pfPortal): http://www.cs.virginia.edu/~luebke/
Replacing Geometry with ImagesReplacing 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
Creating Portal ImagesCreating Portal Images
portaleye
Ideal portal Ideal portal image would be image would be one sampled one sampled from the current from the current eye positioneye position
Creating Portal ImagesCreating Portal Images
Reference COPs
Display one of a large number of pre-computed images (~120) portal
Creating Portal ImagesCreating Portal Images
portal
Reference COPs
or…
Warp one of a much smaller number of reference images
Discussion on Object Space 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 VISUALIZE fx’s Occlusion Culling AlgorithmAlgorithm
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 VISUALIZE fx’s Occlusion Culling Algorithm (cont’d)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?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