欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【UE4 图形学】材质Shader中尽量避免使用if,能够提升性能的原因

程序员文章站 2022-06-11 09:13:10
...

原因

GPU的warp内部是按照SIMD(Single Instruction Multiple Data)单指令多数据流模式执行的,也就是说同时只能处理一条指令,当出现分支指令时,只能先执行True的指令,再执行False的指令,这样导致的指令串行执行现象叫做Branch Divergence,它会影响GPU并行化处理的执行效率,降低程序性能。

在Shader中使用if往往就会导致分支指令的出现,因而如果能通过其他手段,常用方式是使用其他的内置指令替代if,就能做到性能优化。

举个栗子:

if(a>b)
  x = a;
else
  x = b;

使用内置指令max替换

x = max(a,b);

if(m>n)
  x = a;
else
  x = b;

使用lerp+step替换

x = lerp(a,b,step(m,n));

注:材质中优化相关还有,divide节点用乘法代替。