|
Features

Giving
Life to Ratchet & Clank:
Enabling Complex Character Animations by Streamlining Processes
End
of Cycle
Like
all character-driven projects, Ratchet & Clank presented
our animation team with a unique set of artistic and technical challenges.
Our artistic philosophy was built on the understanding that our
characters were the instruments though which a player would experience
our universe. We knew that in meeting these challenges, our puppets
would transcend mere game space and become the entities that our
players would identify with, vilify, and even personify.
However,
this philosophy needed to be coupled with practical methodology
if it was to see our project to its conclusion. From this necessity
grew our testing practices, MEL shortcuts, and real-time animation
procedures. Throughout production, these methods removed many of
the barriers that would otherwise have obstructed the artistic efforts
of our animators.
As
the Insomniac team cycles into our next project, we continue to
refine and expand upon the systems and procedures we developed during
Ratchet & Clank. Though our procedures continue to evolve,
our underlying goals remain unchanged. For in the end, we can only
prove a technology's worth by an audience's response to our characters.
|
|
Listing
2. Sample code from the Driven Key Generator.
// The "if"
gate checks for changed X-Translation values
// between the Default and Posed frames.
if ($txa
!= $txb)
{
// Sets
the Driver Attribute and the Current Joint's
// X-Translation to their Default Values;
// Sets a Driven Key Frame for the Default Values.
setAttr
$atnm $dr0;
setAttr ($current + ".tx") $txa;
setDrivenKeyframe -currentDriver $atnm -attribute
translateX $current;
// Sets
the Driver Attribute and the Current Joint's
// X-Translation to their Posed Values;
// Sets a Driven Key Frame for the Posed Values.
setAttr
$atnm $dr1;
setAttr ($current + ".tx") $txb;
setDrivenKeyframe - currentDriver $atnm -attribute
translateX $current;
// Prints
command summary to the Script Editor for
// easy reference.
print
($current + ": TX has been keyed for slider
value 0: " + $txa + " and slider value 10: "
+
$txb); print " \n";
}
// In this
loop segment, $current is the current joint,
// and $atmn is the attribute name. $dr0 and $dr1 represent
// Default and Posed Driver values. $txa & $txb are the
// Default and Posed X-translation values, respectively.
// (Note: All flags are listed in their long forms.)
|
 |
 |
 |
|