[Bf-blender-cvs] [7d99e1418b] cloth-improvements: Remove epsilon from velocity conditional.

Luca Rood noreply at git.blender.org
Tue Jan 24 03:28:21 CET 2017


Commit: 7d99e1418bff8f9feb7ae8a356b8814b9f16e718
Author: Luca Rood
Date:   Mon Jan 23 17:25:05 2017 -0200
Branches: cloth-improvements
https://developer.blender.org/rB7d99e1418bff8f9feb7ae8a356b8814b9f16e718

Remove epsilon from velocity conditional.

Also added a comment about the wrong duplicate impulse elimination being
used.

===================================================================

M	source/blender/blenkernel/intern/collision.c

===================================================================

diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c
index 19a69fb5c2..c9259451e8 100644
--- a/source/blender/blenkernel/intern/collision.c
+++ b/source/blender/blenkernel/intern/collision.c
@@ -290,7 +290,7 @@ static int cloth_collision_response_static (ClothModifierData *clmd, CollisionMo
 		 * TODO */
 
 		/* If v_n_mag < 0 the edges are approaching each other. */
-		if ( magrelVel > ALMOST_ZERO ) {
+		if ( magrelVel > 0.0f ) {
 			/* Calculate Impulse magnitude to stop all motion in normal direction. */
 			float magtangent = 0, repulse = 0, d = 0;
 			double impulse = 0.0;
@@ -442,6 +442,10 @@ static int cloth_collision_response_static (ClothModifierData *clmd, CollisionMo
 		if (result) {
 			int i = 0;
 
+			/* This is a terrible approach to eliminating duplicate collision impulses, and fails as soon as impulses are not
+			 * axis aligned, or have opposite directions. Instead of this, the impulses should be clustered by direction,
+			 * and the dominant impulse magnitude from each cluster should contribute to the total impulse, in the direction
+			 * if the weighted average of the cluster's directions by their magnitudes. */
 			for (i = 0; i < 3; i++) {
 				if (cloth1->verts[collpair->ap1].impulse_count > 0 && ABS(cloth1->verts[collpair->ap1].impulse[i]) < ABS(i1[i]))
 					cloth1->verts[collpair->ap1].impulse[i] = i1[i];
@@ -508,7 +512,7 @@ static int cloth_selfcollision_response_static (ClothModifierData *clmd, CollPai
 		 * this has to be done after voronoi mass distribution is implemented */
 
 		/* If v_n_mag < 0 the edges are approaching each other. */
-		if ( magrelVel > ALMOST_ZERO ) {
+		if ( magrelVel > 0.0f ) {
 			/* Calculate Impulse magnitude to stop all motion in normal direction. */
 			float magtangent = 0, repulse = 0, d = 0;
 			double impulse = 0.0;




More information about the Bf-blender-cvs mailing list