2011-07-20 58 views
4

我正在爲建模目的編寫基於場景圖形的圖形引擎。我在使用XNA 4. 在很多地方,我一直在閱讀,紋理變化(和其他狀態變化)應該在渲染過程中最小化(所以我必須通過材料等命令我的基元)。現代GPU上的紋理變化(以及其他狀態變化)成本

我在XNA 4中創建了一個小測試應用程序,它使用單個紋理渲染數百個斯坦福兔子模型,然後執行同樣的切換2種不同紋理。渲染時間沒有區別(但我使用了小~100x100的紋理)。

所以我的問題是:

  • 我應該真正關心的紋理/顏色/其他材料參數排序我的原語?或者在現代GPU上它不那麼重要?
  • 如果沒有,性能損失的預期百分比是多少?
  • 是否有任何其他狀態更改會影響性能?
  • 我在哪裏可以找到一些關於此的最新文獻/最佳實踐指南?

謝謝任何​​幫助或鏈接!

+0

如果您在這裏沒有得到任何答覆,可以嘗試在http://gamedev.stackexchange.com/上提問 –

回答

8

對於長的時間,狀態更改並不是真的很昂貴。 批次很貴。(並且狀態改變需要新批次)。一個批次基本上是對Draw*Primitives函數的調用。

This PDF from nVidia詳細解釋它。它也提供了減少批量計數的想法。

批次是基於CPU的限制(不是GPU)。該PDF列出「< 130三/批」作爲提交批次支配性能和GPU閒置等待更多批次(details)的點。它還表示,每幀可以獲得大約400批次,60 FPS,每個1GHz的CPU專用於提交批次。 (雖然PDF是有點老了,所以這些數字都有點過時了。)

answer on the gamedev site到類似的問題,應該提供一些更多的細節。 This one too

+0

謝謝您的回答,它幫助了很多,這正是我所需要的! – klapancius