shader_type canvas_item; // Use the captured screen texture from the BackBufferCopy uniform sampler2D screen_texture : hint_screen_texture, filter_linear_mipmap; uniform float threshold : hint_range(0.0, 2.0) = 0.5; uniform float smoothness : hint_range(0.0, 1.0) = 0.02; uniform vec4 fluid_color : source_color = vec4(0.2, 0.5, 1.0, 1.0); void fragment() { // 1. Grab the pixel from the 'screen' behind this ColorRect vec4 screen_color = texture(screen_texture, SCREEN_UV); // 2. Read the brightness (density) float density = screen_color.r; // 3. Apply the threshold/cutoff float alpha = smoothstep(threshold, threshold + smoothness, density); // 4. Output the fluid COLOR = vec4(fluid_color.rgb, alpha * fluid_color.a); }