Unity、Mayaと3ds Maxへの連携フロー

Unity、Mayaと3ds Maxへの連携が
大幅に改善されました。





Unity 2018.1、FBX Importerの機能強化

エクスポートする対象としてDCCツール上で指定するだけで
FBXファイルにエクスポートされ、Unityにそのままインポートできる環境が整いました。

また、Unity上で作成したシーンをFBXファイル形式でMayaにエクスポートし
さらにMayaで作業した結果をそのままUnityにバックポートするという
FBXラウンドトリップというワークフローも可能に

今はMayaが先行して開発が進んでいますが、今後3ds Maxでも可能な限り
機能を実現していくそうです。

まずUnityにFBXファイルをインポートする側(FBX Importer)。

01 Modelタブ

32 bit頂点バッファへの対応

〈Index Format〉を「32bit」にすることで32bit頂点バッファに対応します。従来までは約6万5千頂点を超えるモデルをインポートするとUnityによって自動分割されていましたが、32bit頂点バッファを指定することで、自動分割されずに1体のモデルとして扱うことができるようになります

可視属性のインポート

〈Import Visibility〉をONにすることで、MayaなどのVisibilityアトリビュートをインポートします。Visibilityアトリビュートのキーアニメーションにも対応しています

カメラのインポート

〈Import Cameras〉をONにすることで、カメラのアニメーションやアトリビュートをUnityにインポートすることができます
■ライトのインポート
〈Import Lights〉をONにすることで、シーン中のライトの種類やアニメーション、アトリビュートをUnityにインポートすることができます。ただし、Mayaなどのライトがもてる設定とUnityのライトがもてる設定は完全には一致しませんので、そのあたりの調整は手動で行う必要があります

02 Animationタブ

コンストレイン


〈Import Constraints〉をONにすることで、Mayaのペアレント、ポイント、オリエント、スケール、エイムの各コンストレインをUnityにインポートできます
  • なお、Maya上で設定したコンストレインをFBXファイルにエクスポートするには、FBXエクスポート時にオプションよりコンストレインを出力するように指定する必要があります
  • Unityでは、コンストレインはゲームオブジェクトにアタッチされるコンポーネントとして扱われます。各コンストレインコンポーネントはメニューバーより、〈Component〉メニューの〈Miscellaneous〉より選択してアタッチすることもできます。Unityでは、MayaのポイントコンストレインがPosition Constraint、オリエントコンストレインがRotation Constraintになります。その他のペアレント、スケール、エイムの各コンストレインは名称も同じです












03 カスタムアトリビュート
さらにMayaのアトリビュートエディタから独自に設定したカスタムアトリビュートの値も、UnityのAnimator経由で取得することができるようになりました。カスタムアトリビュートを設定することで、例えばMaya上で歩行アニメーションの接地のタイミングで、カスタムアトリビュートに値を入れることで、Unity側でアニメーションデータから正確に接地タイミングを取得するなどの手法が簡単に実現できるようになります
例えば、画像のようにホバークラフトの高さに合わせてカスタムアトリビュート「ShipHight」を設定し、キーを打ちます
カスタムアトリビュートアニメーションを含むFBXデータをUnityにインポートします。FBXデータをProjectビューから選択し、InspectorのAnimat ionタブに切り替えます。〈Animation Custom Properties〉という項目にチェックをして、Applyボタンを押します
FBXファイルに含まれているアニメーションデータTake 001をProjectビュー上で選択し、Animationウィンドウを開きます。すると「Animator.Ship Hight」という名のアニメーションが読み込まれていることがわかります。これがMayaからインポートされたカスタムアトリビュートアニメーションです
カスタムアトリビュートをUnity上で利用する場合、Animatorコンポーネントを使います。アニメーションデータTake001を登録したアニメーターコンポーネントを作成し、Animatorウインドウで開きます。カスタムアトリビュートの値を取得するために、Parametersタブを開き、リストに新規パラメータを追加します。 今回はFloatのパラメータを追加します
新規作成したFloatパラメータの名前を、Maya上と同じカスタムアトリビュート名「ShipHight」(ナイスネームではないことに注意してください)として、プレイボタンを押すと、カスタムアトリビュートに設定されているアニメーション値が取得できているのがわかります



