欢迎光临散文网 会员登陆 & 注册

[UE] 材质编辑器中if的替代

2023-06-28 14:18 作者:Zency丨  | 我要投稿

原因

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


[UE] 材质编辑器中if的替代的评论 (共 条)

分享到微博请遵守国家法律