背面剔除真的能提高性能吗?

Posted

技术标签:

【中文标题】背面剔除真的能提高性能吗?【英文标题】:Does back-face culling really improve performance? 【发布时间】:2012-08-18 06:23:28 【问题描述】:

我正在通过在屏幕上绘制的简单立方体来测试面剔除(理论上,在旋转过程中的任何时候都不会绘制 3 个面)。我纠正了我的顶点,使一切都面向正确的方向,然后做了glEnable(GL_CULL_FACE)。问题是我没有看到我得到的帧速率有任何变化(也就是说,cull_face 似乎根本没有提高性能)。

我的情况是否根本不适合剔除?如果是,那么剔除在哪些类型的情况下具有明显优势?

关于我的测试用例:我只是画了一堆散布在一个大立方体中的立方体。增加多维数据集的数量,直到我的帧速率显着下降,这样我就可以衡量性能改进。在更改顶点的处理方式时,我确实看到了改进。但我发现面部剔除没有任何变化。

【问题讨论】:

【参考方案1】:

光栅化多边形,尤其是简单的着色器/光照,在现代 GPU 上是如此之快,以至于对于小多边形,您可能无法注意到差异。

如果您想更清楚地看到差异,请尝试使用更大的多边形或更复杂的着色器程序来增加花在着色上的时间百分比。

【讨论】:

这听起来很合理。我添加了一些全表面的背面多边形,从后向前绘制,仍然没有速度差异。 好的,我将全尺寸多边形数量增加到足够高,我可以开始看到差异。我想知道面部剔除测试是否会增加渲染成本(因此小的收益很容易被扩展计算抵消)? @edA-qamort-ora-y:自 Voodoo 1 天以来,图形硬件中就存在人脸剔除。很有可能你甚至都不会注意到它。

以上是关于背面剔除真的能提高性能吗?的主要内容,如果未能解决你的问题,请参考以下文章

OPENGL——背面剔除

听说,加缓存能提高性能?

背面剔除(backface culling)

多个连接和联合的查询性能真的很差,有没有其他方法可以提高执行时间?

减少 hitTest 调用以提高 Flash 游戏性能的最佳实践

使用 Traefik 提高 WebSocket 应用性能