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

BlenderでUnity向けにFBXをエクスポート:アーマチュア(ボーン)編

前回(BlenderでUnity向けにFBXをエクスポート:メッシュ編)から随分と経ちましたが,今回はアーマチュア(ボーン)を含めたUnity向けのFBXエクスポートについてのまとめです

リグを組む前から注意する点があるので,今回も順を追ってまとめていきます。
使用バージョンは2.79b。

準備

手動でアーマチュアをUnityの座標軸に合わせる

アーマチュアはメッシュと違い,エクスポート時のトランスフォームを適用する機能がありません。なのでUnityで配置した時に「Transform」の「Rotation X」に-90のオフセット値が加えられてしまいます。

「Rotation」の値をリセットすると転がるモデルデータ

これを相殺するため,Blender側であらかじめ「回転 X」に[90]を入力した状態にしておきます。

アーマチュアの回転Xに90が入力され,人型のボーンが直立している

残念ですが,今のところこの対処法しかありません。必ずリグのコントローラーやアニメーションを制作する前に行います。後でこの対処をとるのは困難です。

ルートボーンを配置

必ずアーマチュア直下の原点にルートボーンを1つだけ配置します。Unityにインポートすると,このアーマチュア直下のボーンが「Skinned Mesh Renderer」の「Root Bone」として自動でアサインされます。

「Root Bone」に配置したルートボーンがアサインされている

ルートボーンは垂直か水平にしておきます。自分の場合は,Blenderでボーンを追加した時の標準が上なので,そのまま垂直に上を向かせています(後述する「プライマリボーン軸/セカンダリボーン軸」の設定に関わってきます)。

上向きに配置されたルートボーン

頂点に影響するボーン数の制限

Unityでは,頂点が影響を受けることのできるボーンの数は,4本までに制限されます。デフォルトでは「Skinned Mesh Renderer」の「Quality」は[Auto]となっていますが,ゲーム制作では,2本に収めるのが一般的なようです。

ゲームでは通常、ビジュアル品質とパフォーマンスの妥協点となる、2本でのウェイトを使用します - スキンメッシュレンダラー - Unity マニュアル

きちんと負荷を気に掛ける場合は,明示的に設定してコントロールしたほうが良いです。

エクスポートの設定

メインタブ

メインタブの設定項目

アーマチュアのトグルをオンにしている以外は,前回のメッシュの時と設定は同じです。画像の通り設定しておけば大体の場面で問題ないかと思います。

設定がアーマチュアに対して大きく影響がある項目は「拡大縮小」「スケールを適用」です。前述しましたが,メッシュの時に座標を変換するのに使った「!実験的機能!トランスフォームの適用」は,アーマチュアに対しては適用されません。

アーマチュアタブ

アーマチュアタブの設定項目

アーマチュア専用の設定項目です。重要なのでひとつずつ見ていきます。

デフォームボーンのみ

ボーンの「変形」がオンになっているボーンのみをエクスポートの対象にすることができます。

ボーンのプロパティ「変形」

主な用途は,Unityで使わないコントローラーのボーンなどをエクスポートの対象外にします。ちなみにボーンの「変形」がオフでも,オンの上層にあるボーンはすべてエクスポートの対象に含まれます。リグの構造に注意してください。

リーフボーン追加

末端の各ボーンごとに,ヘッドの代わりとして子ボーン(ゲームオブジェクト)が追加されます。
BlenderとUnityのボーンは仕組みが異なり,オフでエクスポートした場合は,末端のボーンにヘッドがありません。

ゲームオブジェクト名に[.end]が追記されたヘッドを示す子ボーン

プライマリボーン軸/セカンダリボーン軸

ボーンの軸(ロール)をインポートする環境向けに定義します。
アーマチュアの[表示]にある[座標軸]をオンにして,ルートボーンとUnityの座標軸に照らし合わせて設定します。ルートボーンのノーマル座標軸を参考にしてもOKです。

UnityとBlenderの座標軸

今回の場合,軸は上を向いているので,「プライマリボーン軸」をUnityの上にあたる[Y軸]に設定。「セカンダリボーン軸」はUnityの座標軸でいう「-X」を向いていますが,Blenderと異なる座標系を考慮して,反対にあたる[X軸]を設定します。

アーマチュアFBXノードタイプ

構造に関する設定のようですが,調べてみても詳細がよくわかりませんでした(Mayaのアトリビュートに関わる設定?)。

どう影響するかだけ試しましたが,どの項目に変更してもUnityでの影響は何も確認できなかったので,[NULL]のままでも問題は無いと思います。

おわりに

まだリリースされていませんが,本手順をBlender 2.8でも試してみました。エクスポートの設定項目はほとんど変わったところはなく,普通にエクスポートでき,インポートもできました。

次回まとめるならアニメーションかなと思っています。シェイプキー(ブレンドシェイプ)はエクスポートしたことが無いので,イチから調べつつ書くことになるのでもっと先になります。

参考