Back Face Culling - Falmouth-Games-Academy/comp350-research-journal GitHub Wiki
Back Face culling is the process of determining which parts of the polygon in the scene are facing towards the camera origin. The faces of the polygon which are not facing the cameras origin location do not need to be rendered. These polygons can be'culled', thus saving computation time and memory traffic. Since we know half of the faces of an object face away from the camera, this reduces the load amount of objects by roughly 50% and can improve performance in real-world applications up to 20% 3(https://www.gamasutra.com/view/feature/3366/a_compact_method_for_backface_.php?print=1). Using backface culling does have its limitations the author of 3(https://www.gamasutra.com/view/feature/3366/a_compact_method_for_backface_.php?print=1) fails to mention. Firstly, for backface culling to work as intended we must assume that the object to be culled must be opaque5(https://ieeexplore-ieee-org.ezproxy.falmouth.ac.uk/stamp/stamp.jsp?tp=&arnumber=252595). Second, and perhaps the most difficult to check is the object must not have any holes 5(https://ieeexplore-ieee-org.ezproxy.falmouth.ac.uk/stamp/stamp.jsp?tp=&arnumber=252595) otherwise we may cull some of the polygons that do need to be rendered.
This approach is often used alongside other visibility culling techniques like Occlusion Culling and View Frustum Culling (VFC), to reduce the amount of geometry that is required to be rendered 6(https://www.researchgate.net/profile/Jihad_El-Sana/publication/220943595_Integrating_Occlusion_Culling_with_View-Dependent_Rendering/links/0deec51685aa58d44f000000/Integrating-Occlusion-Culling-with-View-Dependent-Rendering.pdf). The effects of backface culling on the Frames Per Second (FPS) can be seen in the images below.
This is a graphical object which has not gone through the process of Back Face Culling.
This is the same graphical object after Back Face Culling.
As you can see the FPS of the object in the second image is higher than the first, illustrating the efficacy of Back Face Culling. The above example uses FPS to measure the performance of the demo, Tony Albrecht 4(https://engineering.riotgames.com/news/profiling-measurement-and-analysis) recommends using ms per frame instead, read more at Measuring Performance.
With most game engines backface culling is conducted by default. Both the Unreal and Unity game engines have backface culling enabled but provide options to turn it off 8(https://docs.unrealengine.com/en-us/Resources/ContentExamples/MaterialProperties/1_4)[9](/Falmouth-Games-Academy/comp350-research-journal/wiki/9)(https://docs.unity3d.com/Manual/SL-CullAndDepth.html). For Unreal, this comes in the form of a “Two Sided” Boolean. The image below shows why in some cases developers will want to disable backface culling, specifically in the case of semi-transparent objects. Having the backfaces visible in this case can make more sense but will decrease performance.
Back face culling, used in conjunction with Occlusion Culling and View Frustum Culling (VFC) can result in the most effective way to determine how many objects should be rendered on a screen 7(https://www.researchgate.net/figure/Three-types-of-visibility-culling-techniques-1-View-Frustum-Culling-2-back-face_fig1_2440562).
References
[1] https://en.wikipedia.org/wiki/Back-face_culling
[2] http://glasnost.itcarlow.ie/~powerk/GeneralGraphicsNotes/HSR/backfaceculling.html
[3] https://www.gamasutra.com/view/feature/3366/a_compact_method_for_backface_.php?print=1
[4] https://engineering.riotgames.com/news/profiling-measurement-and-analysis
[5] Blinn, James F. "Backface culling snags (rendering algorithm)." IEEE Computer Graphics and Applications 13.6 (1993): 94-97.
[6] Andújar, Carlos, et al. "Integrating Occlusion Culling and Levels of Detail through Hardly‐Visible Sets." Computer Graphics Forum. Vol. 19. No. 3. Oxford, UK and Boston, USA: Blackwell Publishers Ltd, 2000.
[7] Cohen-Or, Daniel, et al. "A survey of visibility for walkthrough applications." IEEE Transactions on Visualization and Computer Graphics 9.3 (2003): 412-431.
[8] https://docs.unrealengine.com/en-us/Resources/ContentExamples/MaterialProperties/1_4