優化 HLSL 著色器
本節說明可用來優化著色器的一般用途策略。 您可以將這些策略套用至在任何平臺上以任何語言撰寫的著色器。
瞭解執行著色器計算的位置
頂點著色器會執行包含擷取頂點和執行頂點資料矩陣轉換的作業。 一般而言,每個頂點會執行一次頂點著色器。
圖元著色器會執行包含擷取紋理資料和執行光源計算的作業。 一般而言,圖元著色器會針對指定的幾何片段執行每個圖元一次。
一般而言,場景中的圖元超出頂點數,因此圖元著色器的執行頻率高於頂點著色器。
當您設計著色器演算法時,請記住下列事項:
- 可能的話,請在頂點著色器上執行計算。 在圖元著色器上執行的計算比在頂點著色器上執行的計算成本更高。
- 請考慮使用每個頂點計算來改善密集網格等情況的效能。 針對密集的網格,每個頂點計算可能會產生結果,這些結果會以視覺化方式從以個別圖元計算產生的結果中區分。
略過不必要的指示
在 HLSL 中,動態分支可讓您限制執行的指令數目。 因此,動態分支有助於加速著色器執行時間。 如果未顯示幾何或圖元,請使用動態分支結束著色器或限制指示。 例如,如果圖元未亮起,則執行光源演算法時沒有點。
下表列出一些案例,您可以在著色器中測試條件,並使用動態分支略過不必要的指示。 資料表不完整。 而是要提供您優化程式碼的想法。
要檢查的條件 | 著色器中的回應 |
---|---|
Alpha 檢查會判斷不會看到圖元。 | 略過著色器的其餘部分。 |
圖元或幾何完全模糊。 | 略過著色器的其餘部分。 |
面板權數為零。 | 略過骨。 |
光線衰減為零。 | 略過光源。 |
非正向 Lambertian 詞彙。 | 略過光源。 |
封裝變數和插補項
請留意著色器資料所需的空間。 盡可能將大部分資訊封裝到變數或插補項中。 有時候,來自兩個變數的資訊可以封裝到單一變數的記憶體空間中。
減少著色器複雜度
讓您的著色器保持較小且簡單。 一般而言,具有較少指令的著色器會比著色器更快速地執行更多指示。 偵錯和優化較小型、較不復雜的著色器也比較容易。
[相關主題]
相關主題