3DCGbook

映像プロダクションに所属しています。主に毎日のアウトプットを配信していこうと思います。

左側のDrivenKeyの数値をコピーして右側へ

例えば、「右ひじのDrivenKeyFrameを左ひじのDrivenKeyFrameの数値と同じにする。」
といったスクリプトを作ってみた。

条件としては、
既に右ひじと左ひじにはDrivenKeyFrameが設定してあるということ。
要するにanimCurveUAが繋がっている状態である。

ということはキーフレーム数が一緒でなければならない。
別にこのスクリプトは、
「左手に入っているDrivenKeyを見て右手にDrivenKeyを新規で設定する」
というものではない。

あくまで微調整用に左の数値を右に転送するといった役割を果たすだけである。
なので使い道は限定される。

ドリブンキーをオートで全ての部位に構築した後の微調整程度に使うくらい。
但しタンジェントまではコピーされないので改良が必要。

利用は自己責任で。

import maya.cmds as cmds

#左のノードを選択
selectNodes = cmds.ls(sl=True)

#ノードが存在するかの確認用にアトリビュートのリストを作成
attrs = ('translateX','translateY','translateZ',
		 'rotateX', 'rotateY', 'rotateZ',
		 'scaleX', 'scaleY', 'scaleZ')
for node in selectNodes:
	for i in attrs:
		if cmds.objExists('%s_%s' % (node,i)):#ノード存在を確認
			animCurveUA = '%s_%s' % (node,i)	
			indexValueL = cmds.keyframe(animCurveUA,q=True,indexValue=True) #index取得
			indexValueR = cmds.keyframe(animCurveUAR,q=True,indexValue=True)
			if len(indexValueL) == len(indexValueR):# index数が同じか確認
				for j in indexValueL:
					# コピペ部分
					timeVal =  cmds.keyframe(animCurveUA,q=True,index=(j,j),fc=True)[0]
					value   =  cmds.keyframe(animCurveUA,q=True,index=(j,j),vc=True)[0]
					cmds.keyframe(animCurveUAR,e=True,index=(j,j),fc=timeVal,a=True,o='over')
					cmds.keyframe(animCurveUAR,e=True,index=(j,j),vc=value,a=True,o='over')