shader 優(yōu)化小隨筆
2023 / 7 /12
·今天的直播集中在著色器的具體優(yōu)化上,這里按記憶寫出一些東西。
·首先我們需要認識到的是,shader 代碼行數(shù)越少,執(zhí)行速度越快。
例:
int func(int argc,char**argv){
? ? ?int x = 1;
? ? ?int y?= x;
? ? ?return y;
}
省去不必要的常量步驟,于是改寫成:
int func(int argc,char**argv){
? ? ?int x = 1;
? ? ?return x;
}
這是編譯層面的優(yōu)化。當然,我們寫 shader 也必須了解到步驟的問題。
并且也要記住,使用常量代替計算。否則代碼長了之后,效率很低。
當然,方法是很多的。我們可以減少一些復雜運算指令比如開平方,正余弦等等;
它們需要在 Special Unit 上完成,然而這些復雜 OP 組成的每個 Warp 需要花費 8 個 cycle 才能執(zhí)行完,會拖慢渲染管線。
說到 GPU 層面上了,我們還可以轉移計算負載。例如原本由 Pixel Shader (現(xiàn)在的 GPU 一般都是在 SIMD 上) 執(zhí)行的 Phong Shading 可以改為 Gouraud Shading,這是一種 Per-vertex 的方案,于是它的負載轉移到了 VS 上。
這篇文章是一個小作品,純屬沒事干瞎寫。僅供參考。
·GAMES106 - 現(xiàn)代圖形繪制流水線原理與實踐
標簽: