I’m running into an issue that I haven’t been able to solve (and haven’t found anyone else discussing it) :
I have a model rigged so that the IK chains are targeted to control objects that aren’t rendered. In each shot I link to the model, armature, and control objects, then add local proxies for the control objects so I can animate them.
This setup introduces a strange delay where after moving one of the control objects, I have to change frames several times before the entire IK chain responds. After animating a bunch of keyframes this lag persists even in the rendered output. Animating the control objects in the actual library file doesn’t produce any of this lag - everything behaves just fine. The problem only shows up in the individual shot files where the model is linked.
my guess it’s circular dependancies.
question: are some of these objects parented/constrained to some bones in the armature, while other bones depend on them? this is one setup that is circular in blender- armature is evaluated as 1 object, so you would have e.g. empty depends on armature depends on empty… circular dependancies.
you can have one within an armature , or without armatures at all- based on your description of the setup, that is one likely way.
I had looked for circular dependencies and I didn’t find any. It’s just control object <- armature <- model. Also there are no errors when I load the file.
There are armatures to control springs and pistons that are children of other armatures, and the lag seems to be worst in those areas.
There’s a special rig available for pistons. You can find it at http://wiki.blender.org/index.php/Manual/Constraints/Track_To . I am not sure if this helps in your particular problem though.
That constraint is useful in some cases, but not when you need the object to deform along with the bone (for springs) or when there are a set of pistons making up an IK chain.
Regardless, I tried removing the sub-armatures and the lag problem was still there.
hmm, short of looking at the blend file, it’s hard to tell. You can have circular with a single armature of course: bone A depends on B, bone B depends on A. Pistons have a high tendency to produce circularity if you aren’t careful, since both parts need to point at each other. I would say there is a high chance that your piston rig is circular, based on what I said, and what you did.
examine them in detail. cheers, bassam
It’s important to note that many things that aren’t logically circular dependencies can still be circular dependencies in Blender due to Blender’s internal workings.
objectA.locX --> objectB.locY --> objectA.locY
or more simply:
objectA.locX --> objectA.locY
are not logically circular dependencies because the x and y translation of an object are not dependant on each other. However, in Blender it’s a circular dependency becase Blender’s dependency graph only deals with things per object/bone, not per channel.
This is quite interesting.
I have also found that some constraints add more “constraint functionality” that would be obvious. For example Stretch to also affects rotation of the constraint object etc.
I really hope there will be some special dev sources focus on constraints and armatures someday. (Maybe Google SOC 2008). Some standard constraints/rigging functions are still quite tricky in Blender.
PS: Reffering to one older thread I hope Cessen that you will remember after Peach to figure out squash&stretch ball rig or even advice aligorith on spline IK :evilgrin:
Thank you in advance :evilgrin::evilgrin:
A couple of other things to test. Does the effect remain if you:
- Simply append all of those objects into a new file;
- Also create proxy for the armature, along with the control objects.
I’m curious as to why you are choosing to animate your armature with external control objects, as opposed to bones within the same armature.
Based on what cessen and slikdigit said, I still can’t find any circular dependencies. harkyman: everything works great if I just append all the objects into the file. Creating a proxy for the armature solves the delay for the armature itself, but the the geometry attached to it. As for why I set things up this way - the main reason is that each leg IK chain (it’s a six-legged robot) is targeted to the foot object, but since I don’t want to be editing the actual foot object, I have the foot parented to the proxy, which is just a box. That way I can keep the robot geometry completely external for each shot. I don’t know if that’s the best way to do it, but we’re far enough along in production now that it would be a big hassle to do a big rig change.
I filed a bug report earlier, so if you want to look at a watered down version of the armature it’s here:
In response to the bug report Brecht suggested a few things. One of which, moving the armature to the same group as the meshes, actually solved the part of the problem where meshes parented to different bones where updating on different frames. With that out of the way I can render with out things looking like they’re falling apart, but animating is still tough because the mesh doesn’t update until after I’ve added a key frame and moved forward or back a frame.
Update: so I’m not sure what the deal was with linking groups from the model file, but everything works fine when I just link every object individually. Doing so is rather annoying when there a lot of objects in the model, but it seems that there is a bug when linking from groups that’s causing the rig delays.