sdBox

箱の SDF
code:glsl
float sdBox(vec3 p, vec3 b)
{
vec3 q = abs(p) - b;
return length(max(vec3(0.0), q)) + min(max(q.x,max(q.y,q.z)),0.0);
}

iq 神による解説
https://www.desmos.com/calculator/l3vslq2to1?lang=ja
2次元の場合3つの領域を考える
0 < p.x かつ 0 < p.y の時は頂点との距離
0 < p.x かつ p.y < 0 の時は x 軸の面との距離
0 < p.y かつ p.x < 0 の時は y 軸の面との距離
length(max(0, abs(p) - r)) で四角形のすべての頂点の3つの領域の距離の計算を一気にできる
内側にいるときに負の値を返すようにしたければ 0 と min を取った後に一番デカい軸の値を足す
min(max(q.x, q.y),0.0) みたいな具合に
3次元の時も次元が増えるだけですね