Tuesday, May 10, 2011

Rigging Tips - Setting up your rig for easy linking into shot files

Following a question from Michael in my previous post about the "Cartoon Guy" rig and seeing how this is quite an often overlooked aspect in quite a few of the otherwise great rigs being released into the community these days, I thought I'd take the time today to discuss how to set up your rigs so that they can be easily linked into shot files by animators for animation, allowing you to keep tweaking them still without having to relink the rigs into the files again.

Overview of what we're trying to achieve
With most rigs that are getting released to the community, the objects which make up the character and it's control mechanisms have not been assigned to a Group. If you like, you can think of this as being like defining what your "character" consists of.

When you have a group, in your shot files you can simply "Link" in the relevant Group for the character. Having done this, you'll have the character with all its related objects included in your shot file now, but you won't have all of these cluttering your Outliner object list. Another benefit is that if you make any changes to the objects which the character comprises of (i.e. you add some extra deformer objects, or add some props/costume items), these changes are propagated to your shot file too without having to go back and link in those new objects too now.

In constrast, if you don't have a group, in your shot files you'll have to sift through the list of objects in the character rig file, selecting the relevant objects to "Link" in. In general, this is not really that pleasant, as I can assure you that more likely than not, you'll have various cameras, lighting rigs, and perhaps even ground planes/backdrops and/or extra objects used for making turnaround render tests of your character rig in that file. This though is just the tip of the iceberg. If you make certain changes in your rig file (i.e. change the objects used, perhaps as described above), these changes won't get propagated to your shot files. Also, your outliner will get a lot more crowded, with a long line-up of objects for one character rig appearing there, along with perhaps those from another character, as well as the scene's props/etc.

BTW, I should make a small mention here why we "Link" in characters instead of just "Appending". Appending simply means that you're telling Blender to go into your nominated file and make a local copy of the things you tell it to find there. In contrast, linking means that you're telling Blender that when it reads the file, it should go into the file where you linked the stuff from, and grab a snapshot of the current state of the items you linked in. The latter (linking) means that you can make changes to the rig (i.e. giving the character a nose job) and then having this change show up in all your shot files when you reload them, instead of having to manually copy over the changes to each new file.
Hopefully I've now convinced you why we need to do what I'm describing. It really makes animating with linked-in rigs less scary.

Creating Character Groups
1) Identify the objects that form the character and its rig
Basically, select all the objects that:
- form the visible (i.e. rendered) parts of the character. For example, you'll typically have a "body" mesh, an "eyeballs" mesh, "hair" mesh(es), costume meshes.
- deform this visible geometry. For example, any armatures which deform the meshes, lattices. Also, don't forget any Mesh Deform cages, hooks, or Spline IK curves.
- are used to control the deforms. For example, any armatures which are used as the control interface that animators animate using (this may be the same as the armature used to deform the mesh). You may also need to include some empties used for various tasks here, though their use should not really be needed at all (in fact, strongly frowned upon! Rigs should be self-contained within a single object, i.e. using only the bones of a single armature, otherwise it gets nasty for the animators to manage!)

For most rigs, this can be done simply by selecting the rig and then Shift-G (Select Grouped) :: Children, which will select most of these for you. You may need to select a few extra objects or deselect a few others.
TIP 1: You should not need to include the custom bone shape objects (i.e. usually named "WGT_*", and stored on layer 20, aka "the trashcan"), which will get automatically included as required.
TIP 2: Do NOT include the MetaRig in the character group if you used Rigify. This is not useful to any animator, and will just be a source of confusion!

2) Add these to a group
To add these selected objects to a group, simply use the shortcut Ctrl-G (Make Group). Congratulations, you now have a group for your character, although there are still a few finishing touches that you may want to take heed of.

3) Finishing Touches
On any one of the objects that you've added to the group, perhaps on the rig, go to the Object context in the Properties Editor, and find the Groups" panel.

It would pay to change the name of the group to something more obvious, for example the name of your character.

