Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 Implementation  





2 References  














Back-face culling






Deutsch
فارسی
Italiano
Nederlands
Português
 

Edit links
 









Article
Talk
 

















Read
Edit
View history
 








Tools
   


Actions  



Read
Edit
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Cite this page
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 
















Appearance
   

 






From Wikipedia, the free encyclopedia
 


On the left a model without BFC; on the right the same model with BFC: back-faces are removed.

Incomputer graphics, back-face culling determines whether a polygon is drawn. It is a step in the graphical pipeline that tests whether the points in the polygon appear in clockwise or counter-clockwise order when projected onto the screen. If the user has specified that front-facing polygons have a clockwise winding, but the polygon projected on the screen has a counter-clockwise winding then it has been rotated to face away from the camera and will not be drawn.

The process makes rendering objects quicker and more efficient by reducing the number of polygons for the program to draw. For example, in a city street scene, there is generally no need to draw the polygons on the sides of the buildings facing away from the camera; they are completely occluded by the sides facing the camera.

In general, back-face culling can be assumed to produce no visible artifact in a rendered scene if it contains only closed and opaque geometry. In scenes containing transparent polygons, rear-facing polygons may become visible through the process of alpha composition. In wire-frame rendering, back-face culling can be used to partially address the problem of hidden-line removal, but only for closed convex geometry.

A related technique is clipping, which determines whether polygons are within the camera's field of view at all.

Another similar technique is Z-culling, also known as occlusion culling, which attempts to skip the drawing of polygons that are covered from the viewpoint by other visible polygons.

In non-realistic renders certain faces can be culled by whether or not they are visible, rather than facing away from the camera. "inverted hull" or "front face culling" can be used to simulate outlinesortoon shaders without post-processing effects.[1]

Implementation[edit]

One method of implementing back-face culling is by discarding all triangles where the dot product of their surface normal and the camera-to-triangle vector is greater than or equal to zero:

where P is the view point, V0 is the first vertex of a triangle and N is its normal, defined as a cross product of two vectors representing sides of the triangle adjacent to V0

Since cross product is anticommutative, defining the normal in terms of cross product allows to specify normal direction relative to triangle surface using vertex order (winding):

Since vertex ordering is chosen such that front-facing triangles have clockwise winding, N defined as above is the normal directed outward from the object.

If the points are already in view space, P can be assumed to be (0, 0, 0), the origin, simplifying the above inequality:

It is also possible to use this method in projection space by representing the above inequality as a determinant of a matrix and applying the projection matrix to it.[2]

Another method exists based on reflection parity, which is more appropriate for two dimensions where the surface normal cannot be computed (also known as CCW check).

Let a unit triangle in two dimensions (homogeneous coordinates) be defined as

Then for some other triangle, also in two dimensions,

define a matrix that transforms the unit triangle:

so that:

Discard the triangle if matrix M contained an odd number of reflections (facing the opposite way of the unit triangle)

The unit triangle is used as a reference and transformation M is used as a trace to tell if vertex order is different between two triangles. The only way vertex order can change in two dimensions is by reflection. Reflection is an example of involutory function (with respect to vertex order), therefore an even number of reflections will leave the triangle facing the same side, as if no reflections were applied at all. An odd number of reflections will leave the triangle facing the other side, as if exactly after one reflection. Transformations containing an odd number of reflections always have a negative scaling factor, likewise, the scaling factor is positive if there are no reflections or even a number of them. The scaling factor of a transformation is computed by determinant of its matrix.

References[edit]

  1. ^ Hoeven, van der, Jorick. "Non-Photorealism in Interactive Rendering Systems" (PDF). Archived from the original (PDF) on 2021-11-02. Retrieved 2023-08-10.
  • ^ David H. Eberly (2006). 3D Game Engine Design: A Practical Approach to Real-Time Computer Graphics, p. 69. Morgan Kaufmann Publishers, United States. ISBN 0122290631.

  • Retrieved from "https://en.wikipedia.org/w/index.php?title=Back-face_culling&oldid=1213017353"

    Categories: 
    3D rendering
    Computer graphics algorithms
    Hidden categories: 
    Articles with short description
    Short description is different from Wikidata
     



    This page was last edited on 10 March 2024, at 18:09 (UTC).

    Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



    Privacy policy

    About Wikipedia

    Disclaimers

    Contact Wikipedia

    Code of Conduct

    Developers

    Statistics

    Cookie statement

    Mobile view



    Wikimedia Foundation
    Powered by MediaWiki