Postmortem: Rigging Chopsticks and Characters for a Short

This was an animated short I contributed to  as a freelancer in 2007; and after an almost 2-year hiatus, wrapped up in late-2009. The two characters were modeled by Shon Mitchell, and animations were done by our client, Jonali  Bhattacharyya. This was a fun project that involved rigging two bipeds with the added twist of making them capable of wielding chopsticks. Jonali was really great to work with, and communicated her needs well. I’ll go into some detail about the Maya rigs created and the accompanying MEL tools used by the animator.

The Rigs

The characters were setup in Maya 7.0. When I was offered the characters from Shon, Jonali sent me a bullet list of rig features and I went straight to work. The short had two, stylized, human characters. The story revolved around the two characters learning how to eat with chopsticks, which are surprisingly complicated devices!


Lip syncing wasn’t needed, but the characters still needed to convey a range of emotions. The face rig is mostly joint-based, and uses blendshapes to control the pupil in the eyes. Jonali stressed to minimize use of the channel box for custom attributes and instead use viewport controls, within reason. A very successful visual face setup is the “Osipia-style” described in the facial rigging book titled, “Stop Staring”. The setup comprises of an assortment of sliders  controller different areas of the face. In addition to the sliders, I added a layer of controls that directly drive each bone of the face. The direct controls are detailed enough to be used by themselves, or used to help sculpt any basic poses created from the sliders.

The slider type controls presented an intuitive and fun facial rig

The setup was practically an instant success, requiring fewer revisions than other aspects of the rig.


The rig has IK/FK switching for the limbs that needed to stretch to achieve a wider range of poses. I had much success using the Maya plug-in, ELASTIK; but the complexity of the rig created problems. This was my first attempt at using ELASTIK in-tandem with a 3-bone setup IK/FK switch and I ended up finding the hard way that the tool couldn’t communicate with render nodes. With this in mind, I had to build my own stretchy solution from scratch using Maya’s distance node.  I’ll save the full details for a future post, but basically the setup uses the distance tool to scale the IK joints based on the distance measured (real-time) between the chain’s origin (i.e. Hip, Shoulder) to the controller that’s potentially pulling beyond the extents of the limb.


Just prior to undertaking this project, I sat through a MasterClass DVD (Animator Friendly Rigging) demonstrating an interesting approach to rigging a Spine. Eager to demonstrate my new knowledge, I decided to set up the spine of our characters in a similar manner. What made the setup intriguing was the ability to offer the animator control of the spine in both an IK (using a spline setup), and FK (rotating a few controls), at the same time. This allowed a new level of flexibility to posing the spine that I didn’t have in rigs I previously worked on. The tradeoff was the tendency for the FK setup to get “left behind” when using the IK controls exclusively. The workaround was to add a global control for moving both around the scene, which can confuse animators  without offering detailed instruction on its use. It wasn’t the best thing ever that I was hoping it would be; mostly due to it not being the most intuitive to use, but it worked and didn’t break too much.

Foot Roll

I used a reverse foot setup for the rig, but unlike my typical rigs, there’s no animating the roll using custom attributes. Instead, viewport controls were created to represent every aspect of the foot roll, per the animator’s request.


All the fingers had IK functionality to interact with the chopsticks (except the pinky). By the way, I still suck at eating with chopsticks.

A large feature of the short is the characters’ learning to use chopsticks, so not only did I need to create a solid setup of the chopstick prop, but I had to create a unique hand setup to go with it. Additionally, I never used chopsticks at all, so part of rigging process involved me learning how to eat a meal using these foreign instruments. After a few days I got the hang of it, and could eat food without making too much of a mess. By this point, I had the reference I needed to figure out the hand rig.

What I ended up doing was making an IK/FK switch for the right hand (both characters were right-handed). On the FK side, it’s set up like any normal hand rig, and has no real interaction with the chopsticks. When IK, the fingers are parented to the chopsticks and animator only really has to worry about manipulating the prop, the fingers will keep up on their own.

Script Nodes and Portability


Both rigs featured a custom shelf, custom pick-walking, and a picker window. The picker window, was a mini-viewport that showed a 2D version of the control rig. The purpose was to give the animator a consistent means to select controls regardless of the complexity of a shot. Both the shelf and the picker were reliant on MEL functions to operate. To keep the rigs self-contained, and to better hide the nuts-and-bolts from the animator, all the MEL functionality is stored in script nodes local to the rig file. The nodes are set to run when a rig is opened, and works similar to sourcing a MEL file. This proved very handy for sophisticated functions, like zooTriggered. The downside to the approach was inevitable duplicate code (both rigs carried a lot of the same functionality), which turned into extra work when debugging issues with the scripts.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s