游戏开发41课 unity shader 优化

 游戏开发41课 unity shader 优化_第1张图片

 

Shader有专门语言用来编写,常见类型有DirectX的HLSL,OpenGL的GLSL以及NVIDIA的Cg,为了优化shader代码,我们需要知道代码从被编写到被执行的流程,知道什么样的代码是不好的。

注意点:

  • 避免if、switch分支语,for循环语句,特别是循环次数可变的
  • if-else分支的最差情况可能是有1/n的利用率。
  • 尽量使用统一的控制流,不要使用分支。
  • 一些用于优化的指令,[branch],[flatten],[loop],[unroll]
  • branch,shader会根据判断语句只执行当前情况的代码
  • flatten,shader会执行全部情况的分支代码,然后再根据判断条件获得结果
  • unroll,for循环是展开的,直到循环条件终止
  • loop,for循环不展开
  • 减少纹理采样次数
  • 减少复杂数学函数调用
  • 少用复杂计算的函数,反三角函数
  • 使用合适数据精度
  • 用fixed替代float
  • Shader LOD:给不同性能的设备提供高中低配置的Shader版本

代码示例:

fixed4 frag(v2f i) : SV_Target

{

     fixed4 col = tex2D(_MainTex, i.uv);

     if (col.a > 0.5) {

         col.r = 1;

        }

     return col;

}

fixed4 frag(v2f i) : SV_Target

{

     fixed4 col = tex2D(_MainTex, i.uv);

     col.r = col.a > 0.5 ? col.r : 1;

      return col;

}

你可能感兴趣的:(游戏开发,unity,游戏引擎)