I've read all I could find on dependency cycle issues in Blender, tried everything suggested in related posts: enabled new dependency graph, unchecked stretch in IK setting, checked Extra Object Update and Extra Data Update on IK controls and bones. Nothing seem to work, still getting a lag in animation and the following console output:

Default dependency graph:

Dependency cycle detected:
WristMarker depends on Armature through Bone Parent.
indexIKpole.L depends on WristMarker through Parent.
Armature depends on indexIKpole.L through IK.

New dependency graph:

  Dependency cycle detected:
  'OBindexIKgoal.L.TRANSFORM_LOCAL()' depends on 'OBWristMarker.TRANSFORM_FINAL()' through 'Parent'
  'OBWristMarker.TRANSFORM_FINAL()' depends on 'OBWristMarker.OBJECT_UBEREVAL()' through 'Temp Ubereval'
  'OBWristMarker.OBJECT_UBEREVAL()' depends on 'OBWristMarker.TRANSFORM_PARENT()' through 'Temp Ubereval'
  'OBWristMarker.TRANSFORM_PARENT()' depends on 'OBWristMarker.TRANSFORM_LOCAL()' through '[ObLocal -> ObParent]'
  'OBWristMarker.TRANSFORM_LOCAL()' depends on 'OBArmature.wrist.L.BONE_DONE()' through 'Bone Parent'
  'OBArmature.wrist.L.BONE_DONE()' depends on 'OBArmature.wrist.L.BONE_READY()' through 'Ready -> Done'
  'OBArmature.wrist.L.BONE_READY()' depends on 'OBArmature.wrist.L.BONE_POSE_PARENT()' through 'Pose -> Ready'
  'OBArmature.wrist.L.BONE_POSE_PARENT()' depends on 'OBArmature.forearm.L.BONE_DONE()' through '[Parent Bone -> Child
  'OBArmature.forearm.L.BONE_DONE()' depends on 'OBArmature.POSE_IK_SOLVER()' through 'IK Solver Result'
  'OBArmature.POSE_IK_SOLVER()' depends on 'OBArmature.arm.L.BONE_READY()' through 'IK Chain Parent'
  'OBArmature.arm.L.BONE_READY()' depends on 'OBArmature.arm.L.BONE_POSE_PARENT()' through 'Pose -> Ready'
  'OBArmature.arm.L.BONE_POSE_PARENT()' depends on 'OBArmature.arm.L.BONE_LOCAL()' through 'Bone Local - PoseSpace Lin
  'OBArmature.arm.L.BONE_LOCAL()' depends on 'OBArmature.POSE_INIT()' through 'PoseEval Source-Bone Link'
  'OBArmature.POSE_INIT()' depends on 'OBindexIKgoal.L.TRANSFORM_FINAL()' through 'IK'
  'OBindexIKgoal.L.TRANSFORM_FINAL()' depends on 'OBindexIKgoal.L.OBJECT_UBEREVAL()' through 'Temp Ubereval'
  'OBindexIKgoal.L.OBJECT_UBEREVAL()' depends on 'OBindexIKgoal.L.TRANSFORM_PARENT()' through 'Temp Ubereval'
  'OBindexIKgoal.L.TRANSFORM_PARENT()' depends on 'OBindexIKgoal.L.TRANSFORM_LOCAL()' through '[ObLocal -> ObParent]'

Maybe there is something fundamentally wrong with my rig? I haven't rigged in a long time in Blender or any other program for that matter. In the past I did some rigs in Maya and Cinema4D and, as far as I can recall, I used similar parenting technique without issues.

I have an arm rig for this test. I have one IK chain from forearm to shoulder, another one from index finger tip to index finger base. I have an empty called wristmarker parented to wrist bone. I have indexIKgoal and indexIKpole parented to the wristMarker, so that when the whole arm moves, finger position stays relative to the wrist.

Appreciate any help.

enter image description here

blend file:



1 Answer 1


The problem is that the wristmarker is an empty object. You can make it a bone and give it a custom shape.

Blender has a limitaion with cycle evaluation on object level, something that even new dependency graph does not solve. This does not exist in Maya, Cinema 4D, etc., where you would use empties in rigging.

In Blender it is convenient to keep all the relations inside the armature object. If you link something to an empty and back to the same rig, it will create dependency on object level.

If you really need to constraint or parent to different object (like when using curves and spline IK), you cannot link back to the same rig, but you have to use a different one to stay clear of any dependency cycles. This can be solved like this:

Rigging question about Spline IK and having all controls on one armature

Another reason to use only bones for any controls the animator will interact with is for linking characters into another .blend files. This also does not work conveniently as in other apps, you have to create a proxy object from your armature. If you had the rig setup with empties outside the armature, your rig would fall apart when making that proxy.


You must log in to answer this question.

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