From 24765f10f93c680773b1ce7b94a04926662482c4 Mon Sep 17 00:00:00 2001
From: TheJackiMonster <thejackimonster@gmail.com>
Date: Tue, 26 Jul 2022 17:10:49 +0200
Subject: [PATCH] Normalized event colors and adjusted blending function

Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
---
 projects/fire_works/shaders/generation.comp | 2 +-
 projects/fire_works/shaders/smoke.inc       | 7 +++++--
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/projects/fire_works/shaders/generation.comp b/projects/fire_works/shaders/generation.comp
index 4b7ba4f5..3b4d2b94 100644
--- a/projects/fire_works/shaders/generation.comp
+++ b/projects/fire_works/shaders/generation.comp
@@ -122,7 +122,7 @@ void main() {
         direction = events[event_id].direction;
     }
 
-    vec3 color = events[event_id].color;
+    vec3 color = normalize(events[event_id].color);
     const float v = events[event_id].velocity;
 
     vec3 velocity = vec3(0.0f);
diff --git a/projects/fire_works/shaders/smoke.inc b/projects/fire_works/shaders/smoke.inc
index 87eaa36b..8886a788 100644
--- a/projects/fire_works/shaders/smoke.inc
+++ b/projects/fire_works/shaders/smoke.inc
@@ -19,9 +19,12 @@ float smokeDensity(float size) {
 }
 
 vec4 smokeBlend(vec4 dst, vec4 src) {
+	const float f = max(1.0f - dst.a, 0.0f);
+	const float a = clamp(0.0f, 1.0f, src.a);
+
 	return vec4(
-		dst.rgb + src.rgb * src.a * (1.0f - dst.a),
-		dst.a + src.a * (1.0f - dst.a)
+		dst.rgb + src.rgb * a * f,
+		dst.a + a * f
 	);
 }
 
-- 
GitLab