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