2

使用 PVRUniScoEditor 来分析我们的像素着色器,我发现我们的片段着色器对于大多数多边形以大约 20 个周期进入,而对于粒子着色器则进入 6-8 个周期。就获得不错的性能而言,这似乎是我们的黄油区,但我现在想知道我是否通过使这些着色器尽可能简单来掩盖其他问题。我会很高兴这些家伙有更多的功能。我们正在渲染一个具有大约 120k 多边形的场景,并且使顶点着色器更重对性能几乎没有影响。

所以我想我想知道对于一个非常频繁使用的片段着色器来说有多少是太多了,对于 30fps 来说有多少是太多的多边形。

4

1 回答 1

1

没有一个正确的答案。虽然 PVRUniScoEditor 是用于相对估计着色器性能的好工具,但您不能只说消耗 X 个估计周期的片段着色器将导致给定设备上的 Y 帧速率。

特定着色器的重量可能只是拼图中的一部分。它会在屏幕上覆盖多少个片段?您在片段处理方面是否存在性能瓶颈(OpenGL ES Driver 工具中的渲染器利用率接近 100%)?是否启用混合?所有这些因素都会影响渲染一帧所需的时间。

iOS 上基于 tile 的延迟渲染器还具有一些有趣的性能特征,其中调整特定片段着色器的循环计数不会导致渲染时间的线性变化,即使对于填充率受限的应用程序也是如此。你可以在我的这个问题中看到一个例子,我遇到了突然的性能变化,片段着色器略有变化。在那种情况下,调整着色器并不是主要的解决方案,防止混合不必要的片段才是主要的解决方案。

除了分析器报告的直接循环计数之外,还有纹理带宽的限制,以及我发现缓存未命中可能在这些着色器中产生的严重影响。

我想说的是,了解应用程序中着色器性能的唯一真正方法是运行它们并查看。有一些一般性的提示可以用来调整不够快的东西,但是变量太多,每个解决方案都是特定于应用程序的。

于 2012-05-31T01:40:58.740 回答