UPL9-8——着色器优化

前置知识:US——Unity Shader开发入门

着色器优化的必要性

在开发时,为了快捷的实现对应的渲染效果,一些 Shader 制作者(程序、美术、技美等)会使用 Shader 可视化编辑器生成 Shader
比如 Shader Graph、ASE(Amplify Shader Editor) 等,通过这些可视化编辑器生成的 Shader 的性能表现往往不是最优异的

主要原因:

  1. Shader Graph、ASE 等工具为了适配各种情况,会生成比较通用的着色器代码,里面可能包含一些 冗余计算 或 不必要的分支
  2. 节点式编辑为了可读性,往往拆分为很多中间步骤,编译后可能比手写 Shader 冗长
  3. 手写 Shader 可以在指令级别做微调,比如合并数学运算、避免精度浪费,而可视化工具的优化程度受限

因此学习着色器优化的必要性就体现了出来,不管是对这些可视化编辑器生成的 Shader,还是我们自己通过代码编写的 Shader
养成良好的优化习惯都是对项目有益处的,可以避免我们在Shader上浪费性能

总结下 必要的原因:

  1. Shader 其实是 GPU 的核心工作单元

    在移动设备或复杂场景中,Shader 性能的好坏直接决定了帧率

  2. 即便是简单 Shader 效果,如果没有优化,可能会在像素填充、分支判断、纹理采样等环节造成额外开销,积少成多可能成为性能瓶颈

  3. 无论是用可视化编辑器生成,还是自己写,优化 Shader 都是开发者必备习惯,能够提升整个项目的可持续性

通过以上内容,足以说明 着色器优化的必要性

着色器优化的主要优化方向

想要优化着色器,我们主要会通过以下几个方向去进行

  1. 降低计算量
  2. 减少采样开销
  3. 降低填充率压力
  4. 善用 GPU 并行特性

等等