Smooth Minimum
#Signed_Distance_Field #レイマーチング #GLSL #シェーダー #数学
スムースなmin関数
レイマーチングにおいて、複数のSigned Distance Fieldをつなげるときに有効
Metaball的な表現をしたいときに頻用する
指数関数・平方根・多項式など、様々な手法で実現が可能だが、
Cubic polynomial (3次多項式) を用いたものが3回微分まで連続になって良い具合になる
https://iquilezles.org/articles/smin/
Desmos
https://gyazo.com/85b6aff3d467cfbf446b0526c175ca15
https://www.desmos.com/calculator/97zy4keknj
GLSL
code:glsl
float smin(float a, float b, float k) {
float h = max(k - abs(a - b), 0.0) / k;
return min(a, b) - h * h * h * k / 6.0;
}
Memo
https://gyazo.com/b21bde77f7b2cd7131c459b0f0d7b990