Here is a sample of the code:
float $distance = 3;
int $time = `currentTime -q`;
vector $oldPos = `getAttr -time ($time -3) leadObject.translate`;
vector $newPos = `getAttr leadObject.translate`;
vector $vector = $oldPos - $newPos;
float $vectorMag = mag ($oldPos - $newPos);
if ($time == 0)
{
trailObject_01_cntrlGrp.translateX = $distance * -1;
trailObject_01_cntrlGrp.translateY = 0;
trailObject_01_cntrlGrp.translateZ = 0;
string $zeroTime = "time is at zero";
//print ($zeroTime + "\n");
}
else if ($newPos == $oldPos)
{
trailObject_01_cntrlGrp.translateX = trailObject_01_cntrlGrp.translateX;
trailObject_01_cntrlGrp.translateY = trailObject_01_cntrlGrp.translateY;
trailObject_01_cntrlGrp.translateZ = trailObject_01_cntrlGrp.translateZ;
string $vectorDistance = "the new vector equals the distance";
//print ($vectorDistance + "\n");
}
else
{
while ($time > 0)
{
$newPos = `getAttr -time $time leadObject.translate`;
$oldPos = `getAttr -time ($time -1) leadObject.translate`;
$vector = $oldPos - $newPos;
$vectorMag = mag ($oldPos - $newPos);
if ($vectorMag >= $distance)
{
float $vectorScalePercent = $distance / $vectorMag;
vector $vectorScale = $vector * $vectorScalePercent;
vector $newVector = $vectorScale + $newPos;
float $placement[] = $newVector;
trailObject_01_cntrlGrp.translateX = $placement[0];
trailObject_01_cntrlGrp.translateY = $placement[1];
trailObject_01_cntrlGrp.translateZ = $placement[2];
string $setFrameMessage = "vector was set using vector from frame ";
//print ($setFrameMessage + $time + "\n");
break;
}
else
{
$distance = $distance - $vectorMag;
$time --;
//print ("vector too small, moving back a frame" + "\n");
//print ("new distance is " + $distance + "\n");
//print ("time being calculated is" + $time +"\n");
}
}
if ($time == 0)
{
$newPos = `getAttr -time 1 leadObject.translate`;
$oldPos = `getAttr -time 0 leadObject.translate`;
$vector = $oldPos - $newPos;
$vectorMag = mag ($oldPos - $newPos);
float $vectorScalePercent = $distance / $vectorMag;
vector $vectorScale = $vector * $vectorScalePercent;
vector $newVector = $vectorScale + $newPos;
float $placement[] = $newVector;
trailObject_01_cntrlGrp.translateX = $placement[0];
trailObject_01_cntrlGrp.translateY = $placement[1];
trailObject_01_cntrlGrp.translateZ = $placement[2];
}
}
This method keeps the rig from squashing and stretching when the lead control moves faster or slower; which would happen if the tail controls were just placed at the lead controls location, minus the desired amount of frames.
No comments:
Post a Comment