[UE] 材质编辑器中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节点用乘法代替。
————————————————
版权声明:本文为CSDN博主「KylerLiZi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_31788759/article/details/107248224

