4
$\begingroup$

I've been trying for hours to solve this and I can't do it for the life of me. I'm just trying to rig a hand right and I can't do it. I'm using Blender.

enter image description here

I have this hand here with little box bones for controlling the fingers. When I animate the mesh, the keyframes are fine, but inbetween the keyframes the fingers move all weird. When I export the animaton or move along the frames in the blender editor, the fingers are pointing in random directions like the keyframes don't exist at al (as seen in the attached image)l. This is how the animation looks as an fbx too, but in the editor if I try to move them back into place, just even clicking on an axis instantly snaps all of the fingers to the right place.

So in the animation it's supposed to look like this: enter image description here But when I play it it looks like this: enter image description here

It's just the fingers! I've tried moving the parents around a bunch for a lot of the bones, setting and removing constraints. I'm beat.

Edit: Here is a simplified blend file.

$\endgroup$
2
  • $\begingroup$ Share a (simplified version of) your blend file, so that people can investigate. $\endgroup$
    – dr. Sybren
    Commented Dec 19, 2017 at 7:58
  • $\begingroup$ Uploaded a version with just 1 arm. $\endgroup$ Commented Dec 19, 2017 at 17:30

1 Answer 1

2
$\begingroup$

You have dependency cycles in your rig. Running the file with blender --enable-new-depsgraph SimplifiedBlend.blend shows this on the console:

Read blend: /home/sybren/Downloads/SimplifiedBlend.blend
Dependency cycle detected:
  'OBLArm.POSE_INIT()' depends on 'OBLIndex.lindex.BONE_DONE()' through 'IK'
  'OBLIndex.lindex.BONE_DONE()' depends on 'OBLIndex.lindex.BONE_READY()' through 'Ready -> Done'
  'OBLIndex.lindex.BONE_READY()' depends on 'OBLIndex.lindex.BONE_CONSTRAINTS()' through 'Constraints -> Ready'
  'OBLIndex.lindex.BONE_CONSTRAINTS()' depends on 'OBLArm.LArm_Fore.BONE_DONE()' through 'Child Of'
  'OBLArm.LArm_Fore.BONE_DONE()' depends on 'OBLArm.POSE_IK_SOLVER()' through 'IK Solver Result'
  'OBLArm.POSE_IK_SOLVER()' depends on 'OBLArm.POSE_INIT_IK()' through 'Init IK -> IK Solver'
  'OBLArm.POSE_INIT_IK()' depends on 'OBLArm.POSE_INIT()' through 'Pose Init -> Pose Init IK'
Dependency cycle detected:
  'OBLRing.lring.BONE_CONSTRAINTS()' depends on 'OBLArm.LArm_Ring_1.BONE_DONE()' through 'Child Of'
  'OBLArm.LArm_Ring_1.BONE_DONE()' depends on 'OBLArm.LArm_Ring_1.BONE_READY()' through 'Ready -> Done'
  'OBLArm.LArm_Ring_1.BONE_READY()' depends on 'OBLArm.LArm_Ring_1.BONE_POSE_PARENT()' through 'Pose -> Ready'
  'OBLArm.LArm_Ring_1.BONE_POSE_PARENT()' depends on 'OBLArm.LArm_Fore.BONE_DONE()' through '[Parent Bone -> Child Bone]'
  'OBLArm.LArm_Fore.BONE_DONE()' depends on 'OBLArm.POSE_IK_SOLVER()' through 'IK Solver Result'
  'OBLArm.POSE_IK_SOLVER()' depends on 'OBLArm.POSE_INIT_IK()' through 'Init IK -> IK Solver'
  'OBLArm.POSE_INIT_IK()' depends on 'OBLArm.POSE_INIT()' through 'Pose Init -> Pose Init IK'
  'OBLArm.POSE_INIT()' depends on 'OBLRing.lring.BONE_DONE()' through 'IK'
  'OBLRing.lring.BONE_DONE()' depends on 'OBLRing.lring.BONE_READY()' through 'Ready -> Done'
  'OBLRing.lring.BONE_READY()' depends on 'OBLRing.lring.BONE_CONSTRAINTS()' through 'Constraints -> Ready'
