We relied on motion capture for the character animation. We developed a somewhat rough pipeline on our previous projects, which was suitable to quickly produce scenes, and we already had enough experience to manage the mocap session and the talent. It is very important to plan everything ahead, and even rehearse with the actor if possible, as mocap rates are generaly quite high. We also suggest to find talent who can act a bit, but does not overact; and keep hitting the mocap studio until they deliver clear and noise-free data.
Robix created the vehicle rigs using some custom MEL tools to set up expressions for the wheels and chain links. Vehicles also had proxy versions integrated into the rig, to speed up the animation, as calculating all the wheel movement slowed down everything to a crawl.
The character rigging was quite simple, and any modification of the mocap data had to rely on FK keyframe animation. To speed up the rigging, we wrote a few MEL scripts to build skeletons with properly set joint orientations and rotation orders; and to add eye and finger controls. Every character had two versions: a low-poly proxy for animation and a high res skinned version. Animation transfer was through baking joint rotation and animation data, and loading it on the high res rig. This allowed us to complete animated scenes before the high res rigs were ready, removing some dependencies from the production. The skeleton was relatively simple, with additional roll joints on each limb to spread out the deformations. Skinning was a combination of smooth and rigid binding; we created sets for the vertices of the arms, legs, torso and head and bound them individually to the selected joints. Limbs used rigind binding, because flexors are quick and easy to setup and deliver good deformations; however the shoulders and hips are better to use smooth binding, and when needed, influence objects. Hands shared the same mesh, so we simply transfered smooth skin weights for each character once we painted them for the first character.
In retrospect, this pipeline has several inefficiencies, as the baked animation will add keys for every frame, on every keyable attribute - which slows the scene down a lot. A better solution is to write scripts to attach the high res rig to the proxy rig, using point and orient constrains, as this will always be faster.