A bird made with code.
Raw gif (gif) – Video (mp4) – Video (ogv) – Preview (png)
Close
#version 300 es precision highp float; #define PI 3.14159265359 #define PI2 6.28318530718 in vec2 UV; uniform float time; out vec4 out_color; uniform float ratio; vec4 bird(vec2 p, float t, float div){ vec4 col = vec4(1.0); float f = 1.0; p.y += 0.5 * pow(abs(p.x), 1.2) * cos(-abs(p.x) * 3.0 + t * PI2); p.y *= 1.0 + 4.5 * abs(p.x); if(p.y < 0.1){ if(p.y > 0.05){ f *= 1.0 - 3.0 * abs(p.x); f *= 80.0; f = clamp(f, 0.0, 1.0); f *= abs(p.y - 0.1)/0.01 * div; f *= abs(p.y - 0.05)/0.03 * div; col.rgb = f * vec3(0.0) + (1.0 - f) * col.rgb; col.a = f; } else { col.a = 0.0; } } else { col.a = 0.0; } col.a = clamp(col.a, 0.0, 1.0); return col; } void main(void){ float x = UV.x * ratio - 0.5; float y = UV.y - 0.5; vec2 p = vec2(x, y); vec4 col = vec4(1.0); float front_bird_offset = 0.03 * cos(time * PI2 + 1.6); col.rg *= 0.7; col.r *= 1.0 - 1.5 * p.y; col.rgb += vec3(1.0, 0.3, 0.5) * clamp(1.0 - 100.0 * pow(length(p), 3.0), 0.0, 1.0); p.y += front_bird_offset; vec4 birdimg = bird(p, time, 1.0); p.y -= front_bird_offset; col = birdimg * birdimg.a + (1.0 - birdimg.a) * col; y += 0.1; p *= 2.0; p = 4.0 * (mod(p, vec2(0.2, 0.14)) - 0.1); birdimg = bird(p, time + x + cos(y * 1.0), 0.6); p.y += 0.3; p.x += 0.1 * cos(p.y * 2.0); birdimg += bird(p, time + x + cos(y * 1.0), 0.6); birdimg.a *= 1.0 - 4.0 * y - 4.0 * abs(x); birdimg.a = clamp(birdimg.a, 0.0, 1.0); col = birdimg * birdimg.a + (1.0 - birdimg.a) * col; col.a = 1.0; out_color = col; }
