Dynamics, in 3D animation, refers to a rigged system that moves secondary to a main object and usually does so automatically, where the animator can control certain characteristics to their liking. Real life representatives of this would be how the tail of a dog sways with its movement or how the feather of a quill dances as an author writes. Aspects of movement the animator would control in 3D would be things like how much the dynamic should sway and how rigid it would appear.
In Octonauts we saw the benefit for this kind of system because many of the characters have external body parts or accessories that would move in this fashion (Figure 1). In turn, it would also be beneficial for the animator as it means less work, where secondary action is now automated instead of having to be animated by hand using key frames. A system was then needed where a dynamic rig could be rolled out to any rigger that wanted a quick dynamic rig. Therefore we took advantage of 3D Studio Max’s scripting language Maxscript where we could create our own tools, with simple user interfaces, that would be easily useable studio wide.
Max has built-in dynamic features such as cloth, hair and particles that can provide great final results. However these setups can be pretty heavy on memory and often hard to manage in terms of getting specific dynamic results. So a simplified, customisable version of a dynamic rig was required.
Firstly, some experimenting was done where we tested numerous methods of dynamics and then tried to incorporate them into a controllable system. One of which was to make use of Max’s object space modifiers such as Flex combined with creating a Spline IK system , where the spline of the IK system would have the flex applied, thus driving the joints that would then deform the mesh. This worked to some extent; however we were quite restricted when it came to adding further control.
Inevitably we arrived at using Max’s built in spring controllers in order to create a dynamic system that allowed greater control. In this system a bone hierarchy is created and IK Solvers are made for each refinement. A Spring Controller was added to each of the IK solvers where there is access to extra primitive attributes such as Mass and Drag that can alter the dynamics accordingly.
Once we concluded that the Spring Controller was the method we would use for the dynamic system, we then had to automate the process of creating a rig by making a custom tool using Maxscript. This is because the process of manually creating a rig like this would be very time consuming for a rigger and it also eradicates the possibility of human error. This is the case for most rigging steps at a studio level, where tools like this one are made for re-occurring character setup procedures.
We created a simple dialog for this tool as shown (Figure 2). Firstly the rigger inserts a character name for the dynamic along with a name for the position, so there is no confusion when it comes to further work like skinning.
Then the rigger selects the amount of bones as required for the size of the dynamic area. When these are set the rigger then selects Create Dynamics Build where it will create a point helper and the set amount of bones for this rig, these are then moved and rotated into place according to the area of the mesh that will be dynamic. Once the rigger is content with the positioning of the build, the Rig Dyn! button is pressed where all the functions needed to create this spring controlled rig will run and produce a dynamic system (Figure 3).
The rig consists of an FK system that can be controlled in a normal fashion (by switching Dynamics to Off ) where the movement of the FK CTRLs will drive the spring controller, causing the bones to move secondary to the primary action. The strength of the dynamic can then be adjusted or animated accordingly via the attributes on the base CTRL. So the dynamics can appear stiff.
Please take a look at the demonstration video for a more detailed look at this setup.
Any questions, please post a comment here, I'll be happy to get back to you!