现代GPU上的纹理变化(和其他状态变化)成本

kla*_*ius 4 directx 3d xna gpu direct3d

我正在编写一个基于场景图的图形引擎,用于建模目的.我正在使用XNA 4.在我阅读的许多地方,渲染过程中应该最小化纹理变化(以及其他状态变化)(因此我必须按材料来订购我的基元等).

我在XNA 4中创建了一个小型测试应用程序,它使用单个纹理渲染数百个斯坦福兔子模型,然后切换2个不同的纹理.渲染时间没有差异(但是我使用了小~100x100纹理).

所以我的问题是:

  • 我真的应该关心通过纹理/颜色/其他材料参数对基元进行排序吗?或者它在现代GPU上不太重要?
  • 如果不这样做,可预期的绩效损失百分比是多少?
  • 是否还有其他状态变化会影响性能?
  • 我在哪里可以找到关于此的最新文献/最佳实践指南?

感谢您的帮助或链接!

And*_*ell 8

长期以来,国家的变化并不是很昂贵.批次很贵.(并且状态变化需要新批次).批处理基本上是对Draw*Primitives函数的调用.

来自nVidia的这份PDF详细解释了它.它还提供了减少批量计数的想法.

批处理是基于CPU的限制(不是GPU).该PDF列出"<130 tris/batch"作为提交批次主导性能的点,并且GPU闲置等待更多批次(细节).它还表示,每1帧可获得批量,每1GHz CPU功率可达60 FPS.(尽管PDF有点旧,但这些数字有点过时了.)

在gamedev网站上对类似问题的回答应提供更多细节.这个也是.