|
標準機能 まずは、Mayaの標準機能で TraxEditor 上の Clip を保存して、そのログを見てみましょう。
Clip だけを選択状態にし、ファイル > アニメーションクリップの書き出し を実行します。
するとdoExportClipArgList 1 {"clipEditorPanel2ClipEditor"};という Melコマンド を発見できます。では、もう1つの方法はどうでしょうか。 バイザーでは、右マウスクリック > 書き出し を実行します。 するとdoExportClipArgList 2 { "", "joint_1anmSource"};というMelコマンド を発見できます。 なんだ、同じコマンドじゃん、となります。 doExportClipArgList の後の数字は、だいたいMelの場合 バージョン番号で、 1の時はClipが選択されている状態で実行する 2の時は出力するClipの名前で実行する ・・のではないかと推測できます。 では、Melの探検準備OK、覗いてみることにしましょう。 |
doExportClipArgList って? さて、doExportClipArgListがどこにあるかのはいつもの呪文whatIs を使います。 スクリプトエディタのMELタブにてwhatIs doExportClipArgListを実行します。 すると、C:/Program Files/Autodesk/Maya2015/scripts/others/doExportClipArgList.melだって分ります。 では、doExportClipArgList.melを手持ちのWindows用スクリプトエディタ開いてみます。 だいたい、先頭部分にフラグの説明が書いてあります。思っていた感じの番号の説明が書いてありますね。 そこまで分ったので、doExportClipArgListにクリップ名を渡している部分を探してみましょう。 doExportClipArgListを実行している部分です。 バージョン番号 と文字列 をdoExportClipArgListに渡しています。 そして、ブラウサー fileBrowser を立ち上げてclipEditorExportClipを実行している部分があります。 次はこの clipEditorExportClip が何をしているかが分れば良いことになります。 すると、出力するファイルの種類はClipの場合、Asciiの ma って分っていて、 file コマンド と フラグ が書いてあるので、おお、しめしめ これで求めるスクリプトを想像してみることが出来ます。
でしょうか。 いざ実行!結果、エラーも無く、あっと言う間に終わるので、OKか??って思うじゃん。 出力されたファイルの大きさを、Mayaの標準機能で出力した ma ファイルと比べると、少ない事に気が付きます。 そして、実際に TraxEditor に今スクリプトで保存したClipを読み込もうとすると・・・失敗します!! Why? なぜでしょう・・・ |
clipLibrary 出力される Clipのデータは ASCIIファイルなので、テキストエディターで開いて違う部分を見てみることにしましょう。
すると、12行目ではやくも違いを見つけることが出来ます。
Mayaの標準ツールで保存した .ma には、clipLibrary の項目があり、その中に 各ノードのデータが記述されています。 この部分がごっそり無いのに気が付きます。これじゃ動かないわけです。 では、改めてdoExportClipArgList.melのclipEditorExportClip部分、先に発見したfile コマンドの少し上あたりに注目します。 すると Clip に関する記述が2つあるのが解ります。 下のはsourceClip と書いてあるので、ソースのClipも追加選択した状態で出力するのかとわかります。
■cliphttp://download.autodesk.com/global/docs/maya2014/ja_jp/CommandsPython/clip.htmlもう1つ、clip にisolate フラグを立てた値を渡しています。ここでピンと来た方は Clip のコマンド表を見た事のある人ですね。見てみましょう。 isolate(i) このフラグは name フラグと一緒に使用し、1つまたは複数のクリップを新規のクリップライブラリにコピーするように指定します。
このフラグの最も一般的な用途は、キャラクタのすべてのクリップではなく、特定のクリップのみの書き出しです。 これです。!! つまり、クリップのライブラリーを取得して、Clipのソースと共に選択した状態で file コマンドで出力する ようなんです。 Melをもっと簡単に書くと、
です。 Python に書き直し、Clipのみを選択した状態で、実行します。
これで書き出された.ma ファイルは見事に動きます。大成功です。 途中に print 文を挟んでいます。 すると2つの文字がリストで出力されるのを認識して欲しかったからと、もう1つの理由は後で説明します。 1つ目は、その2つ下の行でわざわざselected_clip_library[0]と書いているのは この2つのデータの内、最初のクリップ ライブラリを設定したかったからだと気が付きます。 2つ目の理由は・・・・ 同じClipを選択した状態から何度か上のスクリプトを実行してみてください。
ん?どんどん増えるぞ、やばくね? |
後処理 またまた、doExportClipArgList.melのclipEditorExportClip部分、先に発見したfile コマンドの下あたりに注目します。
するとclipLibraryに関する記述が続いているのがわかります。 ファイルを出力した後、クリップライブラリーを消しているのです。
そこで、記述も真似て、もし1つ以上あったらその分だけ全部消すというスクリプトを追加します。
これで完成か!? と思い、先に出力したClipをTraxEditorに乗せてみます。 そこで気が付くのは、1つ目の元のClipと同じっぽいけど違う動きの結果になったりしています。 Why? なぜでしょう・・・ |
絶対値の処理 Clipを配置し、そのアトリビュートのチャンネルオフセット 項目を見ます。 すると、全ての値が 相対値 になっています。 追加される動きの時には相対値は便利ですが、通常のアニメーション編集の時は 絶対値 でないと理解できなくなります。 元のClipを見ると絶対値になっているので、これは保存の仕方や前処理があるに違いないと考えます。 またまた、doExportClipArgList.melのclipEditorExportClip部分もっと最初の部分に注目します。 ClipとソースClipに何やら前処理をしている部分があることに気が付きます。 このcopyAbsoluteChannelsClipDataも別Melファイルのコマンドです。(C:/Program Files/Autodesk/Maya2014/scripts/others/copyAbsoluteChannelsClipData.mel)
今回はこのまま利用してしまいます。
これを通して作成したClipをTraxEditor に配置してみると絶対値 になっていて、元のClipを同じ動きをするようになりました。 めでたしめでたし。 以上です。 |
save_clip.py という訳でClipを直接TraxEditorから保存するツールsave_clip.pyを公開します。 (Pyファイルはシェルフにボタン登録するか、プルダウンメニューに登録して実行します。) あくまでも自己責任でお使いください。 use as your own risk. |
という訳で、次回は...What's Next ... 乞う、ご期待!!Stay tuned ..
|