Program in text version.
// Script to deform face based on imported motion capture data.
global proc movevertex(string $vertexnumber, string $mocapvnumber, float
$displacex, float $displacey)
{
string $cmd;
float $position[];
float $faceposition[];
float
$position[] = `pointPosition -w ("Mouthshape.pt[" + $mocapvnumber + "]")`;
float $faceposition[] = `pointPosition -w ("MotionFace.pt[" + $vertexnumber
+ "]")`;
$position[0] = $position[0] + $displacex;
$position[1] = $position[1] + $displacey;
select -r ("MotionFace.vtx[" + $vertexnumber + "]");
$cmd = "move -ws " + $position[0] + " " + $position[1] + " "
+ $faceposition[2];
eval($cmd);
setKeyframe ("MotionFaceShape.pt[" + $vertexnumber +"].px");
setKeyframe ("MotionFaceShape.pt[" + $vertexnumber +"].py");
}
global proc displacevertex(string $vertexnumber, float $displacex, float
$displacey)
{
string $cmd;
select -r ("MotionFace.vtx[" + $vertexnumber + "]");
$cmd = "move -r -ws " + $displacex + " " + $displacey + " 0";
eval($cmd);
setKeyframe ("MotionFaceShape.pt[" + $vertexnumber +"].px");
setKeyframe ("MotionFaceShape.pt[" + $vertexnumber +"].py");
}
global proc movechin(int $frame, float $prevchinposx, float $chinposx,
float $prevchinposy, float $chinposy)
{
float $chindisplacex;
float $chindisplacey;
if ($frame != 1)
{
$chindisplacex = ($chinposx - $prevchinposx);
$chindisplacey = ($chinposy - $prevchinposy);
}
else
{
$chindisplacex = 0;
$chindisplacey = 0;
}
print ("Chinpos[0] = " + $chinposx + " PrevChinpos[0] = " + $prevchinposx
+ "\n");
print ("Chinpos[1] = " + $chinposy + " PrevChinpos[1] = " + $prevchinposy
+ "\n");
print ("Chindisplacex = " + $chindisplacex + " Chindisplacey = " +$chindisplacey
+ "\n");
displacevertex(0,$chindisplacex,$chindisplacey);
displacevertex(1,$chindisplacex,$chindisplacey);
displacevertex(2,$chindisplacex,$chindisplacey);
displacevertex(14,$chindisplacex,$chindisplacey);
displacevertex(30,$chindisplacex,$chindisplacey);
displacevertex(40,$chindisplacex,$chindisplacey);
displacevertex(43,$chindisplacex,$chindisplacey);
displacevertex(68,$chindisplacex,$chindisplacey);
displacevertex(69,$chindisplacex,$chindisplacey);
displacevertex(81,$chindisplacex,$chindisplacey);
displacevertex(97,$chindisplacex,$chindisplacey);
displacevertex(106,$chindisplacex,$chindisplacey);
displacevertex(109,$chindisplacex,$chindisplacey);
displacevertex(110,$chindisplacex,$chindisplacey);
displacevertex(145,$chindisplacex,$chindisplacey);
displacevertex(146,$chindisplacex,$chindisplacey);
displacevertex(147,$chindisplacex,$chindisplacey);
}
global proc applyMocap(int $start, int $end)
{
int $frame;
float $chinpos[];
float $prevchinpos[];
for ($frame = $start; $frame <= $end; $frame++) {
float $prevchinpos[]
= `pointPosition -w Mouthshape.pt[9]`;
currentTime $frame;
// Upper Mouth
movevertex(111,1,0,-0.35);
movevertex(105,1,0,-0.45);
movevertex(64,2,0,-0.28);
movevertex(133,2,0,-0.3);
movevertex(66,2,0,-0.4);
movevertex(44,3,0,-0.3);
movevertex(39,3,0,-0.4);
// Right Side
movevertex(15,4,0,0);
// Lower Mouth
movevertex(42,5,0,0.3);
movevertex(41,5,0,0.4);
movevertex(135,6,0,0.3);
movevertex(136,6,0,0.4);
movevertex(108,7,0,0.25);
movevertex(107,7,0,0.35);
// Left Side
movevertex(82,8,0,0);
// Chin
float
$chinpos[] = `pointPosition -w Mouthshape.pt[9]`;
movechin($frame, $prevchinpos[0], $chinpos[0],
$prevchinpos[1], $chinpos[1]);
}
}
Return to Motion Capture.
Home. |