UnityのAssset Storeには、様々なアセットが出品されていますが、その中にはUnity Technologiesが出品しているアセットもあります。「FBX Exporter」という
アセットもそれらのひとつです。
FBX Exporterを組み込む
FBX Exporter はAsset Storeから無料で手に入れることができます。Asset StoreビューからFBX Exporterを検索し、インポートボタンをクリックすると、インポートが始まります





  • 〈Import Unity Package〉ウインドウが開いたら、右下の〈Import〉ボタンを押しましょう。現在開いているUnityプロジェクトにFBX Exporter が組み込まれます


  • FBX Exporer が正常に組み込まれると、Unityのメニューバーより〈GameObject〉メニュー内に〈Export Model...〉〈Convert To Linked Prefab Instance〉の2つの項目が追加されます。これらは、後ほど説明するFBXラウンドトリップで使用されるコマンドです





























さて、FBX ExporterやMayaからの
コンストレインインポートを効率的に実行するために、事前にUnityとMayaとの間で作業するユニット単位を合わせておきましょう。Unityでは、1グリッドあたりの大きさは1mとなっています。一方、Mayaでは1グリッドあたりの大きさは、1m、1cm......、と初期設定で選ぶことができます。特にUnity上で物理演算をするときには、Mayaからインポートするオブジェクトも「1ユニット単位が1m」であることを保つ必要があります。以下のようにMayaおよびUnityを設定することで、上の関係を等しく保つことができます。
ユニット単位を合わせるための設定
Mayaでは〈Preferences → Settings → Working Units → Linear〉を〈meter〉で設定
  • MayaからFBXファイルをエクスポートする際に、〈Export Sellection → Advanced Options →Units〉より、〈Automatic〉をOFF。〈File units conversion to:〉を〈Centimeters〉で送ります



  • UnityでFBXファイルをインポートする際に、〈Inspector → Model〉タブより、〈Scale Factor〉を「1」 に、〈Use File Scale〉をONにして、〈Apply〉ボタンでインポート。なお、もちろんMayaでcm単位で作業している場合でも、作業者が「100ユニットで1m」と意識しているならば、問題はありません













それでは、FBX Exporterを使いながら、実際に Unity 2018.1とMaya 2018との間でFBXラウンドトリップを使ってみましょう。


01 Unity側の準備
前述のようにFBX ExporterはAsset Storeからダウンロードします。UnityプロジェクトへのFBX Exporterのインストールが終了したら、メニューバーより〈Edit → Project Settings → Fbx Export〉を選択し、FBX Exporterの初期設定を行います

  • 〈Inspector → Fbx Export Settings〉より〈Integration〉項目の〈3D Application〉リストボックスを見ると、システムにインストールされているDCCツールが表示されます。今回はMaya 2018を選択。続いて〈Install Unity Integration〉ボタンをクリックすると、オペレーションシステムのファイル選択ウインドウが開きますので、UnityとMayaを連動するプロジェクトフォルダを選びましょう

  • するとこのようなメッセージウインドウが出て、Maya 2018が起動します
インテグレーション用のヘルパースクリプトのセットアップが終わると、Maya 2018のFileメニュー内に〈Unity〉という項目が追加されます。〈Unity〉内には〈Export〉と〈Import〉の2つのコマンドがあります
02 Maya側の初期設定
続いてMaya 2018で〈Preferences →Settings〉より、作業ユニット単位を〈meter〉にしておきます。
ほかにもSet Projectから、作業プロジェクトをUnityプロジェクトが使用するフォルダに合わせておくとよいでしょう。
もしMaya 2018を閉じてしまって、Fileメニュー内から「Unity」がなくなってしまったときは、再びUnity上から〈Install Unity Integration〉ボタンをクリックし、同様の作業を再度実行する必要があります
インテグレーション用のヘルパースクリプトがプロジェクトにすでにインストールされている場合には、上書きするか、それとも既存のものを使用するか聞いてくるので、「Use Existing」を選びます

