// Liquid trails: the previous output is dragged along the motion, swirled a little, // and slowly fades back to the live camera. uniform float persistence; // 0.0 .. 0.99 = 0.92 uniform float drag; // 0.0 .. 6.0 = 2.5 uniform float swirl; // 0.0 .. 0.01 = 0.002 void main() { vec2 centred = uv - 0.5; vec2 from = uv - texture(flow, uv).xy * drag + vec2(-centred.y, centred.x) * swirl; vec3 trail = texture(prev, from).rgb; vec3 live = texture(camera, uv).rgb; color = vec4(mix(live, trail, persistence), 1.0); }