Maya,
Part Three
Organic Modeling and Animation
by Alex Alvarez
3D Design's exploration of Maya, Alias|Wavefront's character development
and film effects software, concludes with Part Three, as we look at skeleton-driven
surface deformations and body and facial animation workflow, including techniques
for animating high-res character models, sound synchronization, and dialogue.
Maya's toolset for high-resolution character deformation and animation offers
great precision, flexibility, and intuitiveness. With PowerAnimator, the performance
with such detailed geometry seriously hindered productivity, as the package
had no built-in solution for working with heavy-duty models. Setting up deformations
was slow in both set-up time and performance. There was very little room for
spontaneity as everything needed to be planned and synchronized. One had to
create low-res versions for different aspects of the model and split them into
different project files. I would animate the face in a separate module called
SoundSync, animate the head and neck rotations in PowerAnimator, the low-res
body in another project file, export the animation curves from these projects
to disk, and finally import the anim data into the high-res "hero"
file for rendering.
In this final segment, I will be concentrating on animation set-up and workflow
for my character Lanker. The tools we will be using Bindskin, Clusters, Lattices,
Sculpts, Flexors, Blendshape, SetDriven Key and Layers, all of which are features
found in the base module of Maya.
Section One: Attaching Lanker to his Skeleton
With the skeleton complete (see Part Two), we now need to set up our skeleton-driven
surface deformations. While we still have PowerAnimator style clusters (groups
of vertices), the focal point of Maya's new found character animation strengths
are the incredibly powerful and versatile methods for designing deformations.
When dealing with rigid characters, such as a robot, geometry can simply be
parented to the joints. But with deforming characters such as Lanker, clusters
must be created on the geometry, and it is the clusters that are parented to
the joints. These clusters can be groups of the geometry's vertices or groups
of a lattice's points, meaning that a lattice is first added to the geometry
and then a cluster is added to the lattice.
Figure 1. After selecting the leg geometry and joints, Bindskin is used
to create the clusters seen here, parented to the joints.
While clusters can be created manually as illustrated in Part One of this
series, Maya offers a tool called Bindskin, which automates this process. Figure
1 shows the result of selecting the hip, knee, ankle and ball joints, selecting
the leg geometry and invoking Skinning/Bindskin. Figure 2 shows the result of
selecting the same joints, but instead of selecting the geometry, a lattice
was first assigned to the geometry and the lattice was bound. The options chosen
within the Bindskin dialogue box were SelectedJoints and Closest Point binding.
The latter option is telling Bindskin to create clusters for us on the selected
surface(s) or lattice where one cluster is created per bone. The points selected
by the software for inclusion simply depends on proximity. This first step gives
us a good start, yet there are a few issues remaining such as tucking, bulging
and case specific deformations such as the bulging that may occur in the thigh
if Lanker sat down in a chair. An important note at this point is that one must
be able to get the skeleton back into the pose it was in when bound for later
editing reasons. The techniques for storing skeletal poses illustrated in Part
Two of the series are useful for this purpose.
Figure 2. Instead of attaching the leg geometry directly, a lattice was
created first, which itself was bound to the skeleton with Bindskin.
With the basic attachment of the leg geometry to the skeleton, it is important
to understand what happened and how to edit this initial phase. By opening the
hypergraph, it is evident that clusters were created on the geometry and parented
to the joints. But the thing to note is that the clusters that are created by
Bindskin are not weighted, thus when we bend the leg the knee deformation looks
inaccurate. Figure 3 shows the effect of selecting the hip joint and invoking
Deformations/Edit Membership so that we can view the clusters and modify which
joint clusters the vertices belong to. The vertices highlighted in yellow are
associated with the selected joint, while the other vertices are color coded
so that we can distinguish how the clusters were made. We can now add/remove
vertices from the selected joint by shift/control dragging around the target
vertices. Once we are happy with the cluster allocations, we can continue to
fine tune the deformation by now editing weights using the Set Editor as shown
in Part One of the series. Figure 4 shows the knee with the default weights
of 1, and then with the vertices near the nearcap weighted to .5.
Figure 3. The Edit Membership tool is used to quickly add and remove
members from clusters and lattices.
Figure 4. The leg on the left shows the clusters after Bindskin. On the
right, the vertices near the knee have had their cluster weights modified to
50% to improve the appearance of the knee deformation.
While we could continue editing vertex weights one by one, this can clearly
become a time consuming process as it was in PowerAnimator. Maya, however, offers
some flexibility at this point. The next thing we can do to the leg is to add
flexors. Flexors are created by selecting a joint and choosing Skinning/Create
Flexor, which will automatically open a dialogue box seen in Figure 5. (Note:
It is important to make sure the skeleton is in its "bind pose" before
adding flexors). There are three types of flexors that can be added: Lattice,
Sculpt and Joint Cluster. These can be added to either a joint or bone, where
if a joint is selected, the bone that descends down from it would be the modified
bone. A joint flexor is used for knees, elbows and so on, while a bone flexor
is used for biceps, triceps, etc.
Figure 5. The knee joint is selected, Skinning/Create Flexor is invoked,
and the dialogue box appears. Flexors are used to interactively design bending
and bulging.
What happens when a JointCluster flexor is added is that the weights of the
pre-existing clusters are modified (i.e., no new object is created) so that
they fade through the joint. Figure 6 illustrates this as the weights of the
vertices are no longer all at 1. The enveloping of where the fading begins and
ends can be controlled by selecting the "J" now visible at the joint
and editing its attributes in the attribute editor.
Figure 6. A joint Cluster Flexor is selected and edited using the ShowManipulators
tool, to control the fading of cluster weights at the knee.
Sculpt flexors are no different than manually adding a Sculpt deformer to
the geometry and then parenting this Sculpt to the joint. The technique to use
when the Sculpt flexor is created is to use Set Driven key so that as the joints
bend, the Sculpt flexor(s) becomes more pronounced by either transforming, scaling,
rotating or changing strength and falloff. This can be very effective for elbows
and kneecaps, where a few sculpts could be added to create the knee cap definition
that appears as the knee bends as in Figure 7.
Figure 7. Sculpt Flexors are used to design the knee deformation by creating
a relationship between them and the knee joint's rotation. This is accomplished
using Set Driven Key.
The last flexor is the lattice, where a new lattice is created around the selected
joint or bone. When first created, the lattice may appear a bit oversized for
the geometry, however, that is the reason for the "position the flexor"
option when creating a lattice flexor. When this option is checked, the lattice
can be moved, rotated and scaled to better suit the geometry as in Figure 8.
The nice thing about lattice flexors is that the equivalent of Set Driven Key
is built in. When we bend the knee, for example, we can see that the lattice
has already modified our deformation by smoothing out the affected area. But
if we select the lattice, its unique attributes such as "rounding"
and "creasing" will appear in the channel box for editing. If we modify
these to interactively design the deformation as in Figure 9, when we straighten
the leg back to its "bind pose," the flexor assumes its original,
neutral, shape. We could, however, tweak the effect even more by layering some
Set Driven Key relationships between the knee joint's rotation and the actual
position of the lattice flexor's points. A useful tip at this point is that
if there are not enough divisions in the lattice flexor, its unique attributes
may not work. At least four divisions must exist in S,T, and U (the three directions
for lattice divisions) for all rounding, creasing, etc. to work.
Figure 8. A lattice Flexor can be translated, rotated, and scaled to
better position it in relation to the geometry.
Figure 9. Lattice Flexors have unique attributes that can be modified
when the leg is bent. When the leg is straightened, the lattice will assume
its original shape.
Once the clusters, vertex weights, and flexors have been added and tweaked,
the next level of control that can be added is Blendshape. As shown in Part
One, Blendshape is a morphing tool that offers a high level of interactivity
and flexibility. Figure 10 shows copies of each of the three surfaces that make
up the leg moved over to the side. A lattice has been added to all three surfaces
with enough divisions to have a decent amount of control over the surfaces.
The choice of a lattice is so that we can avoid breaking our seams. Each of
these three copies have also been set as Blendshape targets for the bound originals
by using Deformations/Blendshape. While we still have yet to modify the copies,
the Blendshape morph sliders for each surface has been moved up to one. At this
point, if we modify the duplicates, the original bound geometry will deform.
Thus we can use these Blendshape targets for a wide variety of deformation modifications.
A very important note, however, is to change the order of deformations. Since
we created the Blendshape targets after binding the leg geometry to the skeleton,
the Blendshapes will be calculated after the clusters which are parented to
the joints. What we want, however, is for them to be calculated first. Thus
the leg geometry morphs and then is bent by the skeleton. Otherwise, the leg
will bend and then slide back to its original straight position when the Blendshape
is activated. The order of deformation is modified by selecting the affected
geometry, clicking on the Inputs button on the Status line and choosing Complete
list from the pull down menu. This will open a window that lists all the nodes
that affect the geometry. By middle mouse button dragging one item to the position
of another, their order will be modified. The item at the top of the list is
calculated last. Figure 11 shows what type of effects can be achieved with this
technique.
Figure 10. Duplicates of the leg geometry are set as BlendShape targets
for morphing. A lattice is then placed around the copies for deformations that
maintain the seams.
Figure 11. With the Blendshape sliders at full for all three leg surfaces,
the lattice on the target surfaces is tweaked.
With the legs now set up, the same techniques are used for Lanker's arms and
fingers. The regions that become a bit more tricky, however, are the pelvis,
shoulder and knuckles. The reasons for this is that these regions contain more
than one surface, which can easily separate at the seams if care is not taken.
When a deformation needs to occur in this type of situation, the easiest solution
is to use lattices as they will maintain the relationship between adjacent surfaces.
However, it is important to make sure that any part of the surfaces that affect
the seam in any way are included in this lattice. Figure 12 shows a lattice
that has been added to the pelvic region, including the vertices of the torso
below the waist, the blend surfaces that connect the pelvis to the legs, and
the top two rows of vertices on each leg. It is also important to have enough
divisions on this lattice so that the left and right hip joints can be associated
with the respective halves of the lattice. At this point, we can now select
the left hip joint, the left half of the lattice points and invoke Bindskin.
This has now created a cluster of those points and parented it to the joint.
Bending the leg at this point gives as an undesirable result, however, as seen
in Figure 13. What we now must do is edit the weights of the lattice points
in the cluster using the Set Editor, so that the lattice points at the middle
and top edges have a weight of zero, and then fade up to one towards the center.
After editing the weights a bit, a much smoother deformation can be achieved
(Figure 14).
Figure 12. A lattice is added to the pelvic region of the torso, the two
hip blend surfaces, and the three top rows of vertices (hulls) on each leg.
Figure 13. The left half of the lattice points were attached to the left
hip joint using BindSkin. The deformation looks rough, however, as the lattice
point cluster weights are all at 100% by default.
Figure 14. As the weights of the lattice points in the cluster bound to
the hip joint are faded from zero at the waist down to one, the deformation
is easily improved.
The above technique, while generating a decent result, is not perfect. The
final solution to this is to apply some SetDrivenKey relationships between the
rotation of the hip joint and the position of the lattice points. The methodology
for setting up SetDrivenKey was illustrated in Part Two for forward kinematic
controls and would be the same here. The hip joint would be the "driver"
and the lattice points would be the "driven." The great thing about
this is how multiple relationships can be generated between the same driver
and driven. Thus when the hip rotates in the positive X direction, the lattice
points can assume one shape, while when the hip rotates in the negative X direction,
they can do something completely different.
With the legs and hip region finished, the rest of the character can be set
up. The above lattice technique is good for the shoulders, knuckles and head/neck
region. Figure 15 shows various areas of Lanker's body with all the lattices
visible and tweaked. When animating, however, it is nice to turn off the display
of the lattices to clean up the window by using Display/Hide/Deformers/Lattices.
Figure 15. Lanker with all of his lattices visible.
Continued on page 2 >>