This section is mainly to show how I work. Most these scripts are used as elements of larger rig scripts.
"""
this is the rig for the kingsley character(a biped, the one seen on my reel)
at the bottom of this file is just scratch work from the actual development process
in maya. I like to save that stuff here incase there is something valuable I can
maybe use later.
"""
import maya.cmds as cmds
import dwRiggingUtilities as ru
import dwSpine as sp
import dwHandRig as hr
import dwForearmRig as fr
import dwAutoClav as ac
import dwArmRig as ar
reload(ac)
def kinRig():
print "hello kingsley"
#############################
##Left and Right Side Setup##
#############################
sideList = ["_L_", "_R_"]
for side in sideList:
#joints
armJnts = ["kin"+side+"arm01_jnt", "kin"+side+"arm02_jntBnd", "kin"+side+"arm03_jntBnd"]
acArmJnts = ["kin"+side+"acArm01_jnt", "kin"+side+"acArm02_jnt", "kin"+side+"acArm03_jnt"]
clavJnts = ["kin"+side+"clav01_jntBnd", "kin"+side+"clav02_jntBnd", "kin"+side+"clav03_jnt"]
footJnts = ["kin"+side+"leg03_jntBnd", "kin"+side+"foot01_jntBnd", "kin"+side+"foot02_jntBnd"]
revFootJnts = ["kin"+side+"revFoot01_jnt", "kin"+side+"revFoot02_jnt", "kin"+side+"revFoot03_jnt", "kin"+side+"revFoot04_jnt",]
finJnts = ["kin"+side+"thumb01_jntBnd", "kin"+side+"fingerA01_jntBnd", "kin"+side+"fingerB01_jntBnd", "kin"+side+"fingerC01_jntBnd", "kin"+side+"fingerD01_jntBnd"]
legJnts = ["kin"+side+"leg01_jntBnd", "kin"+side+"leg02_jntBnd", "kin"+side+"leg03_jntBnd"]
upperLegJnts = ["kin"+side+"upperLeg_revRot_jnt", "kin"+side+"upperLeg1_jntBnd", "kin"+side+"upperLeg2_jntBnd", "kin"+side+"upperLeg3_jntBnd"]
lowerLegJnts = ["kin"+side+"lowerLeg1_jntBnd", "kin"+side+"lowerLeg2_jntBnd", "kin"+side+"lowerLeg3_jntBnd"]
upperArmJnts = ["kin"+side+"upperArm_revRot_jnt", "kin"+side+"upperArm1_jntBnd", "kin"+side+"upperArm2_jntBnd", "kin"+side+"upperArm3_jntBnd"]
forearmJnts = ["kin"+side+"forearm1_jntBnd", "kin"+side+"forearm2_jntBnd", "kin"+side+"forearm3_jntBnd"]
#ctrls
ikArmCtrls = ["kin"+side+"ikArm_ctrl", "dra"+side+"arm_pv_ctrl"]
fkArmCtrls = ["kin"+side+"fkArm01_ctrl", "kin"+side+"fkArm02_ctrl", "kin"+side+"fkArm03_ctrl"]
shoulderCtrl = "kin"+side+"shoulder_ctrl"
fkikArmSwitchCtrl ="kin"+side+"arm_switch_ctrl"
legCtrls = ["kin"+side+"foot_ctrl", "dra"+side+"leg_pv_ctrl"]
finCtrls = ["kin"+side+"thumb_ctrl", "kin"+side+"fingerA_ctrl", "kin"+side+"fingerB_ctrl", "kin"+side+"fingerC_ctrl", "kin"+side+"fingerD_ctrl"]
mainHandCtrl = "kin"+side+"hand_ctrl"
#arm, clav, hand
ar.fkikArm(armJnts, fkArmCtrls, ikArmCtrls, fkikArmSwitchCtrl, "kin"+side+"arm")
cmds.pointConstraint(clavJnts[2], fkArmCtrls[0], n="kin"+side+"arm_fkPC")
if side == "_R_": opp = 1
else: opp = 0
ac.autoClav(armJnts, clavJnts, acArmJnts, ikArmCtrls, shoulderCtrl, "kin_C_spine_6_jntBnd", fkArmCtrls, fkikArmSwitchCtrl, "kin"+side+"ac", opp)
hr.handRigProc(finJnts, finCtrls, mainHandCtrl, 1, "kin"+side+"hand_")
legRes = ar.stretchyLeg(legJnts, legCtrls, "kin"+side+"leg")
#parent some controls to the spine jnt
cmds.parentConstraint("kin_C_spine_6_jntBnd", fkArmCtrls[0].replace("ctrl", "grp"), mo=1, n="kin"+side+"armParC")
cmds.parentConstraint("kin_C_spine_6_jntBnd", shoulderCtrl.replace("ctrl", "grp"), mo=1, n="kin"+side+"shoulderParC")
#parent finger ctrls
i=0
for fj in finJnts:
cmds.parentConstraint(fj, finCtrls[i].replace("ctrl", "grp"), mo=1, n="kin"+side+"finger_PC"+str(i))
i+=1
cmds.parentConstraint("kin"+side+"hand_jntBnd", mainHandCtrl.replace("ctrl", "grp"), mo=1, n="kin"+side+"hand_PC")
#set up arm and leg rotation distribution
fr.forearm(forearmJnts, armJnts[2], "kin"+side+"forearm")
fr.upperArm(armJnts[0], upperArmJnts, "kin"+side+"upperArm")
fr.forearm(lowerLegJnts, legJnts[2], "kin"+side+"lowerLeg")
fr.upperArm(legJnts[0], upperLegJnts, "kin"+side+"upperLeg")
#setup foot roll
cmds.delete(legRes[1])
cmds.parent(legRes[0][0], revFootJnts[3])
newJnt = ru.addJntLayer(revFootJnts[0], "jnt")
ikh = cmds.ikHandle(sj=footJnts[0], ee=footJnts[1], n="kin"+side+"foot1_ikh")
cmds.rename(ikh[1], "kin"+side+"foot1_eff")
cmds.parent(ikh[0], revFootJnts[2])
ikh = cmds.ikHandle(sj=footJnts[1], ee=footJnts[2], n="kin"+side+"foot2_ikh")
cmds.rename(ikh[1], "kin"+side+"foot2_eff")
cmds.parent(ikh[0], revFootJnts[1])
cmds.addAttr(legCtrls[0], ln="ball", at="double", dv=0)
cmds.setAttr(legCtrls[0]+".ball", k=1)
cmds.addAttr(legCtrls[0], ln="toe", at="double", dv=0)
cmds.setAttr(legCtrls[0]+".toe", k=1)
cmds.addAttr(legCtrls[0], ln="heel", at="double", dv=0)
cmds.setAttr(legCtrls[0]+".heel", k=1)
cmds.addAttr(legCtrls[0], ln="pivot", at="double", dv=0)
cmds.setAttr(legCtrls[0]+".pivot", k=1)
cmds.connectAttr(legCtrls[0]+".ball", revFootJnts[2]+".rz")
cmds.connectAttr(legCtrls[0]+".toe", revFootJnts[1]+".rz")
cmds.connectAttr(legCtrls[0]+".heel", revFootJnts[0]+".rz")
cmds.connectAttr(legCtrls[0]+".pivot", revFootJnts[1]+".ry")
cmds.parentConstraint(legCtrls[0], newJnt, mo=1, n="kin"+side+"leg_OC")
################
##Center Setup##
################
#jnts
neckChestJnts = ["kin_C_neckChest01_jnt", "kin_C_neckChest02_jntBnd", "kin_C_neckChest03_jntBnd"]
sternumJnt = "kin_C_sternum01_jntBnd"
#ctrls
neckCtrl = "kin_C_neck_ctrl"
cusSpineFKctrl = ["fkCtrl", "fkCtrl", "fkCtrl"]
cusSpineIKctrl = ["ikCtrl", "ikCtrl", "ikCtrl"]
#spine
sp.spine("kin_C_spine__Ribbon", 3, "kin_C_spine", cusSpineIKctrl, cusSpineFKctrl)
cmds.parent("kin_C_spine_FK1_grp", "kin_C_spine_IK1_grp", "kin_C_root_ctrl")
#pelvis:
cmds.orientConstraint("kin_C_pelvis_ctrl", "kin_C_pelvis_jntBnd", mo=1, n="kin_C_pelvis_OC")
#set up the sternum to dampen downward neck movement
md = cmds.createNode("multiplyDivide", n="kin_C_sternum_MD")
cond = cmds.createNode("condition", n="kin_C_sternum_cond")
cmds.connectAttr(neckChestJnts[0]+".ry", cond+".firstTerm")
cmds.setAttr(cond+".operation", 3)
cmds.connectAttr(neckChestJnts[0]+".ry", md+".input1Y")
cmds.setAttr(md+".input2Y", -.5)
cmds.connectAttr(md+".outputY", cond+".colorIfTrueR")
cmds.connectAttr(cond+".outColorR", sternumJnt+".ry")
#set up neck/chest dampens
md2 = cmds.createNode("multiplyDivide", n="kin_C_neckChest_MD1")
md3 = cmds.createNode("multiplyDivide", n="kin_C_neckChest_MD2")
cmds.setAttr(md2+".input2X", .2)
cmds.setAttr(md2+".input2Y", .5)
cmds.setAttr(md2+".input2Z", 0)
cmds.connectAttr(neckCtrl+".rx", md2+".input1X")
cmds.connectAttr(neckCtrl+".ry", md2+".input1Y")
cmds.connectAttr(neckCtrl+".rz", md2+".input1Z")
cmds.setAttr(md3+".input2X", .3)
cmds.setAttr(md3+".input2Y", .3)
cmds.setAttr(md3+".input2Y", .3)
cmds.connectAttr(neckCtrl+".rx", md3+".input1X")
cmds.connectAttr(neckCtrl+".ry", md3+".input1Y")
cmds.connectAttr(neckCtrl+".rz", md3+".input1Z")
cmds.connectAttr(md2+".outputX", neckChestJnts[0]+".rx")
cmds.connectAttr(md2+".outputY", neckChestJnts[0]+".ry")
cmds.connectAttr(md2+".outputZ", neckChestJnts[0]+".rz")
cmds.connectAttr(md3+".outputX", neckChestJnts[1]+".rx")
cmds.connectAttr(md3+".outputY", neckChestJnts[1]+".ry")
cmds.connectAttr(md3+".outputZ", neckChestJnts[1]+".rz")
cmds.connectAttr(md3+".outputX", neckChestJnts[2]+".rx")
cmds.connectAttr(md3+".outputY", neckChestJnts[2]+".ry")
cmds.connectAttr(md3+".outputZ", neckChestJnts[2]+".rz")
#parent/pointconstrain the neck ctrl
cmds.parent("kin_C_neck_grp", "kin_C_spine_FK3_ctrl")
cmds.pointConstraint("kin_C_neckChest03_jntBnd", "kin_C_neck_grp", mo=1, n="kin_C_neckPC")
#more parenting
cmds.parentConstraint("kin_C_root_ctrl", "kin_C_root_jntbnd", mo=1, n="kin_C_root_ParC")
def measureChain(jnts, name="char"):
"""
creats a distanceBetween node between each item in the passed list and puts them all into a plusminus node
essentially it creates a chain of measured links, and adds them all together
"""
i=0
pm = cmds.createNode("plusMinusAverage", n=name+"_PM")
for j in jnts:
if i == 0:
locStart = cmds.spaceLocator(n=name+str(i+1)+"_loc")[0]
cmds.pointConstraint(j, locStart, n=name+str(i+1)+"_PC", mo=0)
if not i == len(jnts)-1:
locEnd = cmds.spaceLocator(n=name+str(i+2)+"_loc")[0]
cmds.pointConstraint(jnts[i+1], locEnd, n=name+str(i+2)+"_PC", mo=0)
dis = cmds.createNode("distanceBetween", n=name+str(i+1)+"dis")
cmds.connectAttr(locStart+".translate", dis+".point1")
cmds.connectAttr(locEnd+".translate", dis+".point2")
cmds.connectAttr(dis+".distance", pm+".input1D["+str(i)+"]")
locStart = locEnd
i+=1
return pm
"""
##############
##SCRATCH#####
##############
#working iwth blendshapes
#import re
w = cmds.blendShape("blendShape1", q=1, g=1)
print w
w = cmds.getAttr("blendShape1.it[0].itg[0].tw[100]")
print w
midVerts = cmds.ls(sl=1, fl=1)
print midVerts
pattern = re.compile('(\[).*(\])')
for v in midVerts:
match = pattern.search(v)
vertNum = match.group(0)
cmds.setAttr("blendShape1.it[0].itg[0].tw"+vertNum, .5)
#working iwth blendshapes
import re
import pickle
verts = {"left":leftVerts, "right":rightVerts, "mid":midVerts}
fName = "kinHeadVerts.dat"
fPath = "../data/"
f=open(fPath+fName, "w")
pickle.dump(verts, f, 2)
f.close()
#load left verts
fName = "kinHeadVerts.dat"
fPath = "../data/"
f=open(fPath+fName, "r")
test= pickle.load(f)
f.close()
print test
for t in test:
cmds.select(test[t], add=1)
cmds.select(rightVerts, midVerts, leftVerts)
pattern = re.compile('(\[).*(\])')
for v in midVerts:
match = pattern.search(v)
vertNum = match.group(0)
cmds.setAttr("blendShape1.it[0].itg[0].tw"+vertNum, .5)
#### working with blendshapes
#working iwth blendshapes
import maya.cmds as cmds
import re
import pickle
#load left verts
fName = "kinHeadVerts.dat"
fPath = "../data/"
f=open(fPath+fName, "r")
verts = pickle.load(f)
f.close()
print verts
for t in verts:
i = 0
for v in verts[t]:
verts[t][i] = v.replace("polySurface6", "Head")
verts[t][i]
i+=1
cmds.select(verts['right'], verts['left'], verts['mid'])
#setAttr "blendShape1.SmileRoot" 1;
sideList = [["left", "right"], ["right", "left"]]
###START HERE#############
pattern = re.compile('(\[).*(\])')
sel = cmds.ls(sl=1)
i = 1
for s in sel:
print s
n = i*5
bs = cmds.blendShape((s, "Head"))[0]
cmds.setAttr(bs+"."+s, 1)
##set the middle
for v in verts['mid']:
match = pattern.search(v)
vertNum = match.group(0)
cmds.setAttr(bs+".it[0].itg[0].tw"+vertNum, .5)
##set the left and right
for side in sideList:
###set the side to 0
for v in verts[side[0]]:
match = pattern.search(v)
vertNum = match.group(0)
cmds.setAttr(bs+".it[0].itg[0].tw"+vertNum, 0)
#dup the side
dup = cmds.duplicate("Head", n=side[1]+s.replace("root", ""))
n = n * -1
print n
cmds.move(n,0,0, dup)
#set the side back to 1
for v in verts[side[0]]:
match = pattern.search(v)
vertNum = match.group(0)
cmds.setAttr(bs+".it[0].itg[0].tw"+vertNum, 1)
cmds.delete(bs)
i+=1
####END HERE
pattern = re.compile('(\[).*(\])')
for v in midVerts:
match = pattern.search(v)
vertNum = match.group(0)
cmds.setAttr("blendShape1.it[0].itg[0].tw"+vertNum, .5)
"""