#define R(p,a,r)mix(a*dot(p,a),p,cos(r))+sin(r)*cross(p,a)
#define H(h)(cos((h)*6.3+vec3(0,23,21))*.5+.5)

void mainImage(out vec4 O, vec2 C)
{
    O=vec4(0);
    vec3 p,r=iResolution,
    d=normalize(vec3((C-.5*r.xy)/r.y,1));
    float i=0.,g=0.,e,s,h,a;
    for(;++i<99.;)
    {
        p=g*d;
        p.z+=iTime*0.1;
        p=sin(p);
        p=R(p,vec3(.577),iTime*.5);
        p=abs(p)-.2;//-.2 is nice, 
        p=p.x<p.y?p.yzx:p.zyx;
        p=p.x<p.y?p.zxy:p.zyx;
        s=2.;
        for(int i=0;i++<8;){
          s*=e=2./clamp(dot(p,p),.3,1.2);
          p=abs(p)*e-vec3(.8,8,.8);
        }
        a=1.;
        p-=clamp(p,-a,a);
        g+=e=length(p)/s;
        O.rgb+=(H(s*.01)+.5)*.01*exp(-.2*i*i*e);
    }
    O=pow(O,vec4(4));
 }
