uniform sampler2D tFluid; uniform vec3 uColor; uniform vec3 uBackgroundColor; uniform float uDistort; uniform float uIntensity; uniform float uRainbow; uniform float uBlend; uniform float uShowBackground; void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) { vec3 fluidColor = texture2D(tFluid, uv).rgb; vec2 distortedUv = uv - fluidColor.rg * uDistort * 0.001; vec4 texture = texture2D(inputBuffer, distortedUv); float intensity = length(fluidColor) * uIntensity * 0.0001; vec3 selectedColor = uColor * length(fluidColor); vec4 colorForFluidEffect = vec4(uRainbow == 1.0 ? fluidColor : selectedColor, 1.0); vec4 computedBgColor = uShowBackground != 0.0 ? vec4(uBackgroundColor, 1.0) : vec4(0.0, 0.0, 0.0, 0.0); outputColor = mix(texture, colorForFluidEffect, intensity); vec4 computedFluidColor = mix(texture, colorForFluidEffect, uBlend * 0.01); vec4 finalColor; if(texture.a < 0.1) { finalColor = mix(computedBgColor, colorForFluidEffect, intensity); } else { finalColor = mix(computedFluidColor, computedBgColor, 1.0 - texture.a); } outputColor = finalColor; }