前回(BlenderでUnity向けにFBXをエクスポート:メッシュ編)から随分と経ちましたが,今回はアーマチュア(ボーン)を含めたUnity向けのFBXエクスポートについてのまとめです
リグを組む前から注意する点があるので,今回も順を追ってまとめていきます。
使用バージョンは2.79b。
準備
手動でアーマチュアをUnityの座標軸に合わせる
アーマチュアはメッシュと違い,エクスポート時のトランスフォームを適用する機能がありません。なのでUnityで配置した時に「Transform」の「Rotation X」に-90のオフセット値が加えられてしまいます。
これを相殺するため,Blender側であらかじめ「回転 X」に[90]を入力した状態にしておきます。
残念ですが,今のところこの対処法しかありません。必ずリグのコントローラーやアニメーションを制作する前に行います。後でこの対処をとるのは困難です。
ルートボーンを配置
必ずアーマチュア直下の原点にルートボーンを1つだけ配置します。Unityにインポートすると,このアーマチュア直下のボーンが「Skinned Mesh Renderer」の「Root Bone」として自動でアサインされます。
ルートボーンは垂直か水平にしておきます。自分の場合は,Blenderでボーンを追加した時の標準が上なので,そのまま垂直に上を向かせています(後述する「プライマリボーン軸/セカンダリボーン軸」の設定に関わってきます)。
頂点に影響するボーン数の制限
Unityでは,頂点が影響を受けることのできるボーンの数は,4本までに制限されます。デフォルトでは「Skinned Mesh Renderer」の「Quality」は[Auto]となっていますが,ゲーム制作では,2本に収めるのが一般的なようです。
ゲームでは通常、ビジュアル品質とパフォーマンスの妥協点となる、2本でのウェイトを使用します - スキンメッシュレンダラー - Unity マニュアル
きちんと負荷を気に掛ける場合は,明示的に設定してコントロールしたほうが良いです。
エクスポートの設定
メインタブ
アーマチュアのトグルをオンにしている以外は,前回のメッシュの時と設定は同じです。画像の通り設定しておけば大体の場面で問題ないかと思います。
設定がアーマチュアに対して大きく影響がある項目は「拡大縮小」「スケールを適用」です。前述しましたが,メッシュの時に座標を変換するのに使った「!実験的機能!トランスフォームの適用」は,アーマチュアに対しては適用されません。
アーマチュアタブ
アーマチュア専用の設定項目です。重要なのでひとつずつ見ていきます。
デフォームボーンのみ
ボーンの「変形」がオンになっているボーンのみをエクスポートの対象にすることができます。
主な用途は,Unityで使わないコントローラーのボーンなどをエクスポートの対象外にします。ちなみにボーンの「変形」がオフでも,オンの上層にあるボーンはすべてエクスポートの対象に含まれます。リグの構造に注意してください。
リーフボーン追加
末端の各ボーンごとに,ヘッドの代わりとして子ボーン(ゲームオブジェクト)が追加されます。
BlenderとUnityのボーンは仕組みが異なり,オフでエクスポートした場合は,末端のボーンにヘッドがありません。
プライマリボーン軸/セカンダリボーン軸
ボーンの軸(ロール)をインポートする環境向けに定義します。
アーマチュアの[表示]にある[座標軸]をオンにして,ルートボーンとUnityの座標軸に照らし合わせて設定します。ルートボーンのノーマル座標軸を参考にしてもOKです。
今回の場合,軸は上を向いているので,「プライマリボーン軸」をUnityの上にあたる[Y軸]に設定。「セカンダリボーン軸」はUnityの座標軸でいう「-X」を向いていますが,Blenderと異なる座標系を考慮して,反対にあたる[X軸]を設定します。
アーマチュアFBXノードタイプ
構造に関する設定のようですが,調べてみても詳細がよくわかりませんでした(Mayaのアトリビュートに関わる設定?)。
どう影響するかだけ試しましたが,どの項目に変更してもUnityでの影響は何も確認できなかったので,[NULL]のままでも問題は無いと思います。
おわりに
まだリリースされていませんが,本手順をBlender 2.8でも試してみました。エクスポートの設定項目はほとんど変わったところはなく,普通にエクスポートでき,インポートもできました。
次回まとめるならアニメーションかなと思っています。シェイプキー(ブレンドシェイプ)はエクスポートしたことが無いので,イチから調べつつ書くことになるのでもっと先になります。