Hello everyone. I have some dependency cycle question. I have two meshes drived by one rig. I have bones with shrinkwrap constraints which deform first mesh to keep these bones on surface of second mesh, which drived by other bones of same armature. Basicly whole rig is working good without any noticeable issues - no lags at all. But console spamming dependency cycle detected errors. So my question is it safe to work with such rig to animate my scene? Or it may cause some unavoidable issuies during animation. Of course I could try to avoid these dependencies to build separate armatures for each mesh, but itâs way much more easier for me to have one armature with only one action to aviod messing with synchronization when animation become complex enough.
Iâve googled a bit and found some advise provided by DanPro. For those who want to hack some lags caused by dependence cycles they may use relation extras options: Extra Object Update and Extra Data Update. But funny thing is that I have no lag at all despite console keep spamming messages. So I wonder should I use these hacks or leave my rig as it is? Any thoughts would be welcomed. I am using 2.79 for this project if itâs matters.
Thank in advance for any help.
Hi, it should be possible. If thereâs no noticeable lag then it might just be a false positive since the depsgraph his supposed to handle this well now. Please report and tag Sergey Sharybin, heâll know what to do
Hadrien
It used to cause issues. Playing with stuff where Iâm shrinkwrapping bones to a mesh deformed by the same armature, in 2.92, is working okay for me, but it may be important that there are no vertex groups for the shrinkwrapped bones on the target mesh.
Iâd render two frames, just to make sure there isnât some issue working faster than my eye can see, but it seems okay.
BTW - What were the errors ?
Here is console:
And this is quick test blend:
Dependency cycle (Shrinkwrap constraint).blend (654.1 KB)
It seems like working ok aside from console errors.
Hey, here is a screen shot in 2.76 (much easier to decipher)
As you can see it has to do with the bone shrink wrapping on to a mesh object with armature modifier.
It does act up and does (bone) penetrate / separate from the mesh it is suppose to be stuck to the surface of. My solution was to separate Bone.001 to its own âArmature Objectâ, so Armature and Armature.001, seems strange but that will fix it.
You should âapplyâ scale to all mesh objects before parenting.
Thank you for reply. I forgot to mention that Iâm using new depthgraph in blender 2.79. Maybe thatâs why in this setup I donât have any disconnections or laggs of constrainted bone to yellow sphere with shrinkwrap. Aside from console alerting dependence cycle my set up looks like working:
But for me itâs a bit obscure how all those depthgraphs thingies are working. Thatâs why I created this thread to get objective information before I will begin actual animating my scene to avoid unexpected behaivoirs in future.
As for your advice of using two separate armatures to avoid dependency cycle - yes I know this workaround have no such cyclic issues. But my rig is quiet complex and I would like to keep all keyframes in one armature action. This is most comfortable workflow for me.
As far as the text in the console goes - Itâs an evaluation (much more detailed than 2.76) of what it (Deps Graph) detected - it is duplicated once - it ends @ 'Dependency cycle detected:. So it is throwing this error âPoseEval Result-Bone Linkâ - due to how bones in the same armature are evaluated - hence moving that bone to its own object fixes the issue. And anytime you have C/Deps there is room for âunexpected behaviorâ.
Thatâs an important detail. There are various little improvements that get made to the dependencies with each build. Undocumented. Maybe under the rubric of âbug fixesâ. Experimental 2.79 dependencies arenât going to be the same as 2.92 dependencies.
As a general rule, it shouldnât give warnings for things that donât matter, but it would be easy to imagine some removal of warnings lagging various improvements and fixes-- console messages arenât really aimed at the typical user. For example, doing a quick test in 2.92, your shrinkwrap bone in same armature doesnât give any dependency warnings in the console. Does that mean itâs been working since 2.79 and they got rid of the warnings sometime between then and now? Or does it mean that they made it work between then and now? I donât know.
Personally, my memories of testing this are that it didnât work very well until recently. Like, sometime between 2.81 and 2.92. Those memories are vague though. Knowing that itâs 2.79, Iâd recommend more caution.
You shouldnât get any (or much fewer) of those warnings in recent releases. Itâs much better in terms of the rigging system, itâs seen a lot of polish. Whatâs holding you from using 2.92 ?
My PC is old and untill I upgrade i forced to stay 2.79.
Then probably your best bet is to use two armatures if you notice the cycle is creating some lag. Itâs not so much work to split an armature in two, but I think you have to re-specify your constraint targets
Thank you, guys. It seems like I have no other option other than split armature in two and messing up with two actions untill upgrade my PC.
No no one armature for control, the other for deforming. One action is all you need. If you have bones that both control and deform, youâll have to copy+paste them into the control armature, and make those control the originals (through copy transforms constraints).
ninja corrected because I had made wrong assumptions
That would be better solution for sure. Using control rig to drive deform armature. Only problem is I have complex rig with foot roll, soft IK, face rig with lot of constraints whole rig is about 350 bones . It may be big challenge to separate all control bones into control rig and than constraint all deform bones to respective one in control rig. But in the end I will have more flexible system easier to animate. Thank you for your advices. I will mark your answer as solution for all who still using pre-2.8 blender!
After switching to 2.93 I still get this console message about dependency cycle detected. Donât know how they upgraded this dependency graph thingie but even in 2.93 only way is to use separate armature for such tasks. So I will need to rebuild my rig using additional control armature to get rid of these pesky dependency cycles.
Damn. Can you share your file, or report the issue to the bug tracker ?
Here is blend file Iâve made in 2.93.
Shrinkwarp_test_2.93 (Dependance cycle).blend (934.9 KB)
Here is console message:
OMG. It was my fault! Pink cube had vertex group âBone.001â this caused blender send warning about dependency cycle. Removing this vertex group from cube fixed this issue: console warning is gone!
Here is fixed blend file if someone interested:
Shrinkwarp_test_2.93 (Fixed!!!).blend (934.8 KB)
No more messages in console:
Thatâs great! Thank to blender developers, now we can use shrinkwrap rigs inside single armature! This is good improvement!
oh thatâs great.