public final void updateModelTransforms() {
        if (currentWeightSum == 1f) {
            currentWeightSum = -1;
        } else if (currentWeightSum != -1f) {
            // Apply the weight to the local transform
            if (currentWeightSum == 0) {
                localRot.set(bindRot);
                localPos.set(bindPos);
                localScale.set(bindScale);
            } else {
                float invWeightSum = 1f - currentWeightSum;
                localRot.nlerp(bindRot, invWeightSum);
                localPos.interpolateLocal(bindPos, invWeightSum);
                localScale.interpolateLocal(bindScale, invWeightSum);
            }

            // Future invocations of transform blend will start over.
            currentWeightSum = -1;
        }

        if (parent != null) {
            //rotation
            parent.modelRot.mult(localRot, modelRot);

            //scale
            //For scale parent scale is not taken into account!
            // worldScale.set(localScale);
            parent.modelScale.mult(localScale, modelScale);

            //translation
            //scale and rotation of parent affect bone position
            parent.modelRot.mult(localPos, modelPos);
            modelPos.multLocal(parent.modelScale);
            modelPos.addLocal(parent.modelPos);
        } else {
            modelRot.set(localRot);
            modelPos.set(localPos);
            modelScale.set(localScale);
        }

        if (attachNode != null) {
            updateAttachNode();
        }
    }
Updates the model transforms for this bone and, possibly, the attachments node
if not null.
<p>
The model transform of this bone is computed by combining the parent's
model transform with this bone's local transform.
jme3-core/src/main/java/com/jme3/animation/Bone.java