float map(vec3 p) { p.xy += vec2(sin(p.z), cos(p.z)) * 0.25; vec3 q = fract(p) * 2.0 - 1.0; vec3 f = floor(p + 0.5); vec3 k = abs(normalize(q)); float a = -sdBox(q, k+0.1); float b = -sphere(q, 1.3); float d = max(-b, a); float tt = 0.5+0.5*sin(p.z); float tr = mix(0.125, 1.0, tt); float c = sdBoxXY(p - 0.5, tr); return max(-c, d); }
/** * Returns the signed distance estimate to a cube of the given size */ float sdCube(vec3 p, float size) { return sdBox(p, vec3(size)); }