0.00
60.0 fps

Digital rain2

0101001

Log in to post a comment.

#version 300 es
precision highp float;

uniform float iTime;
uniform vec2  iResolution;

uniform int rectNumber; // value=26, min=0, max=100, step=1
uniform float speed; // value=0.6, min=-10, max=10, step=0.1
uniform float seed; // value=871803, min=0, max=1000000, step=1
uniform int isBitFit;// value=0., min=0, max=1, step=1. (false, true)
uniform float ci_1; // value=2.02, min=0, max=10, step=0.01
uniform float ci_2; // value=0.8, min=0, max=10, step=0.01
uniform float ci_3; // value=0.85, min=0, max=1, step=0.01
uniform float ci_3_speed; // value=6.5, min=-20, max=20, step=0.1

out vec4 fragColor;

float random(in vec2 uv) {
    return fract(sin(dot(uv.xy, vec2(12.9898,78.233))) * 43758.5453);
}

float randomf(vec2 p, float s) {

    float id = floor(random(vec2((p.y-(iTime*s))))); //float id = bool(isPixelFit) ? floor(random(vec2((p.y-(iTime*s))))) : random(vec2((p.y-(iTime*s))));

	return tan(-p.y*ci_1 / cos(p.x*ci_1 - 5.) / random(vec2(seed)) - id)*0.5 + sin(-p.y*ci_2 / tan(p.x*ci_2 + 3.) / random(vec2(seed)) - id)*0.5 - sin(iTime*random(p)*ci_3_speed)*ci_3;
}

vec3 digitChar(bool isZero, vec2 UV) {

    int rectNumber = 7;

    vec2 ID = floor((UV*float(rectNumber)));
    
    float show;
    
    if (isZero) {
    
        show = ((ID.x == 2. && ID.y == 1.) || (ID.x == 3. && ID.y == 1.) || (ID.x == 4. && ID.y == 1.) || 
            (ID.x == 2. && ID.y == 2.) || (ID.x == 4. && ID.y == 2.) || 
            (ID.x == 2. && ID.y == 3.) || (ID.x == 4. && ID.y == 3.) || 
            (ID.x == 2. && ID.y == 4.) || (ID.x == 4. && ID.y == 4.) || 
            (ID.x == 2. && ID.y == 5.) || (ID.x == 3. && ID.y == 5.) || (ID.x == 4. && ID.y == 5.)) ? 1. : 0.;
    } else {

        show = ((ID.x == 3. && ID.y == 1.) ||
            (ID.x == 3. && ID.y == 2.) || 
            (ID.x == 3. && ID.y == 3.) || 
            (ID.x == 3. && ID.y == 4.) || 
            (ID.x == 3. && ID.y == 5.)) ? 1. : 0.;
    }
    
    return vec3(0., 1., 0.)*show;
}

void main() {
    
    vec2 UV = gl_FragCoord.xy/iResolution.xy;
    UV.x *= iResolution.x/iResolution.y;

    UV = (UV - 0.5)*2.;
    UV.x += (iResolution.x*0.5 - iResolution.x*(iResolution.x/iResolution.y)*0.5)/iResolution.x;
	UV.y += bool(isBitFit) ? floor(iTime*speed)/float(rectNumber)*2. : iTime*speed;

    vec2 ID = floor(UV*float(rectNumber)*0.5);
    float rcolor = randomf(ID, speed);

    vec3 color = vec3(0., 1., 0.)*vec3(rcolor)*digitChar(rcolor < 0.5, fract(UV*float(rectNumber)*0.5));

    fragColor = vec4(color,1.0);
}