【问题标题】:Texture change (and other state-change) costs on modern GPUs现代 GPU 上的纹理更改(和其他状态更改)成本
【发布时间】:2011-10-09 19:41:11
【问题描述】:

我正在为建模目的编写基于场景图的图形引擎。我正在使用 XNA 4。 在我读过的许多地方,纹理变化(和其他状态变化)应该在渲染过程中最小化(所以我必须按材质等对我的图元进行排序)。

我在 XNA 4 中创建了一个小型测试应用程序,它使用单个纹理渲染数百个 stanford bunny 模型,然后切换 2 个不同的纹理执行相同的操作。渲染时间没有区别(但是我使用了 ~100x100 的小纹理)。

所以我的问题是:

  • 我真的应该关心按纹理/颜色/其他材质参数对图元进行排序吗?还是它在现代 GPU 上不那么重要了?
  • 如果不这样做,预期的性能损失百分比是多少?
  • 是否有任何其他状态变化会影响性能?
  • 我在哪里可以找到有关这方面的最新文献/最佳实践指南?

感谢您提供任何帮助或链接!

【问题讨论】:

标签: 3d xna directx gpu direct3d


【解决方案1】:

很长时间里,状态变化的成本并不高。 批次很昂贵。(状态变化需要新批次)。批处理基本上是对Draw*Primitives 函数的调用。

This PDF from nVidia详细解释。它还提供了减少批次计数的想法。

批次是基于 CPU 的限制(不是 GPU)。该 PDF 将“details)。它还表示,每帧 60 FPS,每 1GHz 的 CPU 功率专用于提交批次,您可以获得大约 400 个批次。 (虽然 PDF 有点旧,所以这些数字有点过时了。)

我的answer on the gamedev site 对类似问题应提供更多详细信息。 This one too.

【讨论】:

  • 感谢您的回答,帮助很大,这正是我需要的!
猜你喜欢
  • 2013-06-12
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
相关资源
最近更新 更多