[Bf-blender-cvs] [dc6fd8a] cloth-improvements: Make structural springs act in both extension and compression

Luca Rood noreply at git.blender.org
Mon Dec 5 18:51:06 CET 2016


Commit: dc6fd8a257f96ea97acfe07c38e555f1bfaf86ad
Author: Luca Rood
Date:   Wed Nov 30 16:02:15 2016 -0200
Branches: cloth-improvements
https://developer.blender.org/rBdc6fd8a257f96ea97acfe07c38e555f1bfaf86ad

Make structural springs act in both extension and compression

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

M	source/blender/physics/intern/implicit_blender.c

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

diff --git a/source/blender/physics/intern/implicit_blender.c b/source/blender/physics/intern/implicit_blender.c
index 2ad8ee0..215ee6b 100644
--- a/source/blender/physics/intern/implicit_blender.c
+++ b/source/blender/physics/intern/implicit_blender.c
@@ -1583,44 +1583,30 @@ bool BPH_mass_spring_force_spring_linear(Implicit_Data *data, int i, int j, floa
                                          float r_f[3], float r_dfdx[3][3], float r_dfdv[3][3])
 {
 	float extent[3], length, dir[3], vel[3];
-	
+
 	// calculate elonglation
 	spring_length(data, i, j, extent, dir, &length, vel);
 
-	/* This code computes not only the force, but also its derivative.
-	   Zero derivative effectively disables the spring for the implicit solver.
-	   Thus length > restlen makes cloth unconstrained at the start of simulation. */
-	if ((length >= restlen && length > 0) || no_compress) {
-		float stretch_force, f[3], dfdx[3][3], dfdv[3][3];
-		
-		stretch_force = stiffness * (length - restlen);
-		if (clamp_force > 0.0f && stretch_force > clamp_force) {
-			stretch_force = clamp_force;
-		}
-		mul_v3_v3fl(f, dir, stretch_force);
-		
-		// Ascher & Boxman, p.21: Damping only during elonglation
-		// something wrong with it...
-		madd_v3_v3fl(f, dir, damping * dot_v3v3(vel, dir));
-		
-		dfdx_spring(dfdx, dir, length, restlen, stiffness);
-		dfdv_damp(dfdv, dir, damping);
-		
-		apply_spring(data, i, j, f, dfdx, dfdv);
-		
-		if (r_f) copy_v3_v3(r_f, f);
-		if (r_dfdx) copy_m3_m3(r_dfdx, dfdx);
-		if (r_dfdv) copy_m3_m3(r_dfdv, dfdv);
-		
-		return true;
-	}
-	else {
-		if (r_f) zero_v3(r_f);
-		if (r_dfdx) zero_m3(r_dfdx);
-		if (r_dfdv) zero_m3(r_dfdv);
-		
-		return false;
+	float stretch_force, f[3], dfdx[3][3], dfdv[3][3];
+
+	stretch_force = stiffness * (length - restlen);
+	if (clamp_force > 0.0f && stretch_force > clamp_force) {
+		stretch_force = clamp_force;
 	}
+	mul_v3_v3fl(f, dir, stretch_force);
+
+	madd_v3_v3fl(f, dir, damping * dot_v3v3(vel, dir));
+
+	dfdx_spring(dfdx, dir, length, restlen, stiffness);
+	dfdv_damp(dfdv, dir, damping);
+
+	apply_spring(data, i, j, f, dfdx, dfdv);
+
+	if (r_f) copy_v3_v3(r_f, f);
+	if (r_dfdx) copy_m3_m3(r_dfdx, dfdx);
+	if (r_dfdv) copy_m3_m3(r_dfdv, dfdv);
+
+	return true;
 }
 
 /* See "Stable but Responsive Cloth" (Choi, Ko 2005) */




More information about the Bf-blender-cvs mailing list