2020年9月24日木曜日

FBX形式でモーションを出力する

 以前投稿したのですが、文章だけではイマイチ想像しづらかったので軽く図を作成してみました。



組織で分業するなら、まぁ、こんな感じかなと思います。

「Skeleton」は、リファレンスするのかインポートするのかで微妙に違う運用になるかもしれませんが、後々アニメータの要望を受けたりしてジョイントの追加をしても、ウェイトが振られていないとノードの無駄になるので、モデラーさんにインポートと再バインドの依頼をする流れにしたほうがフロー的に忘れる事が無くて良さそうです。

[Rig]ファイルへ参照させる[Model']ファイルは、誰かがポリゴン数やシェーダーを軽量化してアニメーション作成時のフレームレートを稼ぎます。参照時には、ネームスペースとして "M" とかを付けています。
”:” で無名のネームスペースを付ける事も出来ますが、sceneConfigurationScriptNode やマテリアルとか、思いもつかないノードで重複が起き、勝手にリネームされて危険なので、固有のネームスペースを付ける事をお勧めします。


「Motionファイル群」には、ファイルそれぞれで[Rig]ファイルを参照しています。そこでも"RIG"みたいなネームスペースを付与しています。
すると、[Motion]内のジョイントには、"RIG:M:"みたいなネームスペースが付加されていることになり、FBXExportコマンドを使って出力すると、Engine 内で Model.fbx と motion.fbx 群のジョイント名が違ってしまい、うまくアニメーションが適用できなくなります。

で、この現象の公式の回避方法としては、こんな風に対処しろとなっています。

FBX Plug-in の名前変更の規則

Maya または MotionBuilder から 2 つのキャラクタを書き出す場合

1.最初に書き出すアニメートされたリグの階層からネームスペースを除去します。

2.最初のキャラクタのネームスペースをリセットして、2番目のキャラクタからネームスペースを除去します。

3.書き出します


ファイルの構造をガッツリと編集しないといけません。

けれども、もっと手軽にネームスペースを除去する方法が、fileコマンドに存在しています。
fileコマンドで -relativeNamespace(-rns)フラグを付け、除去したいネームスペースを指定します。上の例だと、

file -rns ":RIG:M:"

とします。ネームスペースの指定をする場合、先頭にも":"が必要なので注意が必要です。

そして、fileコマンドを使って FBX ファイルを出力する場合、typeフラグに"FBX export"を指定すればFBXファイルを出力できます。
FBXExport コマンドを使うときみたいに、事前に各FBXフラグを指定した状態で、

    file -f -op"v=0;"-rns ":RIG:M:" -typ "FBX export" -es $exportFilePath;

みたいにファイルコマンドを実行すると、ネームスペースを除去したFBXファイルが出力されます。

ホントは FBXExport 側に付けてほしいフラグです。

0 件のコメント:

コメントを投稿