float sdf_circle(in vec3 p, in float radius) { return length(p) - radius; } float sdf_plane(in vec3 p, in vec3 normal, in float offset) { return dot(p, normal) + offset; } float sdf_box(in vec3 p, in vec3 dimens, in float rounding) { vec3 q = abs(p) - dimens + rounding; return length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0) - rounding; } float sd_ellipsoid(vec3 p, vec3 r) { float k0 = length(p / r); float k1 = length(p / (r * r)); return k0 * (k0 - 1.0) / k1; }