2

为了尽量减少状态变化的数量,我应该对网格的绘制顺序进行排序。无论如何,如果我有多个使用多个着色器的网格,我需要选择按顶点属性绑定或着色器统一参数之一进行排序。

我应该选择什么?我认为由于 GPU 缓存命中率,我必须选择最小化顶点属性更改,但我不知道着色器更改成本。决定绘图顺序时的一般关注点是什么?我可以得到一些基础来选择这个吗?

PS。我的目标是 iOS/PowerVR SGX 芯片。

编辑

我决定按材质排序,因为许多网格将只使用几种材质,但有一堆网格要绘制。这意味着我将有更多机会共享材质而不是共享网格。因此它将有更多机会减少状态更改计数。反正我不确定,所以如果你有更好的意见,请告诉我。

4

2 回答 2

3

您不需要在 PowerVR SGX 上对不透明对象进行深度排序,因为它使用了与顺序无关的、像素完美的隐藏表面去除。深度排序仅用于实现适当的透明度/半透明渲染。

新交所的最佳实践是按状态排序,顺序如下:

  • 视口
  • 帧缓冲区
  • 着色器
  • 纹理
  • 剪辑、混合等

使用纹理图集可以显着减少纹理状态变化。通过批处理可以减少绘制调用的数量。

这只是黄金法则,记住你应该先分析然后优化:)

请参阅: http ://www.imgtec.com/powervr/insider/docs/PowerVR.Performance%20Recommendations.1.0.28.External.pdf

于 2012-08-22T13:12:54.823 回答
1

使用类似http://realtimecollisiondetection.net/blog/?p=86的东西,然后您可以在运行时更改代码中首先排序的部分,以实现每台设备的最佳速度

于 2012-08-22T12:32:57.773 回答