shader 优化小随笔
2023 / 7 /12
·今天的直播集中在着色器的具体优化上,这里按记忆写出一些东西。
·首先我们需要认识到的是,shader 代码行数越少,执行速度越快。
例:
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;
}
这是编译层面的优化。当然,我们写 shader 也必须了解到步骤的问题。
并且也要记住,使用常量代替计算。否则代码长了之后,效率很低。
当然,方法是很多的。我们可以减少一些复杂运算指令比如开平方,正余弦等等;
它们需要在 Special Unit 上完成,然而这些复杂 OP 组成的每个 Warp 需要花费 8 个 cycle 才能执行完,会拖慢渲染管线。
说到 GPU 层面上了,我们还可以转移计算负载。例如原本由 Pixel Shader (现在的 GPU 一般都是在 SIMD 上) 执行的 Phong Shading 可以改为 Gouraud Shading,这是一种 Per-vertex 的方案,于是它的负载转移到了 VS 上。
这篇文章是一个小作品,纯属没事干瞎写。仅供参考。
·GAMES106 - 现代图形绘制流水线原理与实践

