2012-05-29 28 views
0

舉例來說,如果我使一個平面上,我得到每second.With一個簡單的混合1500幀映射的幀速率下降到700(雙幀速率下降?!)。在微軟的DirectX SDK例如'視差映射閉塞「這個模型是一個很小的,不超過200個頂點圓,但是幀率下降到了400.對我來說,混亂是像Crysis這樣的遊戲結合了所有最新和最重的着色器效果(鑲嵌比視差映射更重要)是的,我可以在超級設置上展示50個FPS,比SDK示例少6倍,但是Crysis在屏幕上呈現數十萬個頂點+比SDK示例更多的效果。如何預測HLSL着色器如何影響性能?

回答

1

說得很簡單 - 優化的遊戲引擎推動儘可能多的數據,在做每幀儘可能少的工作越好。國際海事組織(IMO)認爲,樣本幀率的下降並不能反映出着色器/代碼在GPU/CPU上的工作性能如何,而且樣本也不是最優化的(它的意思是可讀性 - 不是超快速)你比較的引擎。

直接比較曲面細分和像素推送是錯誤的。現代遊戲引擎通常會產生大量的細節,你可以在GPU上看到這些細節,這對幀速率很有幫助。另外 - 當你在遊戲世界中時,你不知道這個「高度」鑲嵌的搖滾你能看到的是一個精心製作的幻影,或者它確實是由許多多邊形組成的。

如果你周圍的東西調整,我敢打賭,DX樣品可製成超快太。但它不再是可讀的 - 也不是手頭技術的純粹例證。

此外,請注意,添加任務不會線性增加所用時間。嘗試渲染兩個曲面。幀率下降多少?

+0

嗯你是什麼意思爲可讀,我指的例子是很短,簡單簡單,更重要的是可以優化... – none

+0

是否推在一個單一的繪製調用中的所有數據?它在每次渲染之前切換渲染狀態嗎?它是否在每次渲染之前優化着色器參數集?根據LOD獲取數據?它是否優化了在像素着色器中執行的計算?像這樣的東西加起來。 – Ani

+0

好吧,我知道這可能會問了很多,但你又能指出1米或2的地方,這個HLSL可以優化用一個例子它會更容易,我開始得到了它的竅門:? 這裏d它是: http://www.text-upload.com/read.php?id=381529&c=1374616 – none

1

在像這樣的簡單示例中查看幀速率並不是一個非常有意義的性能度量。 DirectX旨在爲類似遊戲的工作負載提供高效的工作負載,其中每幀大概以60 fps的速度渲染大量幾何圖形,而不是用於在100s或1000s fps渲染非常簡單的幾何圖形的綜合測試。您不能根據像這樣單獨測量幀速率來推斷渲染特定對象的相對性能非常有用的任何東西。軟件和硬件設計的最大吞吐量爲16.6毫秒幀,而不是最小延遲。

當DirectX的表現看,你必須記住,很多並行回事。在一個典型的遊戲中,當GPU渲染幀n-1時,CPU將發出幀n的繪圖命令。 GPU流水線可以針對來自一次繪製調用的三角形着色像素,同時對來自不同調用的三角形進行光柵化,並且處理來自另一次調用的頂點全部在同時工作的不同硬件單元上。查看渲染某些簡單的幀速率時,您並未有效地使用硬件。大部分硬件都會閒置很長一段時間。硬件的設計是爲了在一次處理大量事物時獲得最大的吞吐量,並且當您只給它一件或幾件事情時,其大部分功耗就會被浪費。

當你注意,現在的遊戲像孤島危機管理在高端GPU的每秒60幀渲染非常複雜的場景。如果你有一個特定的場景,你試圖渲染或效果,你試圖在其中一個GPU上創建,它將很可能足夠快,滿足您的需求,而無需做出任何優化工作。如果您真的達到性能成爲場景問題的地步,那麼可以使用PIX,nvPerfHUD等性能工具,您可以使用這些工具來追蹤和優化場景中的性能瓶頸。