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