diff --git a/src/client/render/gl/shaders/day-night/fallout-light.frag.glsl b/src/client/render/gl/shaders/day-night/fallout-light.frag.glsl index 1744140bf..0c34d8999 100644 --- a/src/client/render/gl/shaders/day-night/fallout-light.frag.glsl +++ b/src/client/render/gl/shaders/day-night/fallout-light.frag.glsl @@ -45,6 +45,10 @@ void main() { float flick = max(0.0, sin(uTick * tileRate + h1 * 12.0) * 0.8 + 0.2); flick *= flick; flick *= mix(uParticleFreshScale, 1.0, 1.0 - heat); + // Fade embers out with the heat. The fallout bit is permanent on tiles + // that stay unowned, so without this the ember light flickers forever + // once the blast has cooled. + flick *= heat; light += uEmberLightColor * flick * uEmberLightIntensity; } diff --git a/src/client/render/gl/shaders/fallout-bloom/extract.frag.glsl b/src/client/render/gl/shaders/fallout-bloom/extract.frag.glsl index 26bafa472..c9bcf1f6d 100644 --- a/src/client/render/gl/shaders/fallout-bloom/extract.frag.glsl +++ b/src/client/render/gl/shaders/fallout-bloom/extract.frag.glsl @@ -102,6 +102,10 @@ void main() { flick *= flick; // Dampen when fresh (high heat); ramp to full as heat decays. flick *= mix(uParticleFreshScale, 1.0, 1.0 - heat); + // Fade dots out with the glow. Heat decays to 0, but the fallout bit is + // permanent on tiles that stay unowned, so without this the dots flicker + // forever once the bloom is gone. + flick *= opacity; vec3 pc = mix(uParticleColorDark, uParticleColorBright, h1) * flick * uParticleStrength; float pa = max(pc.r, max(pc.g, pc.b)); fragColor += vec4(pc, pa);