Rigloo13 Sep 2017 #Tool #Maya #Portfolio
Rigloo is a component-based rigging solution for Maya
Rigloo was built with the following goals in mind:
- Allow for fast rig prototyping and iteration
- Be flexible and support a diverse selection of characters
- Make rigging accessible without sacrificing flexibility
- Be adaptive and allow for working off of existing animation data
Rigloo is component based. Rigs are constructed with common rig parts that can be customized to fit each character. This design choice was essential to support a variety of body types, as the rig makes very few assumptions on the construction of the users character. Other tools like HIK and Motionbuilders control rig make strict assumptions on character construction and would not work for the project in mind.
Rigloo is code driven. Rigs are built and attached dynamically, meaning it can fit to any skeleton shape. Additionally this was essential to allow for baking the rig to existing animation data. This means the tool can be used for motion capture cleanup or even animation created with other rigs.
Rigloo is open source under the MIT license, the latest version can be download here.
While there are plenty of existing solutions for simplifying rig construction, most will include restrictive assumptions about character design. Tools like Maya’s HIK require your character to be humanoid, while others will specify humanoid or quadruped. Rigloo was built as a rigging tool that simplifies the rigging process but does not sacrifice the creative freedom we have as riggers.
As a rigger, I also desired something that I would be able to use to speed up my own iteration time. Often I would like to make a quick rig prototype, but will be restricted in the features I can add in a short amount of time. Complex features such as parent space switching and squash and stretch would need to be omitted unless I spent the time to write a script devoted to them. Rigloo is built to speed up the rigging process while allowing for commonly used and complex features to be added to prototype rigs.
Rigloo is built to support experienced riggers desiring a quick prototyping tool, as well as non-riggers looking to create custom rigs.
Fossil supports the following features:
- Rig saving/loading
- Rig baking to existing animation
- 7 components including:
- IK component with FK offsets and squash and stretch
- Spine IK Component with FK offsets
- Leg IK Component featuring a reverse foot roll
- Global scale control
- Component naming
- Control curve generation with
- Custom base size
- Choice of shape preset
- Optional control curve editing and saving
- Keyable space switching for every component
- Squash and Stretch for multi-target components with:
- Individual stretch and squash control
- Leaf joint support
Below is a detailed look into some of the more complex features included in this list. For a detailed description of how the to use the tool, consult the documentation.
Rigloo is built out of components. A component is an isolated part of the rig that does not depend on any other part. This can be a simple as a single FK control or an entire IK chain. By design the components should be as general as possible, making as few assumptions about its use cases as possible.
The Spine IK Component is one of the more complex components. While not a true IK spline setup, an approach with similar functionality was used. In development, a traditional spline IK design was unable to work reliably with animation baking and dynamic attachment. As such, this approach uses blended transform values that can perfectly match a source skeleton or animation.
The Leg IK Component is one of the components with specific use cases in mind. While being a more restrictive version of the IK Component, I knew a large percentage of users would require a reverse foot roll solution, and thus this component was built to provide the option.
All components on a Rigloo rig have a parent space and an upright space. This value can be set to use the space of any other component on the rig or set to ‘world’ and not follow any.
Parent Space determines where translation is inherited. This is often useful for IK controls, to attach to other parts of the body.
Upright Space determines where rotation space is inherited. This is useful for setting controls to align to another space rather than their direct parent. For example aligning a head or arm to follow world space orientation in order to aim at a specific position.
Squash and Stretch
Squash and stretch is very important for stylized rigs to enhance the appeal of a character, as well as on realistic rigs to prevent snapping. Its a fairly complex feature to implement manually, meaning it is often inaccessible to new riggers.
I implemented an option on all multi-control components to include a squash and stretch relationship. There is an option to toggle off both squash and stretch individually.
Additionally there are position offset on all components, allowing for position control on otherwise rotation-focused relationships.
With the goal in mind of maintaining the key creative decisions, I knew I needed a solution of control curves. With a tool built with the concept of supporting a large variety of character types, the user would need an option to customize their controls to support their unique use case.
By default, Rigloo uses shape presets from my Control Curve Library. Additional presets can be added through that tool. Otherwise when custom controls are enabled, Rigloo will store controls as CVs rather than as a shape preset. So any change made to the shape nodes of the controls is stored when the rig is next previewed.
While being necessary to support any skeleton shape, having a code driven tool also provided the opportunity to support baking to existing animation. When enabled, this feature bakes the rigloo rig to each frame of an animation before attaching the skeleton.
This feature means Rigloo can support animations not animated with Rigloo rigs, as well as providing a tool for cleaning up mocap animation.
Saving and Loading
In order to bring Rigloo rigs between scenes, it was necessary to include saving and loading of rigs. Rigs are saved as a simple .json text file. The text file is human readable and is easily edited for troubleshooting.
Visually the tool is reminiscent of Unity’s component editor, an engine I have much experience with. I new the tool would require a dynamic user interface, as well as be polished for release. Without much time for UX iteration, and not having tackled many previous tools of this scope, the Unity-like design was chosen as an safe-bet approach.
Originally built with intention to be used with the Skywind Project, the tool later evolved to be released publically. For Skywind we use retargetted animation, and in order to cleanup effectively, I required a tool that supported animation baking to non-standard skeleton.
Functionally the tool is inspired by Blizzard’s code based rigging for Overwatch, as seen in their GDC 2017 talk “The Animation Pipeline of Overwatch”. Their approach to rigging for an uncertain cast of characters proved to be an excellent source to jump off from and create a complete and open source toolset.