MHX Tongue IK creates a cycle and does not work.

Issue #1387 resolved
garden created an issue

MHX Tongue IK creates a cycle and does not work.

Dependency cycle detected:
  OBValeriya81.001/neck-1/POSE_IK_SOLVER() depends on
  OBValeriya81.001/tongue03/BONE_READY() via 'IK Chain Parent'
  OBValeriya81.001/tongue03/BONE_CONSTRAINTS() via 'Constraints -> Ready'
  OBValeriya81.001/tongue03(drv)/BONE_DONE() via 'Copy Rotation'
  OBValeriya81.001/tongue03(drv)/BONE_READY() via 'Ready -> Done'
  OBValeriya81.001/tongue03(drv)/BONE_POSE_PARENT() via 'Pose -> Ready'
  OBValeriya81.001/tongue02/BONE_DONE() via 'Parent Bone -> Child Bone'
  OBValeriya81.001/neck-1/POSE_IK_SOLVER() via 'IK Chain Result'
Dependency cycle detected:
  OBValeriya81.001/neck-1/POSE_IK_SOLVER() depends on
  OBValeriya81.001/tongue04(drv)/BONE_READY() via 'IK Solver Owner'
  OBValeriya81.001/tongue04(drv)/BONE_CONSTRAINTS() via 'Constraints -> Ready'
  OBValeriya81.001/tongue04(drv)/BONE_POSE_PARENT() via 'Pose -> Constraints Stack'
  OBValeriya81.001/tongue03/BONE_READY() via 'Parent Bone -> Child Bone'
  OBValeriya81.001/tongue03/BONE_CONSTRAINTS() via 'Constraints -> Ready'
  OBValeriya81.001/tongue03(drv)/BONE_DONE() via 'Copy Rotation'
  OBValeriya81.001/tongue03(drv)/BONE_READY() via 'Ready -> Done'
  OBValeriya81.001/tongue03(drv)/BONE_POSE_PARENT() via 'Pose -> Ready'
  OBValeriya81.001/tongue02/BONE_DONE() via 'Parent Bone -> Child Bone'
  OBValeriya81.001/neck-1/POSE_IK_SOLVER() via 'IK Chain Result'
Dependency cycle detected:
  OBValeriya81.001/neck-1/POSE_IK_SOLVER() depends on
  OBValeriya81.001/tongue02/BONE_READY() via 'IK Chain Parent'
  OBValeriya81.001/tongue02/BONE_CONSTRAINTS() via 'Constraints -> Ready'
  OBValeriya81.001/tongue02(drv)/BONE_DONE() via 'Copy Rotation'
  OBValeriya81.001/tongue02(drv)/BONE_READY() via 'Ready -> Done'
  OBValeriya81.001/tongue02(drv)/BONE_POSE_PARENT() via 'Pose -> Ready'
  OBValeriya81.001/tongue01/BONE_DONE() via 'Parent Bone -> Child Bone'
  OBValeriya81.001/neck-1/POSE_IK_SOLVER() via 'IK Chain Result'
Dependency cycle detected:
  OBValeriya81.001/neck-1/POSE_IK_SOLVER() depends on
  OBValeriya81.001/tongue01/BONE_READY() via 'IK Chain Parent'
  OBValeriya81.001/tongue01/BONE_CONSTRAINTS() via 'Constraints -> Ready'
  OBValeriya81.001/tongue01(drv)/BONE_DONE() via 'Copy Rotation'
  OBValeriya81.001/tongue01(drv)/BONE_READY() via 'Ready -> Done'
  OBValeriya81.001/tongue01(drv)/BONE_POSE_PARENT() via 'Pose -> Ready'
  OBValeriya81.001/lowerTeeth/BONE_DONE() via 'Parent Bone -> Child Bone'
  OBValeriya81.001/neck-1/POSE_IK_SOLVER() via 'IK Chain Result'
