为了最小化状态变化的数量,我应该对网格的绘制顺序进行排序。无论如何如果我有多个网格使用多个着色器,我需要选择顶点属性绑定或着色器统一参数之一进行排序。
我应该选择什么?我认为由于GPU缓存命中率,我必须选择最小化顶点属性更改,但我不知道着色器更改成本。决定绘图顺序时一般关注的是什么?我可以选择一些基础吗?
PS。我的目标是iOS / PowerVR SGX芯片。
我决定按材质排序,因为许多网格物体只会使用一些材质,但是要绘制一堆网格物体。这意味着我将有更多机会共享材料而不是共享网格。因此,它将有更多机会减少状态变化计数。无论如何我不确定,所以如果你有更好的意见,请告诉我。
答案 0 :(得分:3)
您不需要对PowerVR SGX上的不透明对象进行深度排序,因为它使用与顺序无关的像素完美隐藏表面移除。 深度排序只是为了实现适当的透明度/半透明度渲染。
SGX的最佳做法是按州按顺序排序:
使用纹理图集可以显着减少纹理状态的变化。 可以通过批处理来减少绘制调用的数量。
这就是黄金法则,请记住,您应首先进行分析,然后进行优化:)
请参阅: http://www.imgtec.com/powervr/insider/docs/PowerVR.Performance%20Recommendations.1.0.28.External.pdf
答案 1 :(得分:1)
使用类似http://realtimecollisiondetection.net/blog/?p=86之类的内容,然后您可以在运行时更改代码中首先排序的部分,以实现每台设备的最佳速度