In January I was focusing my attention to build a deformation template to deal with a very precise effect : bendy limbs.
As usual my starting point was the existing tools in maya :
- motion path ,
- Ik spline solver,
- wire and wrap deformer
At one time I was hitting a severe limitation with my python plug-ins: problematic speed with deformer and locator. It was time to start using the C++ maya API and play with its MStatus class…
This video demonstrates some results of this experiment where I learn more about OpenGL calls , locator, deformer and bindPose .
At the current time with these tools we can stretch elements into an infinite tube by adding more points to the driving curve and more importantly adding subdivision or switching topology of the deformed mesh.
1) Spline, path and cartoon rubber-hose limb:
In my eyes bendy limbs is one the main characteristic of cartoony animation.
( a little example where I tie a knot with an arm )
This effect can be classified under the “exaggeration” principle of animation. From these principles we can observe that most of these rules are derived from physics, drawing/composition and acting.
I always though that it is quite short sighted to reduce the animation world to cartoon animation. Lots of movie do not abide by theses rules ( like some stop motion animation ) and in the same way, smooth animation does not guaranty the quality of a movie.
Cartoon animation is a popular, respectable genre that has the most audience and is the most widespread throughout the world. In my own country, this phenomenon goes as far as to induce most of people in the false belief that all animated movie are cartoon movie ( even sometimes worst : that all pictures were drawn ).
After several production where we need to build 3d character puppets that were able to display curvy limbs I though it would be important to have a more streamlined way to tackle this task.
Above we can see two examples of this effect:
- For Mr fantastic we have a somewhat realistic treatment of the arm deformation,the arm elasticity preserve the underlying arm anatomy.
- The second creature approachs this problem the other way around: the arm design was simplified in order to emphasize its personality ( laziness, clumsiness ,etc… )
To achieve this goal we have several tools at our disposal . One of the most common way to do it is to bind an object points to a hierarchy of joints with the help of a smooth skin deformer. This step will represents the deformation layer of our puppet rig. The next step in this process is to control the behavior of these joints :
- a splineIK solver can be used to constraint each transform node along the path of a nurbs curve and to compute how each element can twist smoothly .
- or a collection of nodes can be created manually to tailor a more specific behavior : the motionPath or the pointOnCurveInfo node enable us to retrieve position , normal at a parameter value and combine these informations to orient and glue an object on a spline.
It is important to note that you don’t need to animate or rig the joints involved in the deformation layer, at a later stage thing becomes more easy if elements are isolated by function , for example changing part of a deformation structure will not interfere with a puppet already animated if we have different hierarchies .
2) An indepth look at maya motionPath implementation:
3) Robust space computation with a splineMatrix:
( to be continued …)