今回はHLSLでよく使用すると思われる(?)計算式をまとめてみることにしました。
一部以前紹介した式と同じものがありますが、まとめ編ということでご勘弁を苦笑。
・xを1.0以上の場合は0.0にループ丸めしたいとき
x = frac(x);
・x(>0)のa以下の範囲をb倍する
x *= b * step(a,x);
・x(>0)のa以下の範囲を滑らかにb倍する
x *= b * saturate(a-x)/a;
・x(>0)のa以上の範囲をb倍する
x *= b * step(x,a);
・x(>0)のa以上の範囲を滑らかにb倍する
x *= b * saturate(x-a)/(1-a);
・ブールbによる値切り替えb ? z=c : z=dをしたいとき
z = b*c + (1-b)*d;
・ブール演算(等価)a == b ? z=1 : z=0をしたいとき
z = step(a,b) * step(-a,-b);
・x(RGBA)をモノクロにする
x = dot(float4(0.299f,0.587f,0.114f,0.0f),x);
・xをaでスクリーン加算する
x = x + a - x * a;
・xをaでオーバーレイ合成する
float Switch = round(a);
x = x * a*2 * (1-Switch)
+ (1 - (1-x) * (1-a)*2 ) * Switch;