Culling Techniques
The best optimization when rendering is to not render
anything unnecessary. And that is what culling is about, to find out
what can be skipped when rendering because it cannot be visible
anyway. Below are the basic culling techniques which most renders’
implements.
Back Face Culling
Faces that faces away from the camera cannot
be visible on the screen so they don’t need to be drawn. This is so often used
that it’s implemented by the hardware. It roughly cuts the amount of faces
drawn in half. Just remember to turn it on!
Portal Culling
A technique that divides the scene into cells with
portals between. When rendering, the camera will be in one of the rooms and
that room will be rendered normally. But for each portal that is visible in the
room a view frustum is set up for the size of the portal and then the room
behind it is rendered. This will work recursively. The result will be that a
lot of geometry can be culled by view frustum culling when rendering the other
rooms. A very useful technique for indoor scenes.
Detail Culling
When geometry is so far away that it’s not visible then
there is no need to draw it at all so it can safely be culled. A more advanced
scheme of detail culling that decreases the amount of details with the distance
is LOD (level of detail).
View frustum Culling
The faces that are outside the view frustum cannot
be visible on the screen (we don’t bother about reflections now) so they can be
culled. This check is done by checking if the geometries bounding volume is
outside the view frustum volume or not. So the check will not be done on every
face, as that would cost too much. Sometimes, the view frustum culling can cost
more than what is gain (for example when doing instancing). One way to speed up
view frustum culling is to use a suitable spatial structure for the scene
(octree, BSP or so).
Occlusion Culling
The hardest culling technique to implement.
Geometry that is occluded by other geometry does not need to be rendered. One
solution is to use the Z-buffer and sort the geometry in a front to back order.
But this does not always work and all pixels need to be checked against the
Z-buffer so it will be costly for big scenes. Better occlusion culling
techniques culls the geometry before it’s even sent to the GPU.
These are the different levels culling algorithms can work on various Games.
Triangle Level
Description: Determine for each triangle if it
should be culled or not.
Primary goal: Minimize triangle count.
Culling technique example: BSP (Binary Space Partition)
Usage: Not used anymore, cost too much CPU.
Primary goal: Minimize triangle count.
Culling technique example: BSP (Binary Space Partition)
Usage: Not used anymore, cost too much CPU.
Object Level
Description: Check each object (a group of
triangles in one buffer) if they should be culled or not.
Primary goal: Minimize triangle count and keep state changes low.
Culling technique example: View Frustum Culling of Bounding Box Hierarchies
Usage: Often used.
Primary goal: Minimize triangle count and keep state changes low.
Culling technique example: View Frustum Culling of Bounding Box Hierarchies
Usage: Often used.
Batch Level
Description: Will check whole batches (a group
of objects in one buffer) if they should be culled or not.
Primary goal: Minimize draw calls and triangle count.
Culling technique example: Uniform Grid Culling
Usage: Often used.
Culling technique example: Uniform Grid Culling
Usage: Often used.
Comments
Post a Comment