ShaderLab 関数
lerp
lerp(x, y, s) 線形補間 x + s(y - x)
step
2つの値を比較して, どちらの値が大きいかに基づいて 0 または 1 を返します.
step(y, x) y <= x なら1, y > x なら0
smoothstep
2つの値を比較して, どちらの値が大きいかに基づいて 0 または 1 を返します. 数値の変化がゆるやかです
smoothstep(min, max, x) x < min なら 0、x > max なら 1、それ以外の場合で、x が min, max の範囲内であれば 0 と 1 の間の値を返します。
ifの書き換え
GPUアーキテクチャの特性上, if文の多用はパフォーマンスを落とす要因となり得ます.
lerp関数とstep関数を用いて if文は以下のように書き換えることができます.
code:shaderLab
if (u < 0.5)
{
color = fixed4(1.0, 1.0, 1.0, 1.0);
}
else
{
color = fixed4(0.0, 0.0, 0.0, 0.0);
}
↓↓↓
code:shaderLab
color = lerp(fixed4(1.0, 1.0, 1.0, 1.0), fixed4(0.0, 0.0, 0.0, 0.0), step(0.5, u));
clamp
指定された値を指定された最大値と最小値の範囲に留めます
clamp(x, a, b) xをa ~ bにクランプ
code:shaderLab
float clamp(float x, float a, float b)
{
return (x < a ? a: (x > b ? b : x));
}
abs
絶対値を返す