6.)*D,
          t=-a-sqrt(a*a-b);
    o+=t*d;
    return surfColor(vec2(o.x,atan(o.y,o.z)))*(1.+.01*t);
}

void main()
{
    gBeat=fract(time*3.2/3.);
    // Screen setup
    vec2 p=(2.*gl_FragCoord.xy-resolution)/resolution.y,
         q=2.*gl_FragCoord.xy/resolution-1.;

    // Camera setup
    vec3 cp=vec3(-time*20.+1.,1.6*sin(time*1.2),2.+2.*cos(time*.3)),
         ct=cp+vec3(1.,.3*cos(time),-.2),
         cd=normalize(ct-cp),
         cr=normalize(cross(cd,vec3(.5*cos(.3*time),0.,1.))),
         cu=cr