こちらのサイトを参考に、命名を行うプログラムとノード接続を行うプログラムを書きました。
https://inopoa.com/maya-rigging-fk-ik-blend
脚が大量にある動物のセットアップ等に便利です。
#まだ命名していないジョイントの親を選択して実行すると、ik版ジョイントとfk版ジョイントをコピーし命名してくれる
import maya.cmds as cmds
nest_len = []
shape = []
selectobj = []
selectobj = cmds.ls(sl=True,flatten=True)
#お好きな命名を入力してね!!
jntname = '_Jnt'
ikname = '_ik_Jnt'
fkname = '_fk_Jnt'
#親のジョイントのみを選び,_Jntに改名
list_relative = []
for obj in selectobj:
nest_len.append(selectobj[0])
list_relative = cmds.listRelatives(selectobj,ad=True)
for jnt in list_relative:
nest_len.append(jnt)
cmds.select(selectobj[0])
nest_len.sort()
for jntobj in nest_len:
cmds.rename(jntobj,jntobj+jntname)
#ik
cmds.select(obj+'_Jnt')
shape = cmds.duplicate()
cmds.select(shape[0])
shape.sort()
for i in range(len(nest_len)):
if i==0:
cmds.rename(shape[i],nest_len[i]+ikname)
else:
cmds.rename(nest_len[i-1]+ikname+"|"+shape[i],nest_len[i]+ikname)
#そしてfk
cmds.select(obj+jntname)
shape = cmds.duplicate()
cmds.select(shape[0])
for i in range(len(nest_len)):
if i==0:
cmds.rename(shape[i],nest_len[i]+fkname)
else:
cmds.rename(nest_len[i-1]+fkname+"|"+shape[i],nest_len[i]+fkname)
#Ctrl押しながら全てのoo_ik_Jnt、 oo_fk_Jnt、 oo_Jntを選択して実行すると、スイッチにノードが繋がれる
import maya.cmds
#任意の命名規則(後方一致)
ikname = '_ik_Jnt'
fkname = '_fk_Jnt'
jntname = '_Jnt'
switchobj = 'FK_IK'
switchattr = 'FK_to_IK'
#各ノードの配列
allik = []
allfk = []
alldefjnt = []
bc = []
alljnt = cmds.ls(type='joint',sl=True,flatten=True)
for jnt in alljnt:
if jnt.endswith(ikname):
allik.append(jnt)
elif jnt.endswith(fkname):
allfk.append(jnt)
elif jnt.endswith(jntname):
alldefjnt.append(jnt)
sortedallik = sorted(allik)
sortedallfk = sorted(allfk)
sortedalldefjnt = sorted(alldefjnt)
for i in range(len(sortedallik)):
bc.append(cmds.shadingNode('blendColors',asUtility=True))
cmds.connectAttr(sortedallik[i]+'.rotateX',bc[i]+'.color1R')
cmds.connectAttr(sortedallik[i]+'.rotateY',bc[i]+'.color1G')
cmds.connectAttr(sortedallik[i]+'.rotateZ',bc[i]+'.color1B')
cmds.connectAttr(sortedallfk[i]+'.rotateX',bc[i]+'.color2R')
cmds.connectAttr(sortedallfk[i]+'.rotateY',bc[i]+'.color2G')
cmds.connectAttr(sortedallfk[i]+'.rotateZ',bc[i]+'.color2B')
cmds.connectAttr(bc[i]+'.outputR',sortedalldefjnt[i]+'.rotateX')
cmds.connectAttr(bc[i]+'.outputG',sortedalldefjnt[i]+'.rotateY')
cmds.connectAttr(bc[i]+'.outputB',sortedalldefjnt[i]+'.rotateZ')
for node in bc:
cmds.connectAttr(switchobj+'.'+switchattr,node+'.blender')
MAYAのPythonスクリプトエディタに張り付け→全て実行
またはMAYAのPythonスクリプトエディタに張り付け→すべて選択し中ボタンドラッグでシェルフに登録
してご利用ください。