#define rot(a) mat2(cos(a + vec4(0, 11, 33, 0)))
#define cor    (cos(i * .314 + vec4(0, 23, 21, 0)) + 1. ) / 160.
#define t      iTime
#define PI     3.1415
#define cyl    max(length(q.xy) - .1, abs(q.z) - 1.1)
#define chanfro(a) abs(dot(cos(a * 6.28/3. + vec2(0, 11)), q.xy)) - .092
#define tambor                                                 \
        q.xy *= rot(j * 6.28/6.);                              \
        q.y += e;                                              \
        d = max(                                               \
                max(                                           \
                    max(cyl,  chanfro(0.)),                    \
                    chanfro(1.)                                \
                ),                                             \
                chanfro(2.)                                    \
            );

float map(vec3 p) {
    p *= 1. - cos(t * .47) * dot(p, p) * .08;
    p.xz *= rot(cos(t * .1) * 2.1);
    p.xy *= rot(cos(t * .7) * .8);

    vec3 q;
    float s = 1., j, d, T = .314, i = .0, e = .57;

    while(j++ < 6.){
        q = p.zxy;
        tambor;
        s = min(s, d);
    }

    while(i++ < 3.){
        j = 0.;
        while(j++ < 6.){
            q = p;
            q.xz *= rot(.6 + i * 6.28 / 3.);
            q.x -=  .43 * sin(5.68);
            q.yz *= rot(T);

            tambor;
            d = abs(d);
            s = min(s, d);
        }
    }
    return s;
}


void mainImage(out vec4 o, vec2 u) {
    float d = 1., s, i;

    vec2 R = iResolution.xy, m;
         u = .5 * (u.xy - R * .5) / R.y;

    vec3 rd = normalize(vec3(u, .5)), p;
    o *= 0.;

    while(i++ < 34.) {
        s = map(p);
        d += max(s, 2e-3);
        p = d * rd;
        p.z += -2.5;
        s < .003
            ? o += .003 / d * i
                + cor
            : o;
    }
}
