The Backbone of our Animation System
Hello! I’m Laura - the technical artist at Chance Agency. I developed our 2D master character rig for Neo Cab. A “rig” is like a digital puppet made of a hierarchical set of dozens of “bones”, with layered images attached. We use this rig to animate every aspect of our characters- it’s what makes Vincent’s (our Art Director) hand-painted character art feel alive.
Our main goal was for our pax (passengers, in the parlance of rideshare drivers) to visibly express their emotions and certain reactions during their conversations with Lina.
We also wanted the pax to constantly move, or idle, so they don’t feel static.
When weighing our software options, we narrowed it down to two contenders - Spine & Live2D. We were inspired by the character animations in Wispfire’s Herald, an interactive period drama. Using Live2D, they breathed so much life into these portraits with their moving features and smooth head turns. They wrote a great series of posts detailing how they set up one of their characters. With this style in mind, we started comparing Live2D and Spine. We ultimately decided that the skeleton animation in Spine was more appropriate for us because we had to an unusually large cast of characters to create, and sharing a “master” skeleton across all of our characters felt easier in Spine. I’m really glad we explored Live2D, though- we carried some of that animation style over to our Spine workflow (with a few crazy hacks!)
Once we decided to use Spine, we got to work developing our master rig. First, Vincent illustrates the characters in Photoshop. Each piece is drawn on a separate layer so we can export our assets using Esoteric’s Photoshop to Spine script.
We developed our master rig (we call her Neo Zero) through lots of trial and error. The bones are positioned on the face and body in specific areas so we can make the character feel like it has depth and life.
Meshes and weights are also very important to our rigs. Converting an asset to a mesh and binding bones to that mesh allows us to deform/stretch it freely. This is how we manipulate the eyebrows, eyelids, face, body, hair, and mouth (the hardest one!).
We wanted our characters to be capable of “acting” with their face and their body language, independently, so we developed a skeleton with a few different bone sets. For example, the character’s face may read as ‘happy’, but their body reads as 'drunk’… and we need to be able to transition between all these possible states as the story requires. Spine lets you set up various tracks so you can layer animations in Unity. There is a track hierarchy, so a bone keyed on a higher track overrides that same bone that’s used on a lower track. Our system takes this into account and we have certain bones that are meant for idles and others that are meant for emotes. To keep track of this system, we developed a naming structure to differentiate bone types (like root, exp, and def).
We also intentionally override certain bones when we want to interrupt an ongoing idle or emote with a time-sensitive react animation.
After we made it past the basic rig setup, we experimented with a few more complex features. We established a custom constraint system so we’re able to move each character’s head with one master bone. These constraints also enable us to parallax parts of their face, adding a feeling of depth to an otherwise 2D character. We constrain that master bone to custom paths so we can move the head around smoothly. This is how we achieved that Live2D look we were going for. It took a lot of work, and it’s probably the part of the rig I’m most excited about.
Next, we experimented with creating a new character based on Zero’s skeleton- and we were pleasantly surprised with our results! Everything translated over with minimal tweaking- even the animations! That was very exciting.
Our pax setup process in a nutshell:
- Start with our established Zero rig, which has a base set of emotes, idles, and react animations.
- Export the assets of the new pax into a new image folder. The asset names have to be exactly the same for all of the pax so we don’t break the image references.
- Reposition the rig bones based on a guide image of the new Pax’s design. Not all pax are the same height or build, so we usually need to shimmy the bones around before positioning the assets for real.
- Once the bones are in a good spot, move the assets into place (following the guide image).
- Build the meshes of the assets we need to deform. This step (and the next one) usually takes the most time.
- Bind the deformation bones to the meshes, then paint the weights.
- Hook up the transform and path constraints, then fill in those values.
- We then verify that the base animation set transferred over smoothly to the new pax. Since all faces are different, we always need to spend time cleaning up certain things (especially those damn mouths), but it’s so helpful to have a starting point instead of having to start from scratch animating each character.
Now that we have a solid master rig, our process is pretty efficient. It usually takes a couple days to rig a new character and then some additional time to customize animations.
I hope this was an informative overview! There’s so much to talk about, so we’ll be posting more deep dives in the near future. Thanks for checking this out!