Mayaでアニメーションを読み書きする方法は幾つかあるのですが、editMAを使った読み書きをやってみます。
書き出し
exportEditsというコマンドがありました。
これを使ってやってみます。
選択したノードのアニメーションキーだけを書き出す場合であればこんな感じでしょうか。
import maya.cmds as cmds
exportFilePath = "D:/test/testAnimation.editMA"
cmds.exportEdits(
exportFilePath,
type = "editMA",
selected =True,
includeAnimation =True,
f =True
)
書き出せてますね。
//Maya ASCII 2022 scene
//Name: testAnimation.editMA
//Last modified: Sun, Dec 01, 2024 02:45:03 PM
//Codeset: 932
requires maya "2022";
requires -nodeType "aiOptions" -nodeType "aiAOVDriver" -nodeType "aiAOVFilter" "mtoa" "5.0.0.4";
requires "stereoCamera" "10.0";
currentUnit -l centimeter -a degree -t film;
fileInfo "fileCreationSource" "ExportEdits";
createNode animCurveTA -n "pSphere1_rotateY";
rename -uid "4791779C-4CEF-EF31-DECD-ABAE55E28704";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr ".ktv[0]" 1 0;
createNode animCurveTA -n "pSphere1_rotateZ";
rename -uid "C25A9C42-48BB-726B-F329-418F3E6482E3";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr ".ktv[0]" 1 0;
createNode animCurveTA -n "pSphere1_rotateX";
rename -uid "2F0CE1C7-4E03-64A2-C2E4-3DB2E72EAC1F";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr ".ktv[0]" 1 0;
createNode animCurveTL -n "pSphere1_translateZ";
rename -uid "0CF890E7-47FA-C5EE-AF1B-03854F71FA86";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr ".ktv[0]" 1 0;
createNode animCurveTU -n "pSphere1_visibility";
rename -uid "0E898703-4A7E-EF90-7FD5-8CBAC512F603";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr ".ktv[0]" 1 1;
setAttr ".kot[0]" 5;
createNode animCurveTU -n "pSphere1_scaleX";
rename -uid "792E4EB4-4BB4-E439-AC71-34B9854F8247";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr ".ktv[0]" 1 1;
createNode animCurveTU -n "pSphere1_scaleY";
rename -uid "031AEBC5-485B-42DD-E583-24AE8FE40D15";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr ".ktv[0]" 1 1;
createNode animCurveTU -n "pSphere1_scaleZ";
rename -uid "6723FC29-4730-9A89-F952-128D6A6F9C53";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr ".ktv[0]" 1 1;
createNode animCurveTL -n "pSphere1_translateX";
rename -uid "68623C64-4443-50BB-3889-8FB915D885CC";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr ".ktv[0]" 1 0;
createNode animCurveTL -n "pSphere1_translateY";
rename -uid "861B8D53-4DA8-1367-850D-C09DF3CA5B83";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr ".ktv[0]" 1 0;
connectAttr "pSphere1_rotateY.o" "<main>:pSphere1.ry";
connectAttr "pSphere1_rotateZ.o" "<main>:pSphere1.rz";
connectAttr "pSphere1_rotateX.o" "<main>:pSphere1.rx";
connectAttr "pSphere1_translateZ.o" "<main>:pSphere1.tz";
connectAttr "pSphere1_visibility.o" "<main>:pSphere1.v";
connectAttr "pSphere1_scaleX.o" "<main>:pSphere1.sx";
connectAttr "pSphere1_scaleY.o" "<main>:pSphere1.sy";
connectAttr "pSphere1_scaleZ.o" "<main>:pSphere1.sz";
connectAttr "pSphere1_translateX.o" "<main>:pSphere1.tx";
connectAttr "pSphere1_translateY.o" "<main>:pSphere1.ty";
// End of testAnimation.editMA
ネームスペース部分が に書き換わってますね。
読み込み時にnamespaceを指定するのかなぁ?
読み込み
これを読み込んでみます。
読み込みはー・・・・・importEditsとかあるのかと思ったらないですね。
とりあえずfileコマンドを覗いてみます。
関係ありそうなフラグはこれですがー
applyTo(at)
オフライン編集ファイルの読み込み時または参照時に、それを指定のリファレンスに適用します( のマップ先を決定します)。引数としてリファレンス ノード名を指定します。メイン シーン(ルート ネームスペース)のノードに編集を適用するには、「:」で渡します。 を折り畳むには(つまり、「なし」にマップするには)、"" に渡します。ファイル -i/import または -r/reference フラグと一緒に使用した場合のみ使用できます。
シンプルにやってみます。
import maya.cmds as cmds
exportFilePath = "D:/test/testAnimation.editMA"
cmds.file(exportFilePath,
type = "editMA",
i =True,
applyTo = "sampleAsset_v01RN"
)
お、無事読み込めました。
applyToで指定するのが namespaceではなく、リファレンスノード名 というのが注意ポイントですね。
シンプルなアニメーションの読み書きは割と簡単でした。
アニメーションが読み込み済みのシーンに同じアニメーションを読み込んでみます。
# Error: file: D:/test/testAnimation.editMA line 61: ':sampleAsset_v01:pSphere1.rotateY' already has an incoming connection from ':pSphere1_rotateY.output'. #
# Error: file: D:/test/testAnimation.editMA line 62: ':sampleAsset_v01:pSphere1.rotateZ' already has an incoming connection from ':pSphere1_rotateZ.output'. #
# Error: file: D:/test/testAnimation.editMA line 63: ':sampleAsset_v01:pSphere1.rotateX' already has an incoming connection from ':pSphere1_rotateX.output'. #
# Error: file: D:/test/testAnimation.editMA line 64: ':sampleAsset_v01:pSphere1.translateZ' already has an incoming connection from ':pSphere1_translateZ.output'. #
# Error: file: D:/test/testAnimation.editMA line 65: ':sampleAsset_v01:pSphere1.visibility' already has an incoming connection from ':pSphere1_visibility.output'. #
# Error: file: D:/test/testAnimation.editMA line 66: ':sampleAsset_v01:pSphere1.scaleX' already has an incoming connection from ':pSphere1_scaleX.output'. #
# Error: file: D:/test/testAnimation.editMA line 67: ':sampleAsset_v01:pSphere1.scaleY' already has an incoming connection from ':pSphere1_scaleY.output'. #
# Error: file: D:/test/testAnimation.editMA line 68: ':sampleAsset_v01:pSphere1.scaleZ' already has an incoming connection from ':pSphere1_scaleZ.output'. #
# Error: file: D:/test/testAnimation.editMA line 69: ':sampleAsset_v01:pSphere1.translateX' already has an incoming connection from ':pSphere1_translateX.output'. #
# Error: file: D:/test/testAnimation.editMA line 70: ':sampleAsset_v01:pSphere1.translateY' already has an incoming connection from ':pSphere1_translateY.output'. #
i
ん~ お断りされました。
となると、editMAの使いどころはスタジオライブラリの様な作業中のアニメーションの読み書きというよりは、
作業開始時・終了時にクリーンなシーンを作成する為に読み込み・書き出しを行う感じですかね。