From 7d16db417b45266c6f8245465ccb40ffd7573bb5 Mon Sep 17 00:00:00 2001 From: Germano Cavalcante Date: Wed, 12 Aug 2020 17:57:26 -0300 Subject: Cleanup: move assignment out of loop --- source/blender/blenkernel/intern/collision.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) (limited to 'source') diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c index 1a55135ccfb..467f15201fc 100644 --- a/source/blender/blenkernel/intern/collision.c +++ b/source/blender/blenkernel/intern/collision.c @@ -684,16 +684,17 @@ static int cloth_collision_response_static(ClothModifierData *clmd, float w1, w2, w3, u1, u2, u3; float v1[3], v2[3], relativeVelocity[3]; float magrelVel; - float epsilon2 = BLI_bvhtree_get_epsilon(collmd->bvhtree); - const bool is_hair = (clmd->hairdata != NULL); + const float clamp_sq = square_f(clmd->coll_parms->self_clamp * dt); + const float time_multiplier = 1.0f / (clmd->sim_parms->dt * clmd->sim_parms->timescale); + const float epsilon2 = BLI_bvhtree_get_epsilon(collmd->bvhtree); + const float min_distance = (clmd->coll_parms->epsilon + epsilon2) * (8.0f / 9.0f); + const bool is_hair = (clmd->hairdata != NULL); for (int i = 0; i < collision_count; i++, collpair++) { - float i1[3], i2[3], i3[3], time_multiplier, d; + float i1[3], i2[3], i3[3]; zero_v3(i1); zero_v3(i2); zero_v3(i3); - time_multiplier = 1.0f / (clmd->sim_parms->dt * clmd->sim_parms->timescale); - d = clmd->coll_parms->epsilon * 8.0f / 9.0f + epsilon2 * 8.0f / 9.0f - collpair->distance; /* Only handle static collisions here. */ if (collpair->flag & (COLLISION_IN_FUTURE | COLLISION_INACTIVE)) { @@ -748,6 +749,7 @@ static int cloth_collision_response_static(ClothModifierData *clmd, /* Calculate the normal component of the relative velocity * (actually only the magnitude - the direction is stored in 'normal'). */ magrelVel = dot_v3v3(relativeVelocity, collpair->normal); + const float d = min_distance - collpair->distance; /* If magrelVel < 0 the edges are approaching each other. */ if (magrelVel > 0.0f) { @@ -827,8 +829,6 @@ static int cloth_collision_response_static(ClothModifierData *clmd, } if (result) { - float clamp_sq = clmd->coll_parms->clamp * dt; - clamp_sq *= clamp_sq; cloth_selfcollision_impulse_vert(clamp_sq, i1, &cloth->verts[collpair->ap1]); cloth_selfcollision_impulse_vert(clamp_sq, i2, &cloth->verts[collpair->ap2]); cloth_selfcollision_impulse_vert(clamp_sq, i3, &cloth->verts[collpair->ap3]); @@ -848,12 +848,13 @@ static int cloth_selfcollision_response_static(ClothModifierData *clmd, float w1, w2, w3, u1, u2, u3; float v1[3], v2[3], relativeVelocity[3]; float magrelVel; + const float clamp_sq = square_f(clmd->coll_parms->self_clamp * dt); + const float time_multiplier = 1.0f / (clmd->sim_parms->dt * clmd->sim_parms->timescale); + const float min_distance = (2.0f * clmd->coll_parms->selfepsilon) * (8.0f / 9.0f); for (int i = 0; i < collision_count; i++, collpair++) { float ia[3][3] = {{0.0f}}; float ib[3][3] = {{0.0f}}; - float time_multiplier = 1.0f / (clmd->sim_parms->dt * clmd->sim_parms->timescale); - float d = clmd->coll_parms->selfepsilon * 8.0f / 9.0f * 2.0f - collpair->distance; /* Only handle static collisions here. */ if (collpair->flag & (COLLISION_IN_FUTURE | COLLISION_INACTIVE)) { @@ -899,6 +900,7 @@ static int cloth_selfcollision_response_static(ClothModifierData *clmd, /* Calculate the normal component of the relative velocity * (actually only the magnitude - the direction is stored in 'normal'). */ magrelVel = dot_v3v3(relativeVelocity, collpair->normal); + const float d = min_distance - collpair->distance; /* TODO: Impulses should be weighed by mass as this is self col, * this has to be done after mass distribution is implemented. */ @@ -955,7 +957,6 @@ static int cloth_selfcollision_response_static(ClothModifierData *clmd, } repulse = max_ff(impulse, repulse); - impulse = repulse / 1.5f; VECADDMUL(ia[0], collpair->normal, w1 * impulse); @@ -986,9 +987,6 @@ static int cloth_selfcollision_response_static(ClothModifierData *clmd, } if (result) { - float clamp_sq = clmd->coll_parms->self_clamp * dt; - clamp_sq *= clamp_sq; - cloth_selfcollision_impulse_vert(clamp_sq, ia[0], &cloth->verts[collpair->ap1]); cloth_selfcollision_impulse_vert(clamp_sq, ia[1], &cloth->verts[collpair->ap2]); cloth_selfcollision_impulse_vert(clamp_sq, ia[2], &cloth->verts[collpair->ap3]); -- cgit v1.2.3