Unityシーン内のオブジェクトは簡単にMayaにエクスポートできます。例としてUnityシーン内のTrackオブジェクトをMayaにエクスポートしてみましょう。
01 オブジェクトのエクスポート
Unityの〈Hierarchy〉ビューから、Trackオブジェクトを選択し、右クリックより〈Export Model〉を選択します。オペレーションシステムのファイル保存ウィンドウが現れますので、Track.fbxという名前で保存します
続いてMayaより、〈File → Unity → Import〉を選択し、直前に保存したTrack.fbxを読み込みます
02 カメラやルックの調整
Mayaのperseカメラの〈Near Clip Plane〉、および〈Far Clip Plane〉の設定値を、UnityにおけるMain Cameraのプロパティの設定値を参考に変更しましょう。元のモデルには当たり判定用のメッシュなども付いていますので、適宜非表示にして、シェーディング設定をハードウェアテクスチャリングにすると、ほぼUnity上と同じようなルックが得られます。また、Mayaのアウトライナーを見ると、新規にUnityFbxExportSetという名前の選択セットがつくられています。この選択セット内に名前のあるオブジェクトが、現在UnityのFBX Exporterプラグインによって管理されているオブジェクトです


オブジェクトのエクスポートについては上記の通りですが、この例のようにトラック全体のような大きなオブジェクトをUnityからMayaに転送する場合、Trackオブジェクトの中心がMayaの原点位置にそのまま送られてしまうと、使い勝手が悪い場合があります。特定のオブジェクト座標がMayaの原点に一致するようにエクスポートする方法をみていきましょう。
01 事前準備~「空のゲームオブジェクト」作成
画像のような場合なら、シーンビューの中心付近に表示されている、Shipsという名前のオブジェクトの中心がMayaの原点位置にきてくれるように、Mayaにエクスポートされるほうが扱いやすそうです。またShipsオブジェクトを構成している3つのホワイトボックスが、Mayaのグリッドに沿って配置されていれば、後のポリゴンエディットのときにも作業しやすいことでしょう。そのためには、いくつか事前準備をしておく必要があります






























続いて、Ships_pivotを選択し右クリックし、「Duplicate」を選びます














Ships_pivot の子として、Shipsをペアレントします。Shipsの座標は位置回転ともに全てゼロになります
同様に、Track_pivot の子として、Trackをペアレントします。Trackの座標は、Track_pivot、すなわちShips_pivotを基準とした相対値となります
今度はTrack_pivotを基準にFBXファイルをエクスポートします。Unityの〈Hierarchy〉ビューよりTrack_pivotを選択し、右クリック。「Export Model」を選択し、「Track_pivot.fbx」として保存します










  • まずUnity の〈Hierarchy〉ビューより、Shipsオブジェクトを選択し右クリックします。さらに〈Create Empty〉を選択
  • すると「GameObject」という名前の「空のゲームオブジェクト」がShips階層内に作成されます。「空のゲームオブジェクト」とは、MayaでいうNullオブジェクトのようなもので、座標情報しかもたないオブジェクトです











02 事前準備~リネーム
  • 空のゲームオブジェクトをリネームし、「Ships_pivot」とします
  • リネームしたShips_pivotを、Shipsの階層から表に出します。このとき、Ships_pivotとShipsの座標は一致しています














03 事前準備~複製
続いて、Ships_pivotを選択し右クリックし、「Duplicate」を選びます
  • Ships_pivot が複製されて「Ships_pivot(1)」ができますので、リネームして「Track_pivot」とします
  • これで元のShipsと同じ座標をもつ、空のゲームオブジェクトShips_pivotとTrack_pivotの2つができました













04 事前準備~ペアレント
Ships_pivot の子として、Shipsをペアレントします。Shipsの座標は位置回転ともに全てゼロになります
同様に、Track_pivot の子として、Trackをペアレントします。Trackの座標は、Track_pivot、すなわちShips_pivotを基準とした相対値となります
05 エクスポート
今度はTrack_pivotを基準にFBXファイルをエクスポートします。Unityの〈Hierarchy〉ビューよりTrack_pivotを選択し、右クリック。「Export Model」を選択し、「Track_pivot.fbx」として保存します

  • 新規にMayaシーンを開きます。〈File → import〉を選択し、直前に保存したTrack_pivot.fbxを開きます
  • perseカメラのプロパティとシェーディングの設定を調整すると、今度はグリッドの上に良い感じにトラックが配置されているのがわかります。なお、〈Import〉コマンドを使ってFBXファイルをインポートすると、UnityFbxExportSetは作成されないことがわかります。MayaからUnityに戻す必要のないオブジェクトを送る場合には、こちらを使うと良いでしょう


























