u/nycgio

▲ 27 r/shaders+1 crossposts

Fractal Tunnel Shader Tutorial

Here is a tutorial on a Fractal Tunnel Shader Tutorial

#float speed 0.5 0.1 2.0
#float zoom  2.0 0.5 5.0
#float twist 3.0 0.0 10.0
#color color1 #ff3366
#color color2 #3366ff
#color color3 #33ff66

void main() {
    vec2 uv = v_uv * 2.0 - 1.0;
    uv.x *= u_resolution.x / u_resolution.y;

    float t = u_time * speed;
    float r = length(uv);
    float a = atan(uv.y, uv.x);

    float tunnel = 1.0 / (r + 0.1);
    float angle  = a + tunnel * twist + t;

    float pattern = 0.0;
    for (int i = 0; i < 4; i++) {
        float fi = float(i);
        float scale = zoom * (1.0 + fi * 0.5);
        float wave  = sin(tunnel * scale - t * (1.0 + fi * 0.2));
        wave       += sin(angle * (3.0 + fi) + t);
        pattern    += wave / (2.0 + fi);
    }
    pattern = pattern * 0.5 + 0.5;

    vec3 color = mix(color1, color2, sin(pattern * PI) * 0.5 + 0.5);
    color = mix(color, color3, sin(pattern * 6.28318 + t) * 0.5 + 0.5);
    color *= 1.0 - r * 0.5;

    fragColor = vec4(color, u_opacity);
}
u/nycgio — 2 days ago