SOU·COLLE
イラストレーション/デザイン/3DCG/ゲーム開発のお話

BlenderでUnity向けにFBXをエクスポートする時のまとめ:メッシュ編

この記事はBlender Advent Calendar 2018 - Adventarに参加しています。本日は5日目。
前回はsakura🌸(@sakura_rtd)さんのBlender | プロシージャルマテリアル解説動画はじめました - Road to 3DCGでした。

BlenderとUnityを使った制作にもだいぶ慣れてきたので,FBXファイルをエクスポートする時に気をつけていることをまとめたいと思います。
いつも気に掛けているのは,主に「単位」「座標系の違い」「インポートできる内容」「最終出力の把握」あたりです。

実際のワークフローに近い順で追って詳細を書いていきます。
記事の流れは以下の通り。使用バージョンは2.79bです。

  • 制作前に注意すること
  • 制作で気にかけること
  • エクスポート前の確認
  • エクスポートの設定

アーマチュアやアニメーションまで含めると内容がとても膨大です。なので今回はメッシュだけをエクスポートする時の話に絞っています。
アーマチュアなども含めた話も近いうちにまとめようと思っているので,RSSTwitterのをチェックしておいてもらえると嬉しいです。

制作前に注意すること

単位をメートルにする

BlenderとUnityの単位は,1ユニット=1メートルで同一ですが,「プロパティ」の「シーン」から単位を明示的にしたほうが良いです。Unityへインポートした時,File Scaleに微量の端数が出ることがあります。

単位の設定はメートルのままでもOKですが,アニメーションの精度を高くしたいなら倍数を0.01に設定して,1ユニット=1センチメートル,あるいはそれ以下にします。

単位をメートルにして倍数を0.01に設定する

単位は,絶対に後から変更しないほうが良いです。特にIKアニメーションなどをつけた後だと修正がとても困難です。個人・チームプロジェクトに関係なく,初期から一貫した設定をしておくのがおすすめです。

+Y軸をオブジェクトの正面として扱う

BlenderとUnityの座標系の違いとエクスポートの仕様が相まって,エクスポートするFBXの座標系をUnityと完全に合わせることはできないです(詳細は後述)。この差を吸収するには,通常Blenderでは[-Y方向]を正面として扱いますが,便宜上[+Y方向]を正面としてデータを制作しておきます。

スザンヌの正面を+Y方向に向ける

制作で気にかけること

同一オブジェクトを複製する場合はリンクを使う

単にオブジェクトを複製して,そのままエクスポートすると同一の形状であるにも関わらず無駄に個別のメッシュが増えてしまいます。

Unityに限らずBlenderだけでも注意しておきたいです。Unityの場合は,メッシュの数が描画負荷に効いてくるので,同一の形状であるならリンクで複製して同じメッシュデータとしておくのが望ましいでしょう。

オブジェクト(メッシュ)をリンクで複製する

シェーディングの混在は辺を分割する

Unityでシェーディングにフラットとスムースを混在させるには,辺を分割して表現します。シャープと辺分離のモディファイアーを使い,エクスポートの時に分割(適用)すれば管理で苦労することはありません。

エッジにシャープを設定して辺分離のモディファイアでシェーディングにフラットとスムーズを混在させる

UVマップは1つ

Unityで独自のシェーダーでも使用しない限りは,UVマップは1つにします。利用できないわけではないですが,Unityの標準的なシェーダー(Standard.shader)も2つ目のUVマップをメインで利用することは想定されていません。

ポリゴンごとにマッピングを変えたい場合は,マテリアルを複数設定して割り当てるのが良いと思います。

マテリアルを複数設定してポリゴンごとに割り当てる

マテリアルはUnityで設定する

Blenderでマテリアルを設定しても,ほとんどの項目はUnityにインポートされません(ディフューズカラーがアルベドカラーに設定される程度)。前述の通りポリゴンごとに割り当てるマテリアルを設定すれば,それで十分かと思います。

エクスポートされるポリゴン数を把握しておく

モディファイアーなどは,最終的に適用された状態でエクスポートされます。再分割曲面やべベルなど,サブディビジョン・サーフェスでしかモデリングを経験していないと最終的なポリゴン数を勘違いしがちです。

また,インポートする時にポリゴンはすべて三角面化されます。トポロジーに拘りが無いならエクスポートやインポートの時の自動処理にまかせれば十分ですが,意図しない分割にならないよう,自分で分割するか三角面化のモディファイアーで管理しておくのがおすすめです。

