0
点赞
收藏
分享

微信扫一扫

游戏开发41课 unity shader 优化


 

 

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;​​
​​}​​

举报

相关推荐

0 条评论