High culling percentage
Triangles are expensive inputs to a GPU, so it is critical to make sure that they are used wisely. Triangles that are thrown away during primitive culling have no visual benefit to the scene, so you should aim to optimize draw call dispatch on the GPU to minimize the number of primitives that are culled.
For well-performing 3D content, it is expected that half of all triangles are culled due to the facing test, because they make up the side of a model that is facing away from the camera. If significantly fewer triangles than this are being killed by the facing test, check that back-face culling is enabled for as many draw calls as possible.
The frustum test runs after the facing test and kills triangles that are outside of the view frustum. Aim to minimize the number of primitives killed by this test by filtering out as much as possible on the CPU, discarding a draw call when all objects that it contains are outside of the view frustum.
The sample test runs last, and kills triangles that are so small that they hit no sample points. Any measurable level of culling detected at this stage is indicative of an application using very dense geometry, which is very expensive for the GPU to process.
Avoid tiny triangles by:
- Using dynamic mesh level-of-detail to select simpler meshes as objects get further from the camera.
- Using texture pseudo-geometry techniques such as normal mapping to replace fine detail physical geometry.