[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