【问题标题】:Back-face Culling Performance背面剔除性能
【发布时间】:2013-10-11 07:08:42
【问题描述】:

我一直在想这个:

如果我仅渲染正面多边形,而启用背面剔除,是否会影响性能?
在这种情况下我应该禁用它吗?
还是这取决于 OpenGL 实现? 我可以想象,在软件实现上,禁用背面剔除渲染多边形会更快。但是在硬件上呢?

编辑
澄清一下:我的场景中永远不会有任何背面的多边形。背面剔除永远不会剔除任何东西。

【问题讨论】:

  • 您为什么不自己进行基准测试,例如在屏幕上渲染 x 数量的正面多边形,同时启用和禁用背面剔除,然后您就可以看到答案了。跨度>
  • 在 OpenGL 中确定多边形的缠绕顺序是一个非常简单的过程。它使用后投影顶点(因此,有时如果您使用奇怪的投影矩阵,则必须切换前多边形绕组),而不是需要计算多边形法线的更昂贵的侧面计算。启用它将减少填充片段的数量,因此它应该始终提供性能增加。你甚至可以在 CPU 上进行面部剔除,这在 PC 上曾经很常见,但现在主要保留给 PS3 上的 CELL 处理器的 SPE,这仍然是一个可行的优化。
  • 因为所有多边形都有正面和背面,除非您剔除其中一个。
  • 因为如果您禁用背面剔除,您将不再只渲染正面多边形。
  • 顺便说一句,这也不是我的第一语言。这就是为什么我把我读到的所有东西都从字面上看,并且对模糊的书面陈述感到麻烦。无论如何,没有必要生气。现在我们已经弄清楚了您的意思,在硬件实现中,背面剔除不应在原始组装期间引入任何可测量的开销。在软件中,也许但又归结为后投影顶点的缠绕,它不需要计算表面法线,因此它比您直观地想象的要便宜。

标签: opengl


【解决方案1】:

由于无论是否启用剔除都必须确定图元的缠绕(用于光栅化过程),因此背面剔除实际上是免费的。所以你可以把它留在上面。切换剔除状态本身对于 OpenGL 实现来说是轻而易举的事情。它不会影响任何缓存、管道状态或其他可能对性能产生巨大影响的事物。

【讨论】:

  • 非常感谢您的回答!这正是我一直在寻找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
相关资源
最近更新 更多