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