diff --git a/projects/fire_works/shaders/generation.comp b/projects/fire_works/shaders/generation.comp
index 4b7ba4f5020f7c219893ee330fa6fac2a1768ece..3b4d2b94cb451af4a9c03fb8a17c27a63678372c 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 87eaa36b135043034c329842f475841e949a2b3a..8886a788273cd5fa5c871749e0c9012f2722ed41 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
 	);
 }