モディファイアーは都度適用しなくても設定で適用後の数値を確認することができるので,思うほど管理コストは高くないです。

モディファイアー適用後の数値をチェック

エクスポート前の確認

複数のマテリアルを設定した時は頂点ソートに注意する

Unityにインポートするメッシュのマテリアルの順序は,頂点のソート順によって決められています。FBXをエクスポートする前には,エディットモードに入り「メッシュ要素をソート」で頂点のソート順を自分の意図した状態に管理しておくのが望ましいです。

メッシュ要素をソートでマテリアル順に変更する

以前この内容について書いたので,詳しい方法は以下の記事を参照してみてください。

Unityのマテリアルリストの順序をBlenderで制御する

ただ,この方法では解決しないというケースも見かけました。

Blenderで作成した3DモデルをUnityに取り込む その4 - MRが楽しい

こちらの記事を書いた方は,最終的に問題を解決されているみたいです。無理だった場合は上記のリンク先も参照してみてください。

トランスフォームの値を確認する

エクスポートに限った話ではないですが,オブジェクトモードでのトランスフォームの値が意図したものか確認します。

単体でオブジェクトをエクスポートする時,ほとんどの場合は,位置/回転/拡大縮小はすべてリセットされた状態が望ましいでしょう。

すべてのトランスフォームがリセットされている

エクスポートの設定

設定の内容は以下の画像の通りです。大事な項目だけ説明していきたいと思います。

FBX Exporterのメインの設定

単位の情報を追加

「スケーリング(拡大縮小)」の値を[1]のまま右端にあるトグルボタンをオンにします(最近のバージョンはこれがデフォルト値でしょうか?)。
このトグルボタンをオンにすると,シーンタブで設定した単位の情報がエクスポートされるFBXに追加されます。「スケールを適用」の項目は[全ローカル]のままでOKです。

座標系の変換

前述でオブジェクトの正面の話を書いた時に触れましたが,BlenderとUnityでは座標系が異なります。

Blender
右手系Z-up(Y Forward)
Unity
左手系Y-up(Z Forward)

座標系を変換するには,「前方」と「上」さらに「!実験的機能!トランスフォームの適用」を使用します。この機能から得られる結果は,単にオブジェクトモードで回転させ,その数値をメッシュに適用させているのと変わらないです。つまりこれは,右手をどう回転させても左手と向きがすべて一致しないことと一緒で,Blenderと座標系が異なる環境間での完全な変換は不可能ということになります。

あらかじめ[+Y方向]を正面として扱っていたのはこの問題を回避するためで,ここで前方の設定を逆転させることで辻褄を合わせます。「前方」を[-Zが前方],「上」はそのまま揃うので[Yが上]に設定し,「!実験的機能!トランスフォームの適用」を[オン]にします。

これでインポートした時にトランスフォームの回転に余計な値が入らず,ゲームオブジェクトがUnityの正面(-Z軸方向)を向く状態にできます。

ジオメトリタブの設定確認

デフォルトでオンになっていると思いますが,「モディファイアーを適用」「モディファイアーのレンダー設定を使用」がオンになっているか一応確認します。

FBX Exporterのジオメトリタブの設定

あとがき

Blenderでいい感じにメッシュをエクスポートするにはなかなか大変です。ボーンが絡むともっと大変(というか実はいい感じにはならない……)。今は息をするように対処できていますが,調べて理解するまでに苦労しました。

BlenderでのFBXエクスポートは,ライセンスの関係で正式なエクスポートになっていないので,イレギュラーなワークフローになるのはしょうがないです。正式なSDKを利用したエクスポーターを搭載しているソフトがあるなら,そちらを利用することをおすすめします。

やや悲観的になりましたが,エクスポートに関しては期待していることが一つ。Blenderが2.8になり,Unityも2019.nになれば,glTFというファイル形式を正式に扱えるようになる(はず)と思います。そうなればFBXではなくライセンス上も問題ないglTFでのエクスポートがBlenderでは主流になってくることでしょう。2019年の年末頃にはいい感じのワークフローが確立されているのではないかなーと楽しみです😊(ていうかそうなってくれないと困る😇)。

Blender Advent Calendar 2018 - Adventarは,まだ空いている箇所があるのでお時間ある方は是非参加を!

次回は6日目,MITSUDA Tetsuo(@lab1092)さんで2.79 to 2.80Beta 移行メモ | まんださんちです。