hey
so i made some updates to that
it now uses the $characterName global proc so you can just run this script after you finish rigging with final rig
it adds indavidual lateral finger controle to the fingers
adds a head controle for the last joint in the head
adds a twist joint to the forarm and a twist bias controle on the hand to specify how much twist is in the wrist and how much is in the forarm
thats pretty much it
everything else should work in Final rig as it normally would
// final rig tweaks
//
//
// ifyou ran final rig a while ago and want to add this stuff in uncoment the next line
// and add your prefix name
// string $characterName = "yourprefixhere"
//
// Jeremy Sahlman jeremy@donkeycake.com
//////////////////////////////////////////////
//////////////////////////////////////////////
// add indavidual lateral controles to fingers
//////////////////////////////////////////////
//////////////////////////////////////////////
//disconect finger spread controle
//Right
disconnectAttr ($characterName +"_JT_DRV_R_Index_Hi_rotateX.output ")($characterName +"_JT_DRV_R_Index_Hi.rotateX");
disconnectAttr ($characterName +"_JT_DRV_R_Middle_Hi_rotateX.output ")($characterName +"_JT_DRV_R_Middle_Hi.rotateX");
disconnectAttr ($characterName +"_JT_DRV_R_Ring_Hi_rotateX.output ")($characterName +"_JT_DRV_R_Ring_Hi.rotateX");
disconnectAttr ($characterName +"_JT_DRV_R_Pinky_Hi_rotateX.output ")($characterName +"_JT_DRV_R_Pinky_Hi.rotateX");
//Left
disconnectAttr ($characterName +"_JT_DRV_L_Index_Hi_rotateX.output ")($characterName +"_JT_DRV_L_Index_Hi.rotateX");
disconnectAttr ($characterName +"_JT_DRV_L_Middle_Hi_rotateX.output ")($characterName +"_JT_DRV_L_Middle_Hi.rotateX ");
disconnectAttr ($characterName +"_JT_DRV_L_Ring_Hi_rotateX.output ")($characterName +"_JT_DRV_L_Ring_Hi.rotateX");
disconnectAttr ($characterName +"_JT_DRV_L_Pinky_Hi_rotateX.output ")($characterName +"_JT_DRV_L_Pinky_Hi.rotateX");
//delete the attre
//Righ
catch (`deleteAttr -attribute "FingersSpread" ($characterName +"_RhandCtrl")`);
//Left
catch (`deleteAttr -attribute "FingersSpread" ($characterName +"_LhandCtrl")`);
//add the new attre
//Right
addAttr -ln IndexLat -at double -min -10 -max 10 -dv 0 ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_RhandCtrl");
setAttr -e -keyable true ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_RhandCtrl.IndexLat");
addAttr -ln MiddleLat -at double -min -10 -max 10 -dv 0 ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_RhandCtrl");
setAttr -e -keyable true ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_RhandCtrl.MiddleLat");
addAttr -ln RingLat -at double -min -10 -max 10 -dv 0 ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_RhandCtrl");
setAttr -e -keyable true ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_RhandCtrl.RingLat");
addAttr -ln PinkyLat -at double -min -10 -max 10 -dv 0 ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_RhandCtrl");
setAttr -e -keyable true ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_RhandCtrl.PinkyLat");
//Left
addAttr -ln IndexLat -at double -min -10 -max 10 -dv 0 ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_LhandCtrl");
setAttr -e -keyable true ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_LhandCtrl.IndexLat");
addAttr -ln MiddleLat -at double -min -10 -max 10 -dv 0 ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_LhandCtrl");
setAttr -e -keyable true ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_LhandCtrl.MiddleLat");
addAttr -ln RingLat -at double -min -10 -max 10 -dv 0 ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_LhandCtrl");
setAttr -e -keyable true ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_LhandCtrl.RingLat");
addAttr -ln PinkyLat -at double -min -10 -max 10 -dv 0 ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_LhandCtrl");
setAttr -e -keyable true ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_LhandCtrl.PinkyLat");
//add to charector set
character -forceElement ($characterName +"_TopControl") ($characterName +"_RhandCtrl.IndexLat") ($characterName +"_RhandCtrl.MiddleLat") ($characterName +"_RhandCtrl.RingLat") ($characterName +"_RhandCtrl.PinkyLat") ($characterName +"_LhandCtrl.IndexLat") ($characterName +"_LhandCtrl.MiddleLat") ($characterName +"_LhandCtrl.RingLat") ($characterName +"_LhandCtrl.PinkyLat") ;
// do set driven keys //
////Right
//
//middle
float $RMiddleLat = `getAttr ($characterName +"_JT_DRV_R_Middle_Hi.rotateX")`;
setAttr ($characterName +"_RhandCtrl.MiddleLat") 10;
setAttr ($characterName +"_JT_DRV_R_Middle_Hi.rotateX") ($RMiddleLat+20);
setDrivenKeyframe -cd ($characterName +"_RhandCtrl.MiddleLat") ($characterName +"_JT_DRV_R_Middle_Hi.rotateX");
setAttr ($characterName +"_RhandCtrl.MiddleLat") -10;
setAttr ($characterName +"_JT_DRV_R_Middle_Hi.rotateX") ($RMiddleLat-20);
setDrivenKeyframe -cd ($characterName +"_RhandCtrl.MiddleLat") ($characterName +"_JT_DRV_R_Middle_Hi.rotateX");
setAttr ($characterName +"_RhandCtrl.MiddleLat") 0;
//
//ring
float $RRingLat = `getAttr ($characterName +"_JT_DRV_R_Ring_Hi.rotateX")`;
setAttr ($characterName +"_RhandCtrl.RingLat") 10;
setAttr ($characterName +"_JT_DRV_R_Ring_Hi.rotateX") ($RRingLat+20);
setDrivenKeyframe -cd ($characterName +"_RhandCtrl.RingLat") ($characterName +"_JT_DRV_R_Ring_Hi.rotateX");
setAttr ($characterName +"_RhandCtrl.RingLat") -10;
setAttr ($characterName +"_JT_DRV_R_Ring_Hi.rotateX") ($RRingLat-20);
setDrivenKeyframe -cd ($characterName +"_RhandCtrl.RingLat") ($characterName +"_JT_DRV_R_Ring_Hi.rotateX");
setAttr ($characterName +"_RhandCtrl.RingLat") 0;
//
//Index
float $RIndexLat = `getAttr ($characterName +"_JT_DRV_R_Index_Hi.rotateX")`;
setAttr ($characterName +"_RhandCtrl.IndexLat") 10;
setAttr ($characterName +"_JT_DRV_R_Index_Hi.rotateX") ($RIndexLat+20);
setDrivenKeyframe -cd ($characterName +"_RhandCtrl.IndexLat") ($characterName +"_JT_DRV_R_Index_Hi.rotateX");
setAttr ($characterName +"_RhandCtrl.IndexLat") -10;
setAttr ($characterName +"_JT_DRV_R_Index_Hi.rotateX") ($RIndexLat-20);
setDrivenKeyframe -cd ($characterName +"_RhandCtrl.IndexLat") ($characterName +"_JT_DRV_R_Index_Hi.rotateX");
setAttr ($characterName +"_RhandCtrl.IndexLat") 0;
//
//Pinky
float $RPinkyLat = `getAttr ($characterName +"_JT_DRV_R_Pinky_Hi.rotateX")`;
setAttr ($characterName +"_RhandCtrl.PinkyLat") 10;
setAttr ($characterName +"_JT_DRV_R_Pinky_Hi.rotateX") ($RPinkyLat+20);
setDrivenKeyframe -cd ($characterName +"_RhandCtrl.PinkyLat") ($characterName +"_JT_DRV_R_Pinky_Hi.rotateX");
setAttr ($characterName +"_RhandCtrl.PinkyLat") -10;
setAttr ($characterName +"_JT_DRV_R_Pinky_Hi.rotateX") ($RPinkyLat-20);
setDrivenKeyframe -cd ($characterName +"_RhandCtrl.PinkyLat") ($characterName +"_JT_DRV_R_Pinky_Hi.rotateX");
setAttr ($characterName +"_RhandCtrl.PinkyLat") 0;
////Left
//
//middle
float $LMiddleLat = `getAttr ($characterName +"_JT_DRV_L_Middle_Hi.rotateX")`;
setAttr ($characterName +"_LhandCtrl.MiddleLat") 10;
setAttr ($characterName +"_JT_DRV_L_Middle_Hi.rotateX") ($LMiddleLat+20);
setDrivenKeyframe -cd ($characterName +"_LhandCtrl.MiddleLat") ($characterName +"_JT_DRV_L_Middle_Hi.rotateX");
setAttr ($characterName +"_LhandCtrl.MiddleLat") -10;
setAttr ($characterName +"_JT_DRV_L_Middle_Hi.rotateX") ($LMiddleLat-20);
setDrivenKeyframe -cd ($characterName +"_LhandCtrl.MiddleLat") ($characterName +"_JT_DRV_L_Middle_Hi.rotateX");
setAttr ($characterName +"_LhandCtrl.MiddleLat") 0;
//
//ring
float $LRingLat = `getAttr ($characterName +"_JT_DRV_L_Ring_Hi.rotateX")`;
setAttr ($characterName +"_LhandCtrl.RingLat") 10;
setAttr ($characterName +"_JT_DRV_L_Ring_Hi.rotateX") ($LRingLat+20);
setDrivenKeyframe -cd ($characterName +"_LhandCtrl.RingLat") ($characterName +"_JT_DRV_L_Ring_Hi.rotateX");
setAttr ($characterName +"_LhandCtrl.RingLat") -10;
setAttr ($characterName +"_JT_DRV_L_Ring_Hi.rotateX") ($LRingLat-20);
setDrivenKeyframe -cd ($characterName +"_LhandCtrl.RingLat") ($characterName +"_JT_DRV_L_Ring_Hi.rotateX");
setAttr ($characterName +"_LhandCtrl.RingLat") 0;
//
//Index
float $LIndexLat = `getAttr ($characterName +"_JT_DRV_L_Index_Hi.rotateX")`;
setAttr ($characterName +"_LhandCtrl.IndexLat") 10;
setAttr ($characterName +"_JT_DRV_L_Index_Hi.rotateX") ($LIndexLat+20);
setDrivenKeyframe -cd ($characterName +"_LhandCtrl.IndexLat") ($characterName +"_JT_DRV_L_Index_Hi.rotateX");
setAttr ($characterName +"_LhandCtrl.IndexLat") -10;
setAttr ($characterName +"_JT_DRV_L_Index_Hi.rotateX") ($LIndexLat-20);
setDrivenKeyframe -cd ($characterName +"_LhandCtrl.IndexLat") ($characterName +"_JT_DRV_L_Index_Hi.rotateX");
setAttr ($characterName +"_LhandCtrl.IndexLat") 0;
//
//Pinky
float $LPinkyLat = `getAttr ($characterName +"_JT_DRV_L_Pinky_Hi.rotateX")`;
setAttr ($characterName +"_LhandCtrl.PinkyLat") 10;
setAttr ($characterName +"_JT_DRV_L_Pinky_Hi.rotateX") ($LPinkyLat+20);
setDrivenKeyframe -cd ($characterName +"_LhandCtrl.PinkyLat") ($characterName +"_JT_DRV_L_Pinky_Hi.rotateX");
setAttr ($characterName +"_LhandCtrl.PinkyLat") -10;
setAttr ($characterName +"_JT_DRV_L_Pinky_Hi.rotateX") ($LPinkyLat-20);
setDrivenKeyframe -cd ($characterName +"_LhandCtrl.PinkyLat") ($characterName +"_JT_DRV_L_Pinky_Hi.rotateX");
setAttr ($characterName +"_LhandCtrl.PinkyLat") 0;
//////////////////////////////////////////////
//////////////////////////////////////////////
////////// add Twist Joints to arms //////////
//////////////////////////////////////////////
//////////////////////////////////////////////
//RIGHT
//unlock wrist so it can change position when joint is added
//Right
setAttr -l false ($characterName +"_JT_DRV_R_Wrist.translateX");
setAttr -l false ($characterName +"_JT_DRV_R_Wrist.translateY");
setAttr -l false ($characterName +"_JT_DRV_R_Wrist.translateZ");
//Left
setAttr -l false ($characterName +"_JT_DRV_L_Wrist.translateX");
setAttr -l false ($characterName +"_JT_DRV_L_Wrist.translateY");
setAttr -l false ($characterName +"_JT_DRV_L_Wrist.translateZ");
//unhook effector for same reason // THESE EFFECTORS WILL NOT BE NAMED THIS WAY ALWAYS IF YOU HAVE
// // OTHER RIGS OR EFFECTORS IN THE SCENE BECAUSE THEY DON'T GET A NAME SPACE
// // FROM FINAL RIG LIKE THEY SHOULD
//Right
disconnectAttr ($characterName +"_JT_DRV_R_Wrist.translateX") effector12.translateX;
disconnectAttr ($characterName +"_JT_DRV_R_Wrist.translateY") effector12.translateY;
disconnectAttr ($characterName +"_JT_DRV_R_Wrist.translateZ") effector12.translateZ;
//Left
disconnectAttr ($characterName +"_JT_DRV_L_Wrist.translateX") effector9.translateX;
disconnectAttr ($characterName +"_JT_DRV_L_Wrist.translateY") effector9.translateY;
disconnectAttr ($characterName +"_JT_DRV_L_Wrist.translateZ") effector9.translateZ;
//Get new joint Position Y
//Right
float $RTwistYPosv = `getAttr ($characterName +"_JT_DRV_R_Wrist.translateY")`*.5;
//Left
float $LTwistYPosv = `getAttr ($characterName +"_JT_DRV_L_Wrist.translateY")`*.5;
// INSERT THE JOINTS
//RIGHT
insertJoint ($characterName +"_JT_DRV_R_Elbow");
// updateBinMembershipAfterConnection |($characterName +"_ASK_System")|($characterName +"_CharMainCtrl")|($characterName +"_backCtrl")|($characterName +"_SholderCtrl")|($characterName +"_JT_DRV_neck_Base")|($characterName +"_JT_DRV_R_Clavicle")|($characterName +"_JT_DRV_R_Shoulder")|($characterName +"_JT_DRV_R_Elbow");
rename ($characterName +"_JT_DRV_R_Twist");
//Left
insertJoint ($characterName +"_JT_DRV_L_Elbow");
// updateBinMembershipAfterConnection |($characterName +"_ASK_System")|($characterName +"_CharMainCtrl")|($characterName +"_backCtrl")|($characterName +"_SholderCtrl")|($characterName +"_JT_DRV_neck_Base")|($characterName +"_JT_DRV_L_Clavicle")|($characterName +"_JT_DRV_L_Shoulder")|($characterName +"_JT_DRV_L_Elbow");
rename ($characterName +"_JT_DRV_L_Twist");
// Place in middle
//Right
joint -e -co -r -p 0 $RTwistYPosv 0 ($characterName +"_JT_DRV_R_Twist");
//Left
joint -e -co -r -p 0 $LTwistYPosv 0 ($characterName +"_JT_DRV_L_Twist");
//hook new joint into the squash and stretch
//Right
connectAttr -f ($characterName +"_RflexBlndCLMP.outputR") ($characterName +"_JT_DRV_R_Twist.scaleY");
// updateBinMembershipAfterConnection ($characterName +"_RflexBlndCLMP");
//Left
connectAttr -f ($characterName +"_LflexBlndCLMP.outputR") ($characterName +"_JT_DRV_L_Twist.scaleY");
// updateBinMembershipAfterConnection ($characterName +"_LflexBlndCLMP");
//hook in rot to twist joint
//Right
shadingNode -n ($characterName +"_RTwistMult") -asUtility multiplyDivide;
setAttr ($characterName +"_RTwistMult.input2X") -0.5; // Set to -1 for full twist in forarm
connectAttr -f ($characterName +"_RhandCtrl_orientConstraint1.constraintRotateX") ($characterName +"_RTwistMult.input1X");
connectAttr -f ($characterName +"_RTwistMult.outputX") ($characterName +"_JT_DRV_R_Twist.rotateY");
//Left
shadingNode -n ($characterName +"_LTwistMult") -asUtility multiplyDivide;
setAttr ($characterName +"_LTwistMult.input2X") 0.5; // Set to 1 for full twist in forarm
connectAttr -f ($characterName +"_LhandCtrl_orientConstraint1.constraintRotateX") ($characterName +"_LTwistMult.input1X");
connectAttr -f ($characterName +"_LTwistMult.outputX") ($characterName +"_JT_DRV_L_Twist.rotateY");
// add bias controle incase you want all twist in wrist or in forarm
// Right
addAttr -ln Twist_Bias -at double -min 0 -max 10 -dv 5 ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_LhandCtrl");
setAttr -e -keyable true ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_LhandCtrl.Twist_Bias");
// set driven keys
setAttr ($characterName +"_LhandCtrl.Twist_Bias") 0;
setAttr ($characterName +"_LTwistMult.input2X") 0;
setDrivenKeyframe -cd ($characterName +"_LhandCtrl.Twist_Bias") ($characterName +"_LTwistMult.input2X");
setAttr ($characterName +"_LhandCtrl.Twist_Bias") 10;
setAttr ($characterName +"_LTwistMult.input2X") 1;
setDrivenKeyframe -cd ($characterName +"_LhandCtrl.Twist_Bias") ($characterName +"_LTwistMult.input2X");
// reset
setAttr ($characterName +"_LhandCtrl.Twist_Bias") 5;
// add to charector set
character -forceElement ($characterName +"_TopControl") ($characterName +"_LhandCtrl.Twist_Bias") ;
// Left
addAttr -ln Twist_Bias -at double -min 0 -max 10 -dv 5 ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_RhandCtrl");
setAttr -e -keyable true ($characterName + "_ASK_System|" + $characterName + "_CharMainCtrl|" + $characterName + "_RhandCtrl.Twist_Bias");
// set driven keys
setAttr ($characterName +"_RhandCtrl.Twist_Bias") 0;
setAttr ($characterName +"_RTwistMult.input2X") 0;
setDrivenKeyframe -cd ($characterName +"_RhandCtrl.Twist_Bias") ($characterName +"_RTwistMult.input2X");
setAttr ($characterName +"_RhandCtrl.Twist_Bias") 10;
setAttr ($characterName +"_RTwistMult.input2X") -1;
setDrivenKeyframe -cd ($characterName +"_RhandCtrl.Twist_Bias") ($characterName +"_RTwistMult.input2X");
// reset
setAttr ($characterName +"_RhandCtrl.Twist_Bias") 5;
// add to charector set
character -forceElement ($characterName +"_TopControl") ($characterName +"_RhandCtrl.Twist_Bias") ;
//
//// ADD IN HEAD CONTROLE ////
//
circle -n ($characterName +"_headCtrl") -c 0 0 -1 -nr 1 0 0 -sw 360 -r 0.115 -d 3 -ut 0 -tol 0.01 -s 8 -ch 1; objectMoveCommand;
pointConstraint -n TempPointConstraint -offset 0 0 0 -weight 1 ($characterName +"_JT_DRV_neck_Tip") ($characterName +"_headCtrl");
select -r TempPointConstraint ;
Delete ;
group -n ($characterName +"_HeadOffset") ($characterName +"_headCtrl");
parent ($characterName +"_HeadOffset") ($characterName +"_ASK_System") ;
parentConstraint -n ($characterName +"_HeadOffsetParent") -mo -weight 1 ($characterName +"_JT_DRV_neck_Hi") ($characterName +"_HeadOffset");
orientConstraint -mo -weight 1 ($characterName +"_headCtrl") ($characterName +"_JT_DRV_neck_Tip");
setAttr -lock true -keyable false ($characterName +"_headCtrl.tx");
setAttr -lock true -keyable false ($characterName +"_headCtrl.ty");
setAttr -lock true -keyable false ($characterName +"_headCtrl.tz");
setAttr -lock true -keyable false ($characterName +"_headCtrl.sx");
setAttr -lock true -keyable false ($characterName +"_headCtrl.sy");
setAttr -lock true -keyable false ($characterName +"_headCtrl.sz");
setAttr -lock true -keyable false ($characterName +"_headCtrl.v");
//
select -cl ;
print "Final Rig Tweaks Done"
bye


