#version 450 core
float sdf(vec3 p){
p.xyz = p.xzy;
vec3 z = p;
vec3 dz=vec3(0.0);
float power = 8.0;
float r, theta, phi;
float dr = 1.0;
float t0 = 1.0;
for(int i = 0; i < 5; ++i) {
r = length(z);
if(r > 2.0) continue;
theta = atan(z.y / z.x);
phi = asin(z.z / r);
dr = pow(r, power - 1.0) * dr * power + 1.0;
r = pow(r, power);
theta = theta * power;
phi = phi * power;
z = r * vec3(cos(theta)*cos(phi), sin(theta)*cos(phi), sin(phi)) + p;
t0 = min(t0, r);
}
return 0.5 * log(r) * r / dr - 0.003;
}
void main() {
}