Page MenuHome

"Child Of" Constraint corrupt animation process when switched off
Closed, DuplicatePublic

Description

System Information
Operating system: Linux-4.15.0-121-generic-x86_64-with-debian-buster-sid 64 Bits
Graphics card: GeForce RTX 2060/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 450.80.02

Blender Version
Broken: version: 2.90.1, branch: master, commit date: 2020-09-23 06:43, hash: rB3e85bb34d0d7
Worked: (newest version of Blender that worked as expected)

Short description of error
Switched off constraints corrupt movement of bones and animation afterwards. Constraints which is switched off shouldn't influence the animation process. Animator need way to switch between different phases. For example, now I need my hand as a parent of weapon, later I need vice versa. But Blender making cycle dependency even when constraint is off.

Exact steps for others to reproduce the error
Open my blend file, select "IK" bone, Press G, drag it away, click Right Mouse Button, attention to weird behavior. After this delete constraint from "Weapon" bone and try again from the beginning.


Event Timeline

This is due to 2 dependency cycles between constraints.
See the console:

Read blend: C:\Users\GERMANO\Downloads\Blender_ChildOf_BUG.blend
Dependency cycle detected:
  OBArmature/Bone/POSE_IK_SOLVER() depends on
  OBArmature/IK/BONE_DONE() via 'IK'
  OBArmature/IK/BONE_READY() via 'Ready -> Done'
  OBArmature/IK/BONE_CONSTRAINTS() via 'Constraints -> Ready'
  OBArmature/WEAPON/BONE_DONE() via 'Child Of'
  OBArmature/WEAPON/BONE_READY() via 'Ready -> Done'
  OBArmature/WEAPON/BONE_CONSTRAINTS() via 'Constraints -> Ready'
  OBArmature/Hand/BONE_DONE() via 'Child Of'
  OBArmature/Hand/BONE_READY() via 'Ready -> Done'
  OBArmature/Hand/BONE_CONSTRAINTS() via 'Constraints -> Ready'
  OBArmature/Hand/BONE_POSE_PARENT() via 'Pose -> Constraints Stack'
  OBArmature/Bone.001/BONE_DONE() via 'Parent Bone -> Child Bone'
  OBArmature/Bone/POSE_IK_SOLVER() via 'IK Solver Result'
Dependency cycle detected:
  OBArmature/Hand/BONE_CONSTRAINTS() depends on
  OBArmature/IK/BONE_DONE() via 'Copy Rotation'
  OBArmature/IK/BONE_READY() via 'Ready -> Done'
  OBArmature/IK/BONE_CONSTRAINTS() via 'Constraints -> Ready'
  OBArmature/WEAPON/BONE_DONE() via 'Child Of'
  OBArmature/WEAPON/BONE_READY() via 'Ready -> Done'
  OBArmature/WEAPON/BONE_CONSTRAINTS() via 'Constraints -> Ready'
  OBArmature/Hand/BONE_DONE() via 'Child Of'
  OBArmature/Hand/BONE_READY() via 'Ready -> Done'
  OBArmature/Hand/BONE_CONSTRAINTS() via 'Constraints -> Ready'
Detected 2 dependency cycles

Undefined behavior of rig when it has dependency cycle is not a bug.
There is chance it is fake/avoidable dependency cycle, but for investigation we need a simple rig, which only includes relevant parts, with as few bones as possible.

You'd need to find a way to rig your model without introducing such cycles.

I hopped it's possible to change behavior of blender working with off constraints. Because logic tell the user that switched off constraint shouldn't influence on rig and there is shouldn't be dependency till it on. May be Blender use ancient constraints system... At least Blender should have "Switcher" constraint or dynamic parent like in Maya.

I knew at the start there is dependency cycle, I wrote about it at the start. My point is "if we take off the wheel it shouldn't push the car"))

Germano Cavalcante (mano-wii) reopened this task as Needs Triage.Oct 21 2020, 1:38 PM
Germano Cavalcante (mano-wii) removed Germano Cavalcante (mano-wii) as the assignee of this task.

I think this is same issue as T73199: Switched off modifier still recalculates if there is second one, that switched on
So dependency graph will start evaluate and stop as soon as it encounters dependency cycle.