Also, to ensure that only useful layers will show up in the linked-rig (i.e. deform cages and lattices aren't in the way), change the "layer" settings for this group to only include the layers where which contain the geometry and control rig objects the character.
NOTE: This layers setting only affects which layers will get shown in the referencing file (you'll have no way of controlling this from there; all objects on visible layers will be visible, unless you rig has provisions for setting the renderability/viewport-visibility of the relevant objects).
One other thing you might want to be aware of, is to make sure you set the appropriate "Proxy Protected Layer" settings for your armatures. In 2.5, a "Proxy Protected" layer is simply one whose bones will not be able to be edited by the animator (including being animated) when the rig gets linked into a shot file. This is particularly useful for "mechanics" and "deform" bone layers (usually layer 20, but maybe a few other "second row" items), where you have all the funky behind-the-scenes details of the rigs which you don't want animators going in and mucking up. Apart from those, you don't really want to be locking any other layers.

Adding your character to a shot file
This is also useful information for animators, so listen up.

With a rig set up as described above, it is quite easy to get the character into your shot files and to start animating away.

1) Save the file first (optional, though recommended)
Before you do anything, save a copy of the current file/workspace. By saving a shot file first, you'll be able to use relative paths for the linking step, which makes it easier for you to move your shot files around between your animation computer and the renderfarm for example, or even moving all your files from one directory to another.

2) Link in the Group (do NOT append)
a) Simply go to the file menu, and click on Link.
b) Navigate to the character rig file, and click to "open" it
c) Inside the file (still within the filebrowser), find the Group entry (shown as folder)
d) Double-click on the character's group file to link it in

If you had all the options in the lower-lefthand panel ("Link/Append from Library") enabled, which IIRC is the default, then you should now see your character standing in your file at the 3D cursor

3) Proxify the rig to start animating
This may sound a bit scary, but it's not really that tricky.

With the newly linked-in character selected (or rather, the empty which instances it in the scene), press Ctrl-Alt-P (Make Proxy), and choose "rig"(*) from the searchbox (you may need to clear the supplied text there first).
(*) substitute "rig" with the name of the control armature in character file

Now, select this newly proxified armature, and enter Pose Mode as per usual. Save the file now, and animate away normally with the rig.


Hopefully that should give you all a good enough reference of how to do this. Ask away with any questions as usual :)


  1. Great article!! I tried to use this technique some time ago, but I didn't knew a lot of this tips, and what I ended up doing was just appending :) Posting a link from blendtuts. Thanks for this awesome and easily understandable explanation for linking armatures ;)

    Good job! Take care ;)

  2. i'm wondering how can i integrate linking object with cloth simulation. for example, if i have matador character and the red cloth in separate file, and want to make them interact..

  3. There isn't much info about proxies, so this is a very helpful explanation, thanks.
    Do you have any tips on easily swapping between a low and high resolution character while animating with proxies? The only way I have managed it, is by linking the armature, and the low and high res models in on separate layers.
    I had to ditch using groups because of this.

  4. There was a tip on the Durian DVD's with regard to how they did this sort of high/low res rig stuff.

    IIRC, in short they would have a "high res" group and a "low res" one. You'd link in and animate with the low res one. Then when you went to render, you'd link in the high res, then on the empty which instances the group (i.e. geometry + rig), you'd change the group from the low res to high res, and save the file. On reloading, the high-res one should have been substituted in place of the low-res.

    If in doubt, I recommend you make a copy of the file first (or perhaps consider using some proper version control system, i.e. svn)

  5. Thanks for the tut! What would be the best way to duplicate a linked asset within a scene, with separate animation?

  6. MikeB: sadly you're out of luck at the moment due to the way this stuff works.

    If you need to do this, you're going to have to use some filesystem-based hacks to make multiple copies of the file that you're getting the character from (each instance of the character doing something different = different file). AFAIK, for linux you can make symlink copies or whatever.

  7. Ah thanks Aligorith. I'll just duplicate the file for the moment, maybe even experiment with symlinks here on OS X.