続いて、 Mayaのグリッド上に沿うかたちで、3つのホワイトボックスをUnityからMayaにエクスポートします。作業イメージとしては、ゲームデザイナーがホワイトボックスに割り当てた仮の自機をMaya上で本番データに置き換えていくような作業です。まずはUnityシーン内のShips_pivot以下のオブジェクトをプレファブ化した後で、Mayaに転送。プレファブ化することで、ホワイトボックスにすでにアタッチされている様々なコンポーネント機能はそのまま、Maya上でメッシュをエディットするなどの作業ができるようになります。
01 インポート
  • 〈Hierarchy〉ビューより、Ships_pivotを選択し右クリックし、〈Convert To Linked Prefab Instance〉を選択
  • すると、作業しているプロジェクト内に「Ships_pivot」という名前のファイルが2つできています。共に青いキューブのアイコンに、白いドキュメントアイコンが付いている方が実体であるFBXファイル、付いていない方がプレファブファイルです
  • Mayaに切り替え、〈File → Unity → Import〉を選択し、直前で作成したShips_pivot.fbxを読み込みます
  • Ships_pivot.fbx がMayaシーン内に配置されると、ホワイトボックスが作業しやすいようにMayaのグリッドに沿って配置されたことがわかります。アウトライナーよりUnityFbxExportSetを確認すると、Ships_pivot 以下のオブジェクトがFBX Exporterプラグインで管理されていることも確認できます



















02 モデルの置き換え
  • では、Ship01以下のBox01を本番用のモデルに置き換えてみます。Ship01の直下にShip_Body_Ship_01などのメッシュを4つペアレントします。画像ではわかりやすいようにBox01を表示OFFにしています。このBox01オブジェクトに作用するコンポーネントは、親であるShip01側にアタッチされているので、新規に追加した本番用モデルにもそのまま作用します


  • さらに新規に追加したメッシュをアウトライナーで選択し、UnityFbxExportSetにドロップします。これで新規に追加したメッシュもFBX Exporterプラグインの管理下に入りました


  • Maya上での修正をUnity側に反映してみましょう。〈File →Unity →Export〉を選択します
  • Unityに切り替えるとすぐにプレファブが更新され、先頭の白いボックスが本番用のモデルに切り替わりました。同じ手順をくり返すことで、Mayaでのモデルの変更をUnityのプレファブ構造を壊すことなしに適用することができます。これらのワークフローを「FBXラウンドトリップ」と呼んでいます










































03 カメラを追加してUnityに送る
  • Maya上で付けたメッシュ以外のオブジェクトをプレファブに反映することもできます。例として、新規にカメラを追加してUnityに送ってみましょう。Maya上で新規にカメラを作成し、MayaCameraと名付けます

  • MayaCameraをプレファブと一緒にUnityに送りますので、Ships_pivotの子としてペアレントします。FBX Exporterの管理下に置くために、UnityFbxExportSetにもMayaCameraを登録します
  • Maya上での修正をUnity側に反映します。〈File →Unity →Export〉を選択します
  • Unityに切り替えると、プレファブが更新されます。Ships_pivot内のMayaCameraを選択すると、Maya上と同じ画角設定のカメラがインポートされたことがわかります。今まではMayaのカメラ設定をUnityにそのまま送る際には、UnityとMayaのカメラ設定のちがいを理解した上でMELを書く必要があったのですが、FBXラウンドトリップを使えば簡単です


















04 ライトを追加してUnityに送る
同様の方法で、Mayaで設定したライトをUnityに送ることもできます

FBX Exporterは3ds Max 2017にも対応しています。基本的にはMayaと同様の手順になります。


01 Unity側の準備
  • 3ds Max 2017にFBX Exporterをインストールする手順はMayaと同じです。FBX Exporterの<Inspector→Fbx Export Settings>より3Dアプリケーションとして「3ds Max 2017」を選択し、<Install Unity Integration>ボタンを押します
  • インストール先のプロジェクトを指定すると図のような表示が出て、3ds Max 2017が起動します
FBX Exporterが 3ds Max 2017にインストールされると、メニューバーにUnityという項目が現れます。Unityメニューの中はMayaと同様に<Import>と<Export>の2つコマンドがあります。機能もMayaと同じです
02 3ds Max側の初期設定
  • 3ds Maxの場合でも作業前に単位設定ウィンドウからディスプレイ単位スケールをメートルに修正しておきましょう
  • 各FBXファイルを<Unity→Import>メニューから読み込むと3ds Max上でもMayaと同様に、作業しやすいように各オブジェクトが配置されていることがわかります


































Next Post Previous Post
No Comment
Add Comment
comment url