precision mediump float; uniform float u_time; uniform vec2 u_resolution; const vec2 zero = vec2(0.0); const vec4 darker = vec4(0.0235, 0.0274, 0.0549, 1.0); const vec4 lighter = vec4(0.1058, 0.1137, 0.1450, 1.0); vec3 mod289(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; } vec2 mod289(vec2 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; } vec3 permute(vec3 x) { return mod289(((x * 34.0) + 10.0) * x); } float snoise(vec2 v) { const vec4 C = vec4(0.211324865405187, 0.366025403784439, -0.577350269189626, 0.024390243902439); vec2 i = floor(v + dot(v, C.yy)); vec2 x0 = v - i + dot(i, C.xx); vec2 i1; i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0); vec4 x12 = x0.xyxy + C.xxzz; x12.xy -= i1; i = mod289(i); vec3 p = permute(permute(i.y + vec3(0.0, i1.y, 1.0)) + i.x + vec3(0.0, i1.x, 1.0)); vec3 m = max(0.5 - vec3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); m = m * m; m = m * m; vec3 x = 2.0 * fract(p * C.www) - 1.0; vec3 h = abs(x) - 0.5; vec3 ox = floor(x + 0.5); vec3 a0 = x - ox; m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); vec3 g; g.x = a0.x * x0.x + h.x * x0.y; g.yz = a0.yz * x12.xz + h.yz * x12.yw; return 130.0 * dot(m, g); } void main() { vec2 center = u_resolution / 2.0; // calculate coord scale factor float shortside = min(u_resolution.x, u_resolution.y); vec2 scale2square = u_resolution / vec2(shortside); // subtract center to avoid misalignment vec2 hereuncenter = gl_FragCoord.xy - center; vec2 herescaled = (hereuncenter / scale2square) + center; // get distance from center float dist = distance(herescaled, center); float distf = smoothstep(0.0, shortside, dist); // at lower clock values, we make vignette gradient denser // (at kinda slow rate for a breathing effect) float slowtime = u_time / 2.0; float timing = sin(slowtime) + 1.0; float vig = distf + mix(-0.05, 0.0, timing); // randomize noise pattern every second ish float fasttime = u_time * 1.1; float second = floor(fasttime); float noise = snoise(vec2(herescaled.x * herescaled.y, second)); // blend noise and gradient float final = (1.0 - vig) - noise * 0.9; gl_FragColor = mix(darker, lighter, final); }