Page MenuHome

Linking 2 armatures that depends on each other leads to jiggle artefacts
Closed, ResolvedPublic

Description

System Information
Operating system: Windows-10-10.0.17134 64 Bits
Graphics card: GeForce GTX 1080/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 419.67

Blender Version
Broken: version: 2.80 (sub 55), branch: master, commit date: 2019-04-12 07:09, hash: rB0ee23d0f5f61
Worked: 2.79b

Short description of error
Linking two armatures that depends on each other through constraints, plays fine in the original file, but make jiggles when it's linked into a file as a proxy.

Exact steps for others to reproduce the error

  • Download the attached blend file
  • It contains two armatures "rig1" and "rig2". "rig2" depends on "rig1" since its two bones copy the local position of the analogous two bones from "rig1" (it may seem a little farfetched in this case, but this technique is often used in rigs with more complex structures, for example when using a control armature and a deforming armature for example).
  • Start up a new scene, Ctrl-Alt-O to select and link the collection contained in the blend file, and make a proxy of it, "rig1" only
  • Move down slowly the bone "BoneStretchTarget" located at the top of the big bone. It will jiggle randomly.

This evaluation issue does not happen when the two other bones are not parented to the stretch bone. The StretchTo constraint seems to be part of the issue then...

Event Timeline

Sebastian Parborg (zeddb) triaged this task as Needs Information from User priority.Apr 14 2019, 2:43 PM

I'm getting this error when I open your file:

ERROR (bke.anim_sys): blender/source/blender/blenkernel/intern/anim_sys.c:3795 BKE_animsys_eval_driver: invalid driver - pose.bones["BoneStretchTarget"].constraints["Copy Rotation"].influence[0]

If I link the collection and make a proxy of rig1, I can see that the bones in rig2 jumps around a bit when I move the bone along the Z axis (but they won't stay in those postions).

If I remove the driver the error talks about this doesn't seem to happen (or at least it because very hard to trigger). Do you observe the same thing?

Yes I can confirm it, the driver is causing it. Deleting the driver fix the issue here.
However, if I create a new valid driver, for example a new bone drives the location of Bone1, the jiggles are back (file attached below)

Such stuff sounds like a dependency problem - are there no messages about cycles in the console?

No messages.
It works without jiggles in Blender 2.79, theoretically it's not a dependency cycles:
rig1[BoneStretch] parent of > rig1[Bone2.001] drives location > rig1[Bone2] drives location by constraint> rig2[Bone2]

Again there's no jiggle in the main file, only happens in the linked file with proxy.

@Alexander Gavrilov (angavrilov) nothing is printed about cycles. However, I can't really reproduce with your new file:

So I'm a bit unsure what is going on.

Try to move it in all directions, it should happen at some point.

Sebastian Parborg (zeddb) raised the priority of this task from Needs Information from User to Confirmed, Medium.Apr 15 2019, 5:04 PM

@Alexander Gavrilov (angavrilov) It is a bit tricky to reproduce sometimes, but it mesh does jiggle around a bit sometimes. Don't know if this is a linking problem though, so feel free to reassign if you feel that this is not for you.

So, when it's not a cycle, another likely cause of unstable evaluation is a missing dependency, and that is the case here.

(Cycles in fact cause missing dependencies, because they are resolved by randomly killing one link.)

Thanks for the fix!!