Unity2017.2がリリースされ、あわせてねんがん(?)のFBX Exporterがリリースされました。βですけど。
ざっくり言うと、Unityで適当な仮オブジェクトを作成して作業したのち、Mayaと連携してUnityのシーンで特に作業をすることなく、仮オブジェクトを別のモデルに差し替えることができるようなアセットです。
詳細は以下。
blogs.unity3d.com
www.youtube.com
というわけで早速いじってみます。
- FBX Exporter(beta)を導入する
- UnityでExportしてみる
- MayaでExportしてみる
- Unityに戻って確認してみる
- シーンとFBXを関連付ける方法
- 個人的につらいと思ったところ
- FBXの書き出し設定を変える方法
- 感想
- おまけ
FBX Exporter(beta)を導入する
まずはFBX Exporter(beta)をアセットストアからダウンロードします。
FBX Exporter (beta)
このアセットにはUnity用プラグインとMaya用プラグインが同梱されています。
ProjectSettings>FBX Exporterを選択してInspectorを開くとこのような表示になってるかと思います。
利用したいMayaのバージョンを選択し、「Install Unity Integration」を選択します。
ちなみにMayaは2017以降に対応しているようです。
実行後、選択したバージョンのMayaが起動、終了したのち、このようなダイアログが出れば完了です。
自分でMayaを立ち上げてPluginManagerを開いて、UnityFbxForMayaPlugin.pyが追加されていれば成功しています。
FBX Exporterを導入したUnityプロジェクト内のpythonファイルを参照しているようです。
というわけで、「Install Unity Integration」を実行したUnityプロジェクトのファイルをそのまま読むので、このプロジェクトを消しちゃったりすると動かなくなります。
UnityでExportしてみる
まず適当にCubeを作成します。
ちなみにCubeである必要はなく、空のGameObjectとかでもいけるみたいです。
次にCubeを右クリックして、最下部の「Convert To Linked Prefab Instance」をクリックします。
すると、このようにCubeがプレハブ化され、同名のFBXとMaterialsディレクトリが作成されました。
ちなみに生成されたプレハブにはFbxPrefabというスクリプトが追加されており、SourceFbxAssetとして先程生成したCubeのFBXが設定されている、というようなつくりになっています。
MayaでExportしてみる
File>Unity>Importを選択。
さきほど書き出したCube.fbxを選択。
するとImportが完了し、アウトライナの表示はこんな感じになりました。
UnityFbxExportSetというセットに登録されたものがExportの対象となる作りのようです。
というわけで、UnityFbxExportSetに置き換えたい対象のモデルを登録すればよさそうなので、大昔お勉強で作ったクソのような剣を読み込んで登録してみます。
さらに、不要なCubeを削除してしまいます。
とりあえずこれだけで準備はオッケーなのですが、StingrayPBSと連携してくれるようなので、ついでにStingrayPBSシェーダーも雑に作っていきます。
ハイパーシェードを開いて、StingrayPBSを選択して作成します。
ちなみにリレーションシップエディタを開いてるとハイパーシェードを開いたとき中身が空っぽになったりするので、その場合はリレーションシップエディタを閉じてリトライしましょう。つらみ。
そして各パラメーターをお好みで変更していきます。
ここまでできたら、File>Unity>Exportをすれば作業完了となります。
Unityに戻って確認してみる
オッ。
どうやらうまくいったようです。シェーダーも適用されていますね。
テクスチャもプロジェクト内にあるものをMayaで参照していれば適用されるようです。
緑の枠はCubeの名残のBoxColliderなので不要なら外します。
先程Mayaで設定したパラメータも概ね同じ値が入っているようです。やったぜ。
シーンとFBXを関連付ける方法
上ではMayaからFile>Unity>ImportでFBXを読み込んで、そこにさらに置き換え対象のシーンを読み込みました。
Unity公式の動画もこんな感じのフローなのですが、予め置き換え対象のモデルが含まれたシーンを開いて、その状態でFile>Unity>ImportでFBXを読み込むというフローもあります。
このように、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をプラグインとしてロードする、というつくりです。
なるほどー。