Cyclic dependency question

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

2 Likes

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.

2 Likes

BTW - What were the errors ?

Here is console:
Screenshot_1

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.

1 Like

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.

1 Like

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. :roll_eyes:

1 Like

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

1 Like

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 :slight_smile: . 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 ?

1 Like

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. :slight_smile:

1 Like