fn sdSphere(p: vec3, r: f32) -> f32 { return length(p) - r; } fn sdBox(p: vec3, b: vec3) -> f32 { let q = abs(p) - b; return length(max(q, vec3(0.0))) + min(max(q.x, max(q.y, q.z)), 0.0); } fn sdTorus(p: vec3, t: vec2) -> f32 { let q = vec2(length(p.xz) - t.x, p.y); return length(q) - t.y; } fn sdPlane(p: vec3, n: vec3, h: f32) -> f32 { return dot(p, n) + h; }