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) */ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs