#define AA 3

#define rot(a) mat2(cos(a),sin(a),-sin(a),cos(a))

vec4 fractal(vec2 U) {
    float m=1e3,t=iTime;
    U*=.13-sin(t*.2)*.1;
    U*=rot(sin(t*.1)*3.14);
    U+=vec2(sin(t),cos(t))*.005*sin(t*.2);
    vec4 p=vec4(cos(U.x),sin(U.x),cos(U.y),sin(U.y));
    for (int i=0;i<8;i++) {
    	p=abs(p+1.)-abs(p-1.)-p;
        p=p*1.5/min(1.,dot(p,p))-1.;
		m=min(m,fract( length(p*2.) -t*.1 ) );
    }
    return pow(m,1.7)*normalize(2.+abs(p.xyww))*2.;
}

void mainImage(out vec4 O,vec2 u)
{
    vec2 R=iResolution.xy,
         U=(u-R*.5)/R.y;
    U*=1.-dot(U,U)/4.;
    O=vec4(0);
	vec2 pix=1./R/float(AA)+max(0.,2.-iTime)*.005;
    for (int x=-AA;x<AA;x++) 
        for (int y=-AA;y<AA;y++)
		    O+=fractal(U+vec2(x,y)*pix);

	O/=float(AA*AA);
}
