#version 300 es precision highp float; uniform mediump sampler2D u_tex; // base pattern (REPEAT along u) uniform mediump sampler2D u_noise; // tileable noise (REPEAT along u) #include "_graphics_uniforms.glsl" in vec2 vTexCoord; in vec4 vColor; out vec4 fragColor; void main() { vec4 tex = texture(u_tex, vTexCoord); // flowing energy: the noise scrolls tail-ward over the base pattern (u grows toward the head, // so +time shifts features toward the tail). speed is a multiple of 1/600 so the 600 s time // wrap lands on a whole number of noise tiles — no pop float n = texture(u_noise, vec2(vTexCoord.x + (u_timeParams.x * 0.35), vTexCoord.y)).r; float flow = mix(0.4, 1.6, n); fragColor = vec4(tex.rgb * tex.a * vColor.rgb * flow, vColor.a); }