XNAのACLで正常にアニメーションするFBXを出力する

XNAで3Dのモデルをアニメーションさせるとき、XNA Animation Component Library というのを使うと便利っぽいらしいんですね。自前で全部できたらそれはそれで素晴らしいのだろうけど、そんなスキルや時間のない人はACLを使わせていただくという感じらしいです。

それで、そのサンプルをちょっと改造して簡単にモデルを差し替えてテストできるものを用意してもらっていろいろとテストしました。目標は簡単。ACLのサンプルで問題なく動くモデルを作成すること。それだけ。

ところが、このACLが曲者で手元にあるファイルとの相性がすこぶる悪い。Xファイルとかって方言とかあるらしいので、ソフトとの相性とかでいろいろ面倒なことがよくあるみたいなんですよ。(それは結構有名な話らしい)

ということで、今回はACLで動くファイルを出力する方法を発見するまでをまとめてみました。

先に断わっておくと、自分はソフトの使い方やファイルの構造とかを熟知してるわけじゃなくて、というかほとんど分かってなくて、本当ならもっとスマートな方法があるかもしれないです。(単に相性問題ってわけじゃなくてね。)

試したソフトは次のソフト達

  • メタセコwithボーンプラグイン
  • エルフレイナ
  • TOYSTUDIO
  • XSI

ファイル形式はXファイルかFBXファイルだったら良いとのこと。 以下、ソフト別のテスト結果。

メタセコwithボーンプラグイン

metaseq.net – Metasequoia
mqdl (ボーンプラグイン)

メタセコは元々モデリングに特化されているソフトなので、アニメーションの出力はできませんが、それを可能としてくれる素晴らしいプラグインが存在します。ちなみに、常駐姉妹のモデルのモーション作成はこちらのプラグインを使用しました。

とりあえず、適当なモーションをつけてXファイルで出力し、テストします。
結果、ビルドすら通りませんでした。

エルフレイナ

エルフレイナ – ソーサリーフォース

エルフレイナは、メタセコの独自形式であるmqoファイルを読み込み、そのモデルに対してモーションを作成できるソフトです。 メタセコのボーンプラグインが公開される前からあったと思うので割と昔からあるソフトだと思います。

エルフレイナでも、適当なテスト用モデルを用意して、サンプルでテストします。
結果、ビルドは通るものの、起動時にエラーを吐いてしまい正常に起動できませんでした

TOYSTUDIO

TOYSTER | CGソフト「TOYSTUDIO」の開発やサポートなどを行っています。

このソフトは最近知ったのですが、いつ頃からあるのでしょうか。
メタセコファイルを読み込んでアニメーションを作成できるのですが、かなり高機能です。
ウェイトペイント機能があったり、モーションキャプチャのデータを読み込んだりできます。
そして、拡張機能を使うとXファイル以外にFBXファイルの出力もできます。
(拡張機能は現時点では、メールで申し込んでIDとPassを作者様から頂く必要があります)

こんなに高機能なのに、理想の高いACLは、TOYSTUDIOで出力したXファイルもFBXファイルも受け入れることはありませんでした。 つまり、失敗ね。

XSI

最後にXSI。最近のFnd終了で一気に敷居の高くなったソフトです。
今回試した中での唯一の統合環境。
結果から先に言ってしまうと、XSIだとなんとか成功します

ただ、(自分なりに)普通にやったら失敗しました。
XSIでのモーションの作成は、機能がたくさんある分複雑で自分もまだ良くわかってません。
もっとちゃんと理解していれば、うまく回避できるのかもしれません。

注意としては、XSIではリグなどの機能が使えますが、Xファイルなどで出力を考えるならばそれらの使用は止めた方がいいみたいです。
参考: DirectX Exporter for XSI by CoralOcean
余談ですが、XSI関連でこんなのも紹介。今回はテクスチャ使わないので関係ないんですがね。
DirectX exporterの罠 by CoralOcean

で、自分もリグなんかは最初にちょろっと使ってみてエラーが出るのを確認してからボーンだけでやってました。
そして、適当に歩くモーションなんかを作ってFBXとかで出力してみる。
いつものようにACLのサンプルに読み込んでテストです。
結果、正常に起動。「おおっ!読める!」と思いきやなんかモーションが崩れまくってます。

正直なにが原因なのかよくわからない。
とりあえず、原因究明のためXSIで出力したFBXをもう一度XSIで読み込んだりとかしてました。
そうすると、XSI上でも崩れてしまうんですよね。
ということは、出力の時点で何か問題があると、そういうわけです。

ということで、XSIでうまくFBXを出力する方法があるはずなんですが、自分がなにかまずいことでもしてるのかうまく出力することができない。

そして、どういう経緯で発見したのかはよく覚えていませんが、この問題を回避する一つの解決方法を発見しました。

その方法は、「モーションを付ける前に一旦FBXで出力して、そのFBXに対してモーションを付ける」です。
これだと、ちょっと意味がわからないのでもう少し詳しく説明するとこんな感じ。

  1. モデルを作成し、ボーンとかセッティングする。
  2. その状態(モーションとか何もつけてない状態)で一度、FBX出力する。
  3. 出力したFBXファイルXSIに読み込む。
  4. 読み込んだモデルにモーションを付ける。
  5. 最後にもう一度FBXで出力。

この方法で出力されたFBXは、ACLで再生しても問題を起こしません。今のところ。

まとめ

  • 今回のテストの中ではACLはXSIから出力されたファイルしか受け付けてくれなかった。
  • XSIでうまくFBXを出力することができなかった。(いまだにわからず)
  • その回避方法として上記の方法を発見してとりあえず解決した。

とにかくわからないことが多すぎるよなぁ。

Similar Posts:

この記事へのコメント

現在、この記事へのコメントはありません。

コメントをどうぞ

この記事へのトラックバックとピンバック

現在、この記事へのトラックバックはありません。

TrackBack URL