diff --git a/projects/wobble_bobble/shaders/particle.inc b/projects/wobble_bobble/shaders/particle.inc index ae584f1a01e064856087111d44af2f4b8b341766..f5791e201d93b2be32d66a6522add6392727b3f9 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 d582986d94ee820071bf1d29b054b2e79fdaf363..14e01baca0c85fb0d4d9b492e886359f841c88fc 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 e1927eb8e9011357b075961199393ec74c8e9ba8..63f519a38d3cd1e783bbac2c19f4bf8e96301f3c 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; } } }