Blenderでキャラクターをモデリングし、アーマチュア(ボーン)を取り付けてデフォルトの設定のままFBX形式でファイルを出力した後Unityに取り込むと、キャラクターのTransformのScaleが大きくなったり子要素のアーマチュアやオブジェクトのX軸が-90度ほど回転した状態になってしまいます。
Scaleは出力設定で調整できますが、角度に関してはBlenderでは前後がY軸、上下がZ軸でUnityでは前後がZ軸、上下がY軸となっていて、その変換が行われる為に起きています。
Unityに取り込んだ際にTransformのPosition、RotationのXYZは全て0、Scaleが1となっているのが理想的なので、今回はその調整を行ってみたいと思います。
ただ、この変換をしてくれるBlenderのアドオンを作成した方がおられますので、そちらを使った方が簡単に行ってくれます。
今回使用したBlenderのバージョンは2.81.16、Unityのバージョンは2019.3.2f1です。
他の人が作ったスクリプトで変換する
まずは他の方が作られた便利なBlenderのアドオンで変換を行う方法について見ていきます。
Blenderのバージョンに合わせたUnity Toolをダウンロードします。
ダウンロードしたらBlenderの編集からプリファレンスを選択し、アドオンタブを選択してインストールボタンを押し、先ほどダウンロードしたZipファイルをせんたくします。
これでアドオンがインストールされました、Object: Unity Toolsアドオンにチェックが入っていれば有効化されています。
ツールの使い方
ここで、キャラクターのモデリングとアーマチュアの作成、モデルとアーマチュアの親子関係の設定とウエイトペイントが既にされているとします。
キャラクターモデルはBlender上で-Y軸を前方とする状態にします。
3D View上でキャラクターモデル(髪の毛や体など全て)とアーマチュアを同時に選択しNキーを押して出てくるプロパティシェルフのその他のSimple rotation fixボタンを押します。
これで角度の変換が完了しました。
FBX形式で出力
角度の変換が完了したのでBlenderメニューのファイル→エクスポート→FBXを選択します。
新しく出てきたウインドウの右側で出力設定を変更します。
今回出力するのはアーマチュアとメッシュだけなのでそれをShiftキーを押しながら選択し、他は解除します。
トランスフォームのスケールを適用をすべてFBXにし、FBXをエクスポートボタンを押して出力します。
他の設定はデフォルトの状態のままにします。
これでFBXファイルとして出力されました。
Unityで取り込んで確認する
出力したFBXファイルをUnityに取り込んだらアーマチュアやモデルのオブジェクトのTransformのPosition、RotationのXYZが全て0、Scaleが1となっているのを確認します。
TransformのPositionに0以外の数値が入っている場合(MakeHumanでアーマチュア付きモデルを作成し取り込んだ場合等)はBlenderに戻ってそのオブジェクトを選択し、Ctrl+Aキーを押して位置を選択します。
回転も適用してしまうとせっかくスクリプトで変換したものが変わってしまうので気を付けてください。
これでスクリプトで簡単に角度を変換して、Unityに取り込むことが出来ました。
自分で回転して合わせる
スクリプトを使うと簡単に出来るので、あえて自分で面倒な作業をする必要はないですが、記録として手作業で角度を合わせる方法も残しておきます。
前提条件としてキャラクターの基点が原点(XYZが0の位置)にあり、-Y軸を正面にしてキャラクターモデルが出来ていて、それに合わせてアーマチュアの作成が完了している状態でまだ親子関係にしていないとします(してある場合は一旦解除し角度調整した後に再度親子関係にします)。
オブジェクトモードでX軸で90度回転させ、編集モードで向きを戻す
まずはオブジェクトモードでキャラクターのメッシュ(髪の毛や体等)とアーマチュアをそれぞれRキー→Xキー→90を押してX軸で90度回転させます。
上のようにX軸で90度回転し、キャラクターの体がうつ伏せ状態になりました。
Shift+Cキーを押して3Dカーソルを原点に移動します。
この3Dカーソルをピポットポイントにします。
3Dカーソルをピポットポイントにしたので回転させると、3Dカーソルを基点に回転します。
キャラクターの体を選択し、Tabキーを押して編集モードにしAキーを押して全メッシュを選択したらRキー→Xキー→-90を入力し、編集モードでキャラクターがまっすぐ立つようにします。
わたくしの場合は目や髪の毛は別のオブジェクトにしているのでそれらも同じようにオブジェクトモードでX軸で90度回転させ、編集モードでX軸で-90度回転させて元の角度に戻します。
アーマチュアも同様に行います。
これらを行うと変更前に立っている状態と同じ状況でX軸に90が表示されている状態になります。
キャラクターモデルのオブジェクトとアーマチュアの回転が終わったらピポットポイントを3Dカーソルから中点に戻しておきます。
ここまで出来たらキャラクターモデルのオブジェクト(髪の毛、目、体)を選択し、最後にShiftキーを押しながらアーマチュアを選択してCtrl+Pキーで親子関係にし、ウエイトを設定します。
FBXの出力設定とUnityでの取り込み
出力設定はスクリプトで変換した時と同じ設定で出力します。
Unityに取り込んでTransformを確認し、PositionとRotationのXYZが0、Scaleが1となっていることを確認します。
これでスクリプトで出力した時と同じようにUnityにキャラクターを取り込むことが出来ました。
終わりに
手動で角度調整をしてUnityに取り込むという事も出来ますが、スクリプトを使うと簡単だし早いですね。
角度調整をする前にアニメーション作成→親子関係を解消→手動でモデルとアーマチュアの角度調整→キャラクターモデルのオブジェクトとアーマチュアを親子関係
という流れでも角度変更前のアニメーションが使えました。
MakeHumanで取り付けたアーマチュア付きのモデルの場合はわたくしが作成したアーマチュアの構造と違ってベースとなるボーンがあってこの記事のように手動で角度調整をするのは難しいです。
でもスクリプトを使うと出来たので、やはりスクリプトを使って調整した方が早いし確実ですね。(^^)/