precision highp float; const float pi = 3.14159265359; uniform float uTime; uniform vec2 uResolution; float rand(float seed) { return fract(sin(seed) * 10000.); } float noise(vec2 p) { return rand(p.x * 14. + p.y * sin(uTime / 1500000.) * .005); } float smoothNoise(vec2 p){ vec2 inter = smoothstep(0., 1., fract(p)); float s = mix(noise(vec2(floor(p.x), floor(p.y))), noise(vec2(ceil(p.x), floor(p.y))), inter.x); float n = mix(noise(vec2(floor(p.x), ceil(p.y))), noise(vec2(ceil(p.x), ceil(p.y))), inter.x); return mix(s, n, inter.y); } float fbm(in vec2 p) { float z = 2.; float rz = 0.; for (float i = 1.; i < 6.; i++) { rz += abs((smoothNoise(p) - .5) * 2.) / z; z *= 2.; p *= 2.; } return rz; } float circ(vec2 p){ float r = length(p); r = log(sqrt(r)); return abs(mod(4.*r, pi*2.) - pi) * 3. + .2; } void main() { vec2 p = gl_FragCoord.xy / uResolution.xy - 0.5; p.x *= uResolution.x / uResolution.y; float rz = fbm(p * 5.); rz *= circ(p / exp(mod(uTime / 500., pi))); gl_FragColor = vec4(vec3(.4, .3, .7) / rz, 1.); }