Spline IK: fix a scaling hiccup as bones roll off the end of the curve.
authorAlexander Gavrilov <angavrilov@gmail.com>
Wed, 8 May 2019 14:16:27 +0000 (17:16 +0300)
committerAlexander Gavrilov <angavrilov@gmail.com>
Wed, 8 May 2019 14:17:15 +0000 (17:17 +0300)
source/blender/blenkernel/intern/armature_update.c

index 97326fa..bf7d81e 100644 (file)
@@ -340,8 +340,8 @@ static void splineik_evaluate_bone(
   sub_v3_v3v3(splineVec, poseTail, poseHead);
   scaleFac = len_v3(splineVec) / pchan->bone->length;
 
-  /* Adjust the scale factor towards the neutral state when rolling off the curve end. */
-  scaleFac = interpf(scaleFac, baseScale, tailBlendFac);
+  /* Extrapolate the full length of the bone as it rolls off the end of the curve. */
+  scaleFac = (tailBlendFac < 1e-5f) ? baseScale : scaleFac / tailBlendFac;
 
   /* Step 3: compute the shortest rotation needed
    * to map from the bone rotation to the current axis.