Dependency cycle detected:
  OBValeriya81.001/neck-1/POSE_IK_SOLVER() depends on
  OBValeriya81.001/lowerJaw/BONE_READY() via 'IK Chain Parent'
  OBValeriya81.001/lowerJaw/BONE_CONSTRAINTS() via 'Constraints -> Ready'
  OBValeriya81.001/lowerJaw(drv)/BONE_DONE() via 'Copy Location'
  OBValeriya81.001/lowerJaw(drv)/BONE_READY() via 'Ready -> Done'
  OBValeriya81.001/lowerJaw(drv)/BONE_POSE_PARENT() via 'Pose -> Ready'
  OBValeriya81.001/head/BONE_DONE() via 'Parent Bone -> Child Bone'
  OBValeriya81.001/neck-1/POSE_IK_SOLVER() via 'IK Chain Result'
Dependency cycle detected:
  OBValeriya81.001/neck-1/POSE_IK_SOLVER() depends on
  OBValeriya81.001/lowerTeeth/BONE_READY() via 'IK Chain Parent'
  OBValeriya81.001/lowerTeeth/BONE_CONSTRAINTS() via 'Constraints -> Ready'
  OBValeriya81.001/lowerTeeth/BONE_POSE_PARENT() via 'Pose -> Constraints Stack'
  OBValeriya81.001/lowerJaw/BONE_READY() via 'Parent Bone -> Child Bone'
  OBValeriya81.001/lowerJaw/BONE_CONSTRAINTS() via 'Constraints -> Ready'
  OBValeriya81.001/lowerJaw(drv)/BONE_DONE() via 'Copy Location'
  OBValeriya81.001/lowerJaw(drv)/BONE_READY() via 'Ready -> Done'
  OBValeriya81.001/lowerJaw(drv)/BONE_POSE_PARENT() via 'Pose -> Ready'
  OBValeriya81.001/head/BONE_DONE() via 'Parent Bone -> Child Bone'
  OBValeriya81.001/neck-1/POSE_IK_SOLVER() via 'IK Chain Result'
Dependency cycle detected:
  OBValeriya81.001/neck-1/POSE_IK_SOLVER() depends on
  OBValeriya81.001/ik_tongue/BONE_DONE() via 'IK ik_tongue'
  OBValeriya81.001/ik_tongue/BONE_READY() via 'Ready -> Done'
  OBValeriya81.001/ik_tongue/BONE_POSE_PARENT() via 'Pose -> Ready'
  OBValeriya81.001/lowerTeeth/BONE_READY() via 'Parent Bone -> Child Bone'
  OBValeriya81.001/lowerTeeth/BONE_CONSTRAINTS() via 'Constraints -> Ready'
  OBValeriya81.001/lowerTeeth/BONE_POSE_PARENT() via 'Pose -> Constraints Stack'
  OBValeriya81.001/lowerJaw/BONE_READY() via 'Parent Bone -> Child Bone'
  OBValeriya81.001/lowerJaw/BONE_CONSTRAINTS() via 'Constraints -> Ready'
  OBValeriya81.001/lowerJaw(drv)/BONE_DONE() via 'Copy Location'
  OBValeriya81.001/lowerJaw(drv)/BONE_READY() via 'Ready -> Done'
  OBValeriya81.001/lowerJaw(drv)/BONE_POSE_PARENT() via 'Pose -> Ready'
  OBValeriya81.001/head/BONE_DONE() via 'Parent Bone -> Child Bone'
  OBValeriya81.001/neck-1/POSE_IK_SOLVER() via 'IK Chain Result'
Detected 7 dependency cycles

Comments (3)

  1. Thomas Larsson repo owner

    The problem has been solved in the last commit, although there are still three warnings about dependency loops, down from seven. Those are not real dependency loops, however.

    This happended when you have loaded tongue morphs and then made the bones posable. The tongue bones then have constraints that copy the rotation and scale of the corresponding driven bones, and that is problematic if the bones are simulataneously part of an IK chain. Tongue IK stopped working because the driven bones were included in the IK chain, so the chain length was set to 8 rather than 4. That’s why the cycles go all the way down to the neck-1 bone above.

    The tongue IK option now mutes the copy constraints, so they are not really there if IK is active, even if they still trigger warnings.

  2. Thomas Larsson repo owner

    In order to eliminate the last dependency loops (the warnings are annoying even if there is no real problem), the plugin now removes any tongue morphs if tongue IK is enabled. Or more precisely, the constraints that copy the driven bones are removed. Hence you must make up your mind: you can have either tongue morphs or tongue IK, but not both. Same for finger morphs and finger IK.

  3. Log in to comment