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

原因

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节点用乘法代替。

你可能感兴趣的:(UE4,图形学,图形学,shader,if,性能优化)