0.00
60.0 fps

Plasma

Amiga Like effect

Log in to post a comment.

#version 300 es
precision highp float;

uniform float iTime;
uniform vec2  iResolution;
out vec4 fragColor;

// 2D pseudo‐noise function
float noise(vec2 p) {
    return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123);
}

// Smooth interpolation
float smoothNoise(vec2 p) {
    vec2 i = floor(p);
    vec2 f = fract(p);
    // Corners
    float a = noise(i + vec2(0.0,0.0));
    float b = noise(i + vec2(1.0,0.0));
    float c = noise(i + vec2(0.0,1.0));
    float d = noise(i + vec2(1.0,1.0));
    // Smoothstep
    vec2 u = f*f*(3.0-2.0*f);
    return mix(a, b, u.x) +
           (c - a)* u.y * (1.0 - u.x) +
           (d - b)* u.x *        u.y;
}

void main(){
    // Normalize coordinates from -1 to +1
    vec2 uv = (gl_FragCoord.xy / iResolution.xy)*2.0 - 1.0;
    uv.x *= iResolution.x / iResolution.y;

    // Tweak these for different looks
    float speed1 = 0.8;
    float speed2 = 1.3;
    float scale1 = 3.0;
    float scale2 = 4.5;

    // Two layers of moving noise/plasma
    float v1 = sin(dot(uv * scale1, vec2(1.0)) + iTime * speed1);
    float v2 = cos(length(uv * scale2) - iTime * speed2);

    // Combine and normalize
    float v = (v1 + v2) * 0.5;

    // Colour palette—classic “rainbow”
    vec3 colour = vec3(
        0.5 + 0.5 * sin(3.0 + 3.0*v + iTime*0.6),
        0.5 + 0.5 * sin(1.0 + 3.0*v + iTime*0.8),
        0.5 + 0.5 * sin(5.0 + 3.0*v + iTime*0.4)
    );

    fragColor = vec4(colour, 1.0);
}