Mixamoではウェイトをつけていないモデルを読み込むと、
自動でジョイントを入れてスキニングまでしてくれます。
またMayaやBlenderなどで骨を制作してスキニングまでした後にMixamoにもっていくこともできます。
今回はMixamoにあるデフォルトのジョイントデータをダウンロードして、
MAYAやBlenderでジョイントの位置や回転、階層構造を変えて
再度Mixamoにアップロードしたときに、どこで破綻するか気になったので今回はそちらの検証をしていきたいと思います。
結論
- 基礎ジョインの名前変更・・・・・・・・・・・・・・・・・・・・・NG
- 基礎ジョインの移動・・・・・・・・・・・・・・・・・・・・・・・OK ※1
- 基礎ジョイント(右半分)を消して、同じ名前で新規ミラー作成・・・OK
- 基礎ジョイントの方向を変更(変更後回転値0でフリーズ) ・・・・・OK
- 基礎ジョイントの間に追加ジョイントを置く・・・・・・・・・・・・OK
- 基礎ジョイントの親子階層は変えず、追加ジョイントを置く・・・・・OK
基礎ジョイント・・・Mixamoから書き出されたジョイント
Ok・・・・・・・・・問題なくモーションを流せます
NG・・・・・・・・・モーションが崩れます
(※1:問題なくモーションは流せましたが、書き出した回転値に微妙な数値違いあり)
検証
元のモーション
⓪Mixamoから書き出された基礎ジョイントを何も変更せずそのままMixamoへアップロード
→ 検証結果:OK(問題なくモーションが流せます)
①基礎ジョイントのジョイント名を適当な名前に変更 (階層・回転値・移動なし)
→ 検証結果:NG(モーションが元のモデルと変わりました)
・検証結果で首や顔あたりが動きが硬くなっており、モーションをうまく流し込めていません。MixamoのモーションをMAYAで比較したら、今回の検証ではNeckと同じ数値がHeadにも入っておりました。Mixamoの元モーションでは、NeckとHeadは別の回転値でしたので、何かしらアップロード時の自動リギングでうまくいかなくなったのかと思います。
②基礎ジョイントのジョイント移動・バインドポーズを再設定
→ 検証結果:おそらくOK
(問題なくモーションが流せましたが、ところどころ元の回転値と違いが出ました。)
大きく移動したLeftShoulderやSpineは回転値が同フレームで、元のデータと同じでした。しかしLeftUpLegや指ジョイントに微妙な数値の違いがありました。
こちらは長さによる回転幅の違いをMixamoでよんでる感じでしょうか・・・
モーション全体としては破綻がなかったので検証結果はOKとしました。
③基礎ジョイント(右半分)を消して、同じ名前で新規ミラー作成
→ 検証結果:OK(問題なくモーションが流せます)
MAYAでも元モーションとの比較を行いましたが、動作は同じになっておりました。
④基礎ジョイントの方向を変更 (回転値はフリーズ(0)しております)
→ 検証結果:OK(問題なくモーションが流せます)
MAYAでも元モーションとの比較を行いましたが、動作は同じになっておりました。
ジョイント方向が変わってるので、回転値は変わっております。
⑤基礎ジョイントの間に追加ジョイント・ノードを置く
(追加ジョイント名はADD_XXとしております)
→ 検証結果:OK(問題なくモーションが流せます)
検証したモーションをダウンロードしてMAYAで確認を行いました。
追加したジョイント、グループノードも残っており階層もそのままで
モーションもしっかり流すことができておりました。
元のモーションデータと今回の検証のもので、各キーで回転数値もあっておりました。
追加したジョイントには、0フレームにキーは打たれていたものの
回転値0になっており不具合が起こっているような感じではありませんでした。
(画像参照)
⑥基礎ジョイントの親子階層は変えず、追加ジョイントを置く
→ 検証結果:OK(問題なくモーションが流せます)
【⑤基礎ジョイントの間に追加ジョイント・ノードを置く】と同様、MAYAで確認しても問題なく回転値が入っており、モーションを流すことができました。
⑤と違う点は、ADDで追加しているジョイントの0フレームにキーが打たれていなかったことです。(あまり大きな違いではありませんが・・・。)
まとめ
以上Mixamoジョイント改変検証でした。
名前を変更するのはよくなさそうですね。
ジョイントを移動した時の元データとの微妙な数値の違いが気になるところですが
ゲームで使うくらいであれば見た目上特に問題なさそうでしたので
今回の検証はこちらで終わります。
・はてなブログmp4埋め込み用サイト