Dependency cycle detected:
  'OBLArm.POSE_INIT()' depends on 'OBLMid.lmid.BONE_DONE()' through 'IK'
  'OBLMid.lmid.BONE_DONE()' depends on 'OBLMid.lmid.BONE_READY()' through 'Ready -> Done'
  'OBLMid.lmid.BONE_READY()' depends on 'OBLMid.lmid.BONE_CONSTRAINTS()' through 'Constraints -> Ready'
  'OBLMid.lmid.BONE_CONSTRAINTS()' depends on 'OBLArm.LArm_Index_1.BONE_DONE()' through 'Child Of'
  'OBLArm.LArm_Index_1.BONE_DONE()' depends on 'OBLArm.LArm_Index_1.BONE_READY()' through 'Ready -> Done'
  'OBLArm.LArm_Index_1.BONE_READY()' depends on 'OBLArm.LArm_Index_1.BONE_POSE_PARENT()' through 'Pose -> Ready'
  'OBLArm.LArm_Index_1.BONE_POSE_PARENT()' depends on 'OBLArm.LArm_Fore.BONE_DONE()' through '[Parent Bone -> Child Bone]'
  'OBLArm.LArm_Fore.BONE_DONE()' depends on 'OBLArm.POSE_IK_SOLVER()' through 'IK Solver Result'
  'OBLArm.POSE_IK_SOLVER()' depends on 'OBLArm.POSE_INIT_IK()' through 'Init IK -> IK Solver'
  'OBLArm.POSE_INIT_IK()' depends on 'OBLArm.POSE_INIT()' through 'Pose Init -> Pose Init IK'
Dependency cycle detected:
  'OBLArm.POSE_INIT()' depends on 'OBLThumb.lthumb.BONE_DONE()' through 'IK'
  'OBLThumb.lthumb.BONE_DONE()' depends on 'OBLThumb.lthumb.BONE_READY()' through 'Ready -> Done'
  'OBLThumb.lthumb.BONE_READY()' depends on 'OBLThumb.lthumb.BONE_CONSTRAINTS()' through 'Constraints -> Ready'
  'OBLThumb.lthumb.BONE_CONSTRAINTS()' depends on 'OBLArm.LArm_Fore.BONE_DONE()' through 'Child Of'
  'OBLArm.LArm_Fore.BONE_DONE()' depends on 'OBLArm.POSE_IK_SOLVER()' through 'IK Solver Result'
  'OBLArm.POSE_IK_SOLVER()' depends on 'OBLArm.POSE_INIT_IK()' through 'Init IK -> IK Solver'
  'OBLArm.POSE_INIT_IK()' depends on 'OBLArm.POSE_INIT()' through 'Pose Init -> Pose Init IK'
Dependency cycle detected:
  'OBLArm.POSE_INIT()' depends on 'OBLLittle.llittle.BONE_DONE()' through 'IK'
  'OBLLittle.llittle.BONE_DONE()' depends on 'OBLLittle.llittle.BONE_READY()' through 'Ready -> Done'
  'OBLLittle.llittle.BONE_READY()' depends on 'OBLLittle.llittle.BONE_CONSTRAINTS()' through 'Constraints -> Ready'
  'OBLLittle.llittle.BONE_CONSTRAINTS()' depends on 'OBLArm.LArm_Fore.BONE_DONE()' through 'Child Of'
  'OBLArm.LArm_Fore.BONE_DONE()' depends on 'OBLArm.POSE_IK_SOLVER()' through 'IK Solver Result'
  'OBLArm.POSE_IK_SOLVER()' depends on 'OBLArm.POSE_INIT_IK()' through 'Init IK -> IK Solver'
  'OBLArm.POSE_INIT_IK()' depends on 'OBLArm.POSE_INIT()' through 'Pose Init -> Pose Init IK'

Circular dependencies can cause all kinds of nasty things, so it's better to clean them up. You also always want to enable the new dependency graph with --enable-new-depsgraph unless you have a strong reason not to. It allows for more granular control, allowing for more complex rigs without resulting in dependency cycles.

To use custom bone shapes, use actual custom bone shapes, instead of trying to incorporate other objects into your rig.

$\endgroup$
0

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .