This is a project that I’ve had been working on for a while now. I decided to write it after using a lot of auto-rigging tools and looking through similar solutions on the web. To avoid comparisons and to provide an idea of what this is all about, here’s a list of some observations/conclusions:
Most of tools only deal with a specific character template, meaning that if it is based on constructing a biped rig then you have the option of modifying the placement/number of joints in a branch in the character hierarchy. For example, you’d be able to modify the number of joint in an arm or a spine, but you won’t be able to change the relationship of the parent joint (e.g, shoulder joint in an arm) with the root joint of the hierarchy (e.g, how it attaches to the spine, which attaches to the hip joint as the root).
Once the character skeleton has been created, it should also be possible to go back and make changes to the original character template or a configuration which was used to define the character. If there are any modifications to character geometry in such a way that it would require altering the skeletal setup due to change in its anatomy, the tool should allow one to revert to the character template which can be modified to fit the geometry. There are cases, for instance, in morphing where only the shape of the geometry has to be modified without changing the vertex order, then one can modify the bind pose of the skeleton.
One should be able to define custom skeletal modules by using the tool, so that it can be reused in the future. For example, if we are creating the skeletal structure for a hand for multiple rigs, you should be able to create and save a hand module on your own (which is a collection of joint chains for fingers connected to a wrist). Later you simply have to reload it and adjust the position and orientation of the fingers to fit the geometry.
Those who are more familiar with rigging characters but need a replacement for using the current joint based system in Maya without having to worry about managing joint orientations across the character hierarchy. You could translate the child joints as needed to fit the geometry and still be able to provide custom orientation for a joint as quickly as possible (e.g, to specify if the root of a finger would rotate in a specific way).
For building characters, joint “modules” could be created where a user could specify the type and number of joints in a module (beginning from one, depending on the type) and set-up relationships between such modules to quickly set-up a character hierarchy rather than from creating and parenting individual joints. A relationship between two joint modules could be constrained or hierarchical, where a constrained relationship could be toggled on or off to create “broken” hierarchies in a character.
If a character geometry is not prepared at the time of building a character rig, you could prototype a character by specifying to create proxy geometry along with the joint modules. You simply have to modify the shape of the proxy geometry with reference to the character design as you see fit. Proxy geometry can also be used as an alternative to a high resolution geometry which takes longer to weight and skin to a skeleton, where at a time when an animator in a production might want to set keyframes without waiting for the final character geometry. A proxy geometry would also give a better real-time performance for viewport interaction as opposed to a high resolution geometry.
An animator could also quickly rig a prototype character for use. One can load and install a character template (e.g, biped or quadruped template prepared and saved by a rigger using the tool) into a scene and apply a control rig of his/her own choice to a part of a character hierarchy (e.g, one may apply only FK controls to the right arm and IK/FK to the left arm).
For extending the functionality and adding new control rigs in the future, a TD could write a control rig by simply importing/inheriting the base class for the control rig or its sub-classes in the tool and add or override functions as needed without modifying the original source code (more on that later).
The definition of a “modular” rigging workflow is to break rig components into individual self-contained elements or modules which can be manipulated independently without affecting other modules during the process of a character set-up. Such modules can be used to define different parts of a character such as a leg, spine or an arm. Each part may behave in a certain way and will require a module type depending on its behaviour, but there may be a case where a leg for instance, can be further broken down into a foot and the main leg hierarchy (upper and lower) for which modules can be combined differently to behave like a larger module or an assembly. The way that it works is that one has to know how a control rig like a reverse foot setup on a leg will function if needed, which requires the entire leg, that is, from hip to the toe as a single hierarchy. This is not required if only an FK control rig is to be applied to the leg. With that, lets get right into using it in Maya and see how it works.