[UE] 材質(zhì)編輯器中if的替代
原因
GPU的warp內(nèi)部是按照SIMD(Single Instruction Multiple Data)單指令多數(shù)據(jù)流模式執(zhí)行的,也就是說同時只能處理一條指令,當(dāng)出現(xiàn)分支指令時,只能先執(zhí)行True的指令,再執(zhí)行False的指令,這樣導(dǎo)致的指令串行執(zhí)行現(xiàn)象叫做Branch Divergence,它會影響GPU并行化處理的執(zhí)行效率,降低程序性能。
在Shader中使用if往往就會導(dǎo)致分支指令的出現(xiàn),因而如果能通過其他手段,常用方式是使用其他的內(nèi)置指令替代if,就能做到性能優(yōu)化。
舉個栗子:
①
if(a>b)
? x = a;
else
? x = b;
使用內(nèi)置指令max替換
x = max(a,b);
②
if(m>n)
? x = a;
else
? x = b;
使用lerp+step替換
x = lerp(a,b,step(m,n));
注:材質(zhì)中優(yōu)化相關(guān)還有,divide節(jié)點(diǎn)用乘法代替。
————————————————
版權(quán)聲明:本文為CSDN博主「KylerLiZi」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_31788759/article/details/107248224
標(biāo)簽: