Question: Rigging with MetaData?
As many of you know, I feel the whole ‘autorigging’ schtick is a bit overrated. Though Bungie gave a great talk at GDC09 (Modular Procedural Rigging), Dice was to give one this year at SIGGRAPH (Modular Rigging in Battlefield 3), but never showed up for the talk.
At Crytek we are switching our animation dept from 3dsMax to Maya. This forces us to build a pipeline there from scratch; in 3dsMax we had 7 years of script development focused on animation and rigging tools. So I am looking at quite a bit o Maya work. The past two weeks focusing on a ‘rigging system’ that I guess could be thought of as ‘procedural’ but is not really an ‘autorigger’. My past experience was always regenerating rigs with mel cmds.
Things I would like to solve:
- Use one set of animator tools for many rigs – common interfaces, rig block encapsulation (oh god i said ‘block’)
- Abstract things away, thinking of rigging ‘units’ and character ‘parts’ instead of individual rig elements, break reliance on naming, version out different parts
- Be fluid enough to regenerate the ‘rigging’ at any time
First Weekend: Skeleton ‘Tagging’
I created a wrapper around the common rigging tools that I used, this way, when I rigged, it would automagically markup the skeleton/elements as I went. This looked like so:
The foundation of this was marking up the skeleton or cons with message nodes that pointed to things or held metadata. This was cool, and I still like how simple it was, however, it didn’t really create the layer of abstraction I was after. There wasn’t the idea of a limb that I could tell to switch from FK to IK.
Second Weekend: Custom Nodes
That Bungie talk got a lot of us all excited, Roman went and created a really cool custom node plugin that does way more than we spec’d it out to do. I rewrote the rigging tools to create ‘rigPart’ nodes, which could be like an IK chain, set of twist joints, expression, or constraint. These together could form a ‘charPart’ like an arm or leg. All these nodes sat under a main ‘character’ node. I realize that many companies abstract their characters into ‘blocks’ or ‘parts’, but I had never seen a system that had another layer underneath that. Roman also whipped up a way that when an attr on a customNode changes, you could evaluate a script. So whether it’s a human arm or alien tentacle arm, the ‘charPart’ node can have one FK/IK enum. I am still not sure if this is a better idea, because of the sheer legwork involved..
Third Weekend: A Mix of Both?
So a class like ‘charParts.gruntLeg()’ not only knew how to build the leg rigParts, but also only the leg ‘rigging’ if needed. This works pretty well, but the above was pretty hard to read. I took some of my favorite things about the tree-view-based system and I created a ‘character’ outliner of sorts. This made it much easier to visualize the rigParts that made up individual ‘systems’ of the character, like leg, spine, arm, etc. I did it as a test, but in a way that I easily swap it out with the treeWidget in the rigging tools dialog.
So how do you guys solve some of these issues?
I solve it by using MotionBuilder.
Comment by Oskar Holmstrand — 2011/10/04 @ 8:59 AM
Hey Chris, we are actually in the same boat in regards to switching, however you guys have a much better start it seems. I’m still trying to fully understand how to properly take advantage of the metaNodes and properly implement the concept into our rigging. I understand the messaging aspect to link physical nodes and metaNodes together makes sense but what more does it get than custom attributes on the physical objects themselves. This paradigm is quite new to me being from 3dsmax as we dont fully have the ability to do much outside of working on actual nodes. If you can shed any light on what you actually expect to get out of this workflow please do.
Comment by Randall Hess — 2011/11/07 @ 4:46 PM
Are you guys still using Maya at Crytek? Can I ask why you made the change ? I saw some of the Crytek Maxscript animation tools. It looked like a slick pipeline. I’m not sure if you’d gain anything by moving over to Maya. How did it work out in the end?
Comment by ken turner — 2013/04/26 @ 1:23 PM