From b2d42b38fcc46b83278b7c99b1b6e64001605eed Mon Sep 17 00:00:00 2001 From: TheJackiMonster <thejackimonster@gmail.com> Date: Thu, 21 Jul 2022 14:04:44 +0200 Subject: [PATCH] Fixed smoke artifacts by clamping values Signed-off-by: TheJackiMonster <thejackimonster@gmail.com> --- projects/fire_works/shaders/add.comp | 11 ++++++++--- projects/fire_works/shaders/particle.frag | 2 +- projects/fire_works/shaders/smoke.frag | 6 +++++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/projects/fire_works/shaders/add.comp b/projects/fire_works/shaders/add.comp index 70a15c4e..1846085e 100644 --- a/projects/fire_works/shaders/add.comp +++ b/projects/fire_works/shaders/add.comp @@ -20,9 +20,9 @@ void main() { // Reverse alpha values: // -> Because clear value is always vec4(0, 0, 0, 1) which is now vec4(0, 0, 0, 0)! - outParticles.a = 1.0f - outParticles.a; - outSmoke.a = 1.0f - outSmoke.a; - outTrails.a = 1.0f - outTrails.a; + outParticles.a = 1.0f - clamp(outParticles.a, 0, 1); + outSmoke.a = 1.0f - clamp(outSmoke.a, 0, 1); + outTrails.a = 1.0f - clamp(outTrails.a, 0, 1); // TODO: add noise to the smoke here! @@ -34,5 +34,10 @@ void main() { outParticles.a + outSmoke.a + outTrails.a ); + result.r = clamp(result.r, 0, 1); + result.g = clamp(result.g, 0, 1); + result.b = clamp(result.b, 0, 1); + result.a = clamp(result.a, 0, 1); + imageStore(outImage, uv, result); } \ No newline at end of file diff --git a/projects/fire_works/shaders/particle.frag b/projects/fire_works/shaders/particle.frag index e1fa6de0..97221ef2 100644 --- a/projects/fire_works/shaders/particle.frag +++ b/projects/fire_works/shaders/particle.frag @@ -14,7 +14,7 @@ void main() { const float value = length(passPos); if (value < 0.5f) { - outColor = vec4(passColor, value * 2.0f); // Use inverse alpha value + outColor = vec4(passColor, max(value * 2.0f, 0.0f)); // Use inverse alpha value } else { discard; } diff --git a/projects/fire_works/shaders/smoke.frag b/projects/fire_works/shaders/smoke.frag index 30fb3667..ad4ae33d 100644 --- a/projects/fire_works/shaders/smoke.frag +++ b/projects/fire_works/shaders/smoke.frag @@ -53,8 +53,12 @@ void main() { ); } + result.r = clamp(result.r, 0, 1); + result.g = clamp(result.g, 0, 1); + result.b = clamp(result.b, 0, 1); + // Inverse alpha value - result.a = 1.0f - result.a; + result.a = 1.0f - clamp(result.a, 0, 1);; if (result.a < 1.0f) { outColor = result; -- GitLab