Ash*_*unn 22
如果所有模型都被正确定义(凸起,顶点缠绕一致),剔除将永远不会影响性能,并且几乎总能帮助提高性能.
想象一下,你正在渲染一个立方体,禁用剔除.立方体背面(远侧)的面朝向远离您的方向渲染,无论您选择的背面材质属性如何应用.然后渲染立方体前面的面:由于刚刚渲染的背面是立方体的内部,它们被正面100%遮挡.
如果立方体的方向不同,则可能首先对前面进行光栅化,但仍然会处理后面,然后z缓冲区会拒绝这些片段.
最终结果:您根据需要将2倍的片段光栅化.这对于大量多边形或复杂像素着色器来说是一个大问题.面部剔除可以让您完全避免光栅化您知道不会出现的面部.
如果你有一个包含~100,000个多边形的角色模型,则面部剔除会使像素硬件每帧所需的工作量减少一半.如果你有大的表面着色器,这是一个很大的节省.
如果您正在使用小型模型而不使用着色器,那么现在剔除并不重要.但无论如何,这是一个很好的做法.
小智 6
启用面部剔除(通常是背面)会对渲染性能产生重大影响.
现在要回答的问题是"为什么不默认启用剔除或者为什么不总是使用?" 有几个因素决定了启用剔除是否可行.一个是正在渲染的模型以及如何查看它.
对于模型中的每个多边形,如果只能看到前面或后面的一个面(当从所有可能的角度观察模型时),那么我们可以剔除另一个面.
对于Ex:"立方体",无论您是从内部还是外部看,旋转时,您只能看到构成立方体的每6个多边形的一侧.
另一个例子:在我的海战(3D)游戏中的"船模型帆船"中,船模的风帆是用几个扁平多边形建造的表面.当船在水中移动时,人们可以看到帆的两侧.在这种情况下,不希望剔除任何一个面.
因此,可以为场景中的所有模型启用剔除,这些模型遵循立方体语义并禁用所有其他模型.
应尽可能使用PS Face Culling.