【Unity】FBX ExporterでMayaと連携してみる

Unity2017.2がリリースされ、あわせてねんがん(?)のFBX Exporterがリリースされました。βですけど。

ざっくり言うと、Unityで適当な仮オブジェクトを作成して作業したのち、Mayaと連携してUnityのシーンで特に作業をすることなく、仮オブジェクトを別のモデルに差し替えることができるようなアセットです。

詳細は以下。
blogs.unity3d.com
www.youtube.com

というわけで早速いじってみます。

FBX Exporter(beta)を導入する

まずはFBX Exporter(beta)をアセットストアからダウンロードします。
FBX Exporter (beta)

このアセットにはUnity用プラグインとMaya用プラグインが同梱されています。

ProjectSettings>FBX Exporterを選択してInspectorを開くとこのような表示になってるかと思います。
f:id:tm8r:20171013144754p:plain
利用したいMayaのバージョンを選択し、「Install Unity Integration」を選択します。
ちなみにMayaは2017以降に対応しているようです。


実行後、選択したバージョンのMayaが起動、終了したのち、このようなダイアログが出れば完了です。

f:id:tm8r:20171013144927j:plain
自分でMayaを立ち上げてPluginManagerを開いて、UnityFbxForMayaPlugin.pyが追加されていれば成功しています。

FBX Exporterを導入したUnityプロジェクト内のpythonファイルを参照しているようです。
というわけで、「Install Unity Integration」を実行したUnityプロジェクトのファイルをそのまま読むので、このプロジェクトを消しちゃったりすると動かなくなります。

UnityでExportしてみる

f:id:tm8r:20171013144942p:plain
まず適当にCubeを作成します。
ちなみにCubeである必要はなく、空のGameObjectとかでもいけるみたいです。

f:id:tm8r:20171013144950p:plain
次にCubeを右クリックして、最下部の「Convert To Linked Prefab Instance」をクリックします。

f:id:tm8r:20171013144957p:plain
すると、このようにCubeがプレハブ化され、同名のFBXとMaterialsディレクトリが作成されました。

f:id:tm8r:20171013150042p:plain
ちなみに生成されたプレハブにはFbxPrefabというスクリプトが追加されており、SourceFbxAssetとして先程生成したCubeのFBXが設定されている、というようなつくりになっています。

MayaでExportしてみる

f:id:tm8r:20171013150210p:plain
File>Unity>Importを選択。

f:id:tm8r:20171013150645p:plain
さきほど書き出したCube.fbxを選択。

f:id:tm8r:20171013150215p:plain
するとImportが完了し、アウトライナの表示はこんな感じになりました。

UnityFbxExportSetというセットに登録されたものがExportの対象となる作りのようです。

f:id:tm8r:20171013150230p:plain
というわけで、UnityFbxExportSetに置き換えたい対象のモデルを登録すればよさそうなので、大昔お勉強で作ったクソのような剣を読み込んで登録してみます。
さらに、不要なCubeを削除してしまいます。

とりあえずこれだけで準備はオッケーなのですが、StingrayPBSと連携してくれるようなので、ついでにStingrayPBSシェーダーも雑に作っていきます。

f:id:tm8r:20171013151030p:plain
ハイパーシェードを開いて、StingrayPBSを選択して作成します。

ちなみにリレーションシップエディタを開いてるとハイパーシェードを開いたとき中身が空っぽになったりするので、その場合はリレーションシップエディタを閉じてリトライしましょう。つらみ。

f:id:tm8r:20171013151104p:plain
そして各パラメーターをお好みで変更していきます。

ここまでできたら、File>Unity>Exportをすれば作業完了となります。

Unityに戻って確認してみる

f:id:tm8r:20171013151319p:plain
オッ。

どうやらうまくいったようです。シェーダーも適用されていますね。
テクスチャもプロジェクト内にあるものをMayaで参照していれば適用されるようです。

緑の枠はCubeの名残のBoxColliderなので不要なら外します。

f:id:tm8r:20171013151348p:plain
先程Mayaで設定したパラメータも概ね同じ値が入っているようです。やったぜ。

シーンとFBXを関連付ける方法

上ではMayaからFile>Unity>ImportでFBXを読み込んで、そこにさらに置き換え対象のシーンを読み込みました。
Unity公式の動画もこんな感じのフローなのですが、予め置き換え対象のモデルが含まれたシーンを開いて、その状態でFile>Unity>ImportでFBXを読み込むというフローもあります。

f:id:tm8r:20171013154526p:plain
このように、File>Unity>ImportでFBXを読み込んだ際に作成されるUnityFbxExportSetというセットにはカスタムアトリビュートがついてます。
なので、この状態でシーンを保存すれば、その後はFile>Unity>Importを都度実行することなく、File>Unity>Exportを行うだけでUnityに変更が反映されます。

個人的につらいと思ったところ

  • Materialを更新する方法が謎
    • 再度Exportしても反映されず
  • テクスチャを予めUnityプロジェクトに入れておく必要がある
  • UnityFbxExportSetがファイルパス保存してくれるのはいいけど、複数人で作業する場合作業ディレクトリ合わせないといけないのでは…

FBXの書き出し設定を変える方法

Assets/FbxExporters/Integrations/Autodesk/maya/scriptsの中にunityFbxExportSettings.melというファイルがあるので、これを書き換えればおっけーです。

具体的には以下のような内容が記述されています。

FBXResetExport;

// FBX file format
FBXExportInAscii -v false; 
FBXExportFileVersion -v FBX201600;
(略)

感想

Unityでマップの設計やキャラの配置を仮のオブジェクトで行って、その後並行でMayaでモデリングを行うようなフローでは使えそう。レベルデザインとか。
が、自分が開発に携わってるキャラもののソシャゲとかではいまいち活用方法が思い浮かばず…。

Materialの連携が嬉しいかなーと思ったりもしたものの、StingrayPBSをStandardシェーダーで再現するだけと思われるので、自前のシェーダー使ってる場合は特に嬉しいことはなさそう…。
Importerとか使ってなんとか出来るんだろうか…。

とはいえまだβなので、今後の開発に期待したいところです。

ちなみにさらに詳しく知りたい場合、FBX Exporterをダウンロードすると「FBX_Exporter_User_Guide」というpdfが同梱されているので、こちらをご参照ください。

おまけ

Mayaで自前のスクリプトからFBX Exporterのコマンドを呼ぶ

File>UnityのImportとExportですが、ソースを読んでみるとどうやらコマンドプラグインとして実装されているようです。
つまり、cmdsから呼ぶことができます。

コマンドプラグインに関しては以下をご参照ください。
qiita.com

呼び方は以下の通り。

from maya import cmds
# import
cmds.unityImport()

# export
cmds.unityExport()

それぞれのパイプラインに組み込めそうですね。すてき。

※ちなみに現状この形で呼べるだけで、ドキュメントなどでは特にこちらに関して記述があるわけでもないので、自己責任でご利用ください。

Install Unity Integrationがやってることを調べる

Assets/FbxExporters/Integrations/Autodesk/maya/scriptsの中にconfigureUnityFbxForMaya.melというファイルがありまして。
Mayaが立ち上がったときこのmelを実行してセットアップをしてるようです。

具体的には「UnityApp」とか「UnityProject」とか「UnityFbxExportSettings」とかを環境に合わせてoptionVarに登録したのち、UnityFbxForMayaPlugin.pyをプラグインとしてロードする、というつくりです。
なるほどー。

スポンサーリンク