NOTE: This page is not fully optimized for the mobile viewing experience

Chroma

Source

precision highp float;

uniform vec2 u_resolution;
uniform float u_time;

vec2 random2(vec2 st){
    st = vec2( dot(st,vec2(127.1,311.7)),
              dot(st,vec2(269.5,183.3)) );
    return -1.0 + 2.0*fract(sin(st)*43758.5453123);
}

float noise2(vec2 st) {
    vec2 i = floor(st);
    vec2 f = fract(st);

    vec2 u = f*f*(3.0-2.0*f);

    return mix( mix( dot( random2(i + vec2(0.0,0.0) ), f - vec2(0.0,0.0) ),
                     dot( random2(i + vec2(1.0,0.0) ), f - vec2(1.0,0.0) ), u.x),
                mix( dot( random2(i + vec2(0.0,1.0) ), f - vec2(0.0,1.0) ),
                     dot( random2(i + vec2(1.0,1.0) ), f - vec2(1.0,1.0) ), u.x), u.y);
}

vec3 palette( in float t )
{
    vec3 a = vec3(0.70, 0.60, 0.80);
    vec3 b = vec3(0.30, 0.20, 0.40);
    vec3 c = vec3(1.00, 1.00, 1.00);
    vec3 d = vec3(0.90, 0.10, 0.40);

    return a + b*cos( 6.283185*(c*t+d) );
}

mat2 rotate2d(float angle){
    return mat2(cos(angle),-sin(angle),
                sin(angle),cos(angle));
}

float lines(in vec2 pos, float b){
    float scale = 10.0;
    pos *= scale;
    return smoothstep(0.0,
                    .5+b*.5,
                    abs((sin(pos.x*3.1415)+b*2.0))*.5);
}

void main() {
    vec2 st =(2.0 * gl_FragCoord.xy - u_resolution.xy )/u_resolution.y;
    vec2 uv0 = st;
    // Scale the coordinate system to see
    // some noise in action
    vec2 pos = vec2(st*1.25);

    float pattern = pos.x;

    pos = rotate2d( noise2(pos) ) * pos; // rotate the space
    pattern = lines(pos,.25); // draw lines

    // Use the noise function
    float n = noise2(vec2(pos.x - u_time / 12. , pos.y));

    float b =   noise2(pos + u_time / 16.)*.5+.5;
    vec3 col = palette(b + n * 2. - u_time / 16.);

    // col += smoothstep(.15,.2,noise2(pos*1.5));
    // col -= smoothstep(.35,.4,noise(pos*1.5));
    float e = length(uv0) - 0.5;
    e = smoothstep(0.1, 0.7, e / 2.);
    e = 1.0 - e / 1.1;

    // col -= pattern;
    // col += col / 2.;
    col *= e;

    gl_FragColor = vec4(col, 1.0);
}