From 9a981a0d192dfa0d9649603154abd158aa113091 Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Mon, 31 Jan 2022 03:21:03 +0100
Subject: [PATCH] Corrected weight to explode less

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 projects/wobble_bobble/shaders/particle.inc   | 26 +++++++++++++++----
 .../shaders/transform_particles_to_grid.comp  |  4 +--
 .../shaders/update_particle_velocities.comp   |  7 +++--
 3 files changed, 25 insertions(+), 12 deletions(-)

diff --git a/projects/wobble_bobble/shaders/particle.inc b/projects/wobble_bobble/shaders/particle.inc
index ae584f1a..f5791e20 100644
--- a/projects/wobble_bobble/shaders/particle.inc
+++ b/projects/wobble_bobble/shaders/particle.inc
@@ -41,14 +41,20 @@ float weight_C(float x) {
 	}
 }
 
-vec3 voxel_particle_weight(vec3 voxel, ParticleMinimal particle) {
+float voxel_particle_weight(vec3 voxel, ParticleMinimal particle) {
 	if (particle.size <= 0.0f) {
-		return vec3(0.0f);
+		return 0.0f;
 	}
 	
 	vec3 delta = abs(particle.position - voxel) / particle.size;
 	
-	return vec3(weight_C(delta.x), weight_C(delta.y), weight_C(delta.z));
+	vec3 weight = vec3(
+		weight_C(delta.x),
+		weight_C(delta.y),
+		weight_C(delta.z)
+	);
+	
+	return weight.x * weight.y * weight.z;
 }
 
 float grad_weight_A(float x) {
@@ -88,12 +94,22 @@ vec3 voxel_particle_grad_weight(vec3 voxel, ParticleMinimal particle) {
 	vec3 sign = sign(sign_delta);
 	
 	vec3 weight = vec3(
+		weight_C(delta.x),
+		weight_C(delta.y),
+		weight_C(delta.z)
+	);
+	
+	vec3 grad_weight = vec3(
 		grad_weight_C(delta.x),
 		grad_weight_C(delta.y),
 		grad_weight_C(delta.z)
-	);
+	) * sign;
 	
-	return weight * sign;
+	return vec3(
+			grad_weight.x * weight.y * weight.z,
+			grad_weight.y * weight.z * weight.x,
+			grad_weight.z * weight.x * weight.y
+	);
 }
 
 #endif // PARTICLE_INC
\ No newline at end of file
diff --git a/projects/wobble_bobble/shaders/transform_particles_to_grid.comp b/projects/wobble_bobble/shaders/transform_particles_to_grid.comp
index d582986d..14e01bac 100644
--- a/projects/wobble_bobble/shaders/transform_particles_to_grid.comp
+++ b/projects/wobble_bobble/shaders/transform_particles_to_grid.comp
@@ -39,11 +39,9 @@ void main()	{
         memoryBarrierShared();
 
         for (uint i = 0; i < SHARED_PARTICLES_BATCH_SIZE; i++) {
-            vec3 weight = voxel_particle_weight(position, shared_particles[i]);
-
             gridValue += (
                 vec4(shared_particles[i].velocity, shared_particles[i].mass) *
-                weight.x * weight.y * weight.z
+                voxel_particle_weight(position, shared_particles[i])
             );
         }
     }
diff --git a/projects/wobble_bobble/shaders/update_particle_velocities.comp b/projects/wobble_bobble/shaders/update_particle_velocities.comp
index e1927eb8..63f519a3 100644
--- a/projects/wobble_bobble/shaders/update_particle_velocities.comp
+++ b/projects/wobble_bobble/shaders/update_particle_velocities.comp
@@ -39,11 +39,10 @@ void main()	{
                         vec4 gridSample = texture(sampler3D(gridImage, gridSampler), voxel);
                         vec4 gridOldSample = texture(sampler3D(gridOldImage, gridSampler), voxel);
 
-                        vec3 weight = voxel_particle_weight(voxel, minimal);
-                        float w = (weight.x * weight.y * weight.z);
+                        float weight = voxel_particle_weight(voxel, minimal);
 
-                        velocity_pic += gridSample.xyz * w;
-                        velocity_flip += (gridSample.xyz - gridOldSample.xyz) * w;
+                        velocity_pic += gridSample.xyz * weight;
+                        velocity_flip += (gridSample.xyz - gridOldSample.xyz) * weight;
                     }
                 }
             }
-- 
GitLab