#define OCTAVES 5
float hash(vec2 p) {
return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);
}
float noise(vec2 p) {
vec2 i = floor(p);
vec2 f = fract(p);
vec2 s = f * f * (3.0 - 2.0 * f);
return mix(mix(hash(i), hash(i + vec2(1.0, 0.0)), s.x),
mix(hash(i + vec2(0.0, 1.0)), hash(i + vec2(1.0)), s.x), s.y);
}
float fbm(vec2 p) {
float sum = 0.0;
float amp = 0.5;
for (int i = 0; i < 8; i++) {
if (i >= OCTAVES) break;
sum += amp * noise(p);
p *= 2.0;
amp *= 0.500;
}
return sum;
}
void main() {
vec2 p = vUv * 4.0;
vec2 q = vec2(fbm(p), fbm(p + vec2(5.2, 1.3)));
float n = fbm(p + 1.500 * q + uTime * 0.05);
vec3 color = mix(vec3(0.06, 0.10, 0.14), vec3(0.48, 0.83, 0.69), n);
color = mix(color, vec3(0.96, 0.43, 0.30), smoothstep(0.55, 0.85, n));
gl_FragColor = vec4(color, 1.0);
}