Table of Contents
3DCGモデリングソフト Blender で作成したアニメーション(アーマチュア)付きモデルをゲームエンジン Unity で取り込む方法についてです。
Unity では Blender のデータファイル(.blend)そのものやFBXなどの形式で出力したモデルを取り込んでシーン内で使用することができますが、いくつかの手順を踏まなければ予期せぬ異常が起こることがあります。
単純なモデルの場合は Blender の試験的機能とされる”Apply Transform“を利用すれば簡単に正常化できますが、アーマチュアを設定している場合は少し面倒なことになります。
取り込んだモデルが巨大化したり、正面を向いていなかったり、回転の値がおかしくなったり……など、このような事態が起こらないようにモデルを取り込むための手順について以下に記載します。
動作を確認したOSやソフトの環境は以下のとおりです。
- Blender(Windows/2.91)
- Unity(macOS Big Sur/2020.2.1f1)
Blenderで行う処理
アーマチュアを設定し、アニメーションを含んだ3Dモデルを完成させたとします。例えば、以下のようなお辞儀をするサンドバッグ(?)を作ったとします。
デフォルトの設定でFBX出力して Unity で取り込んだ場合、スケールが100倍となり回転の向きも89.98度ズレるなどの異常が起こります。
スケールを正常化し、意図した向きを正面(Unityではローカル+Z方向)とするには、出力の前に以下の処理を行います。なお、これらの処理を行う際はアニメーションの再生フレームは 0 のところにしておいてください。
1. モデルの正面をマイナスY方向に向ける
モデルのメッシュと接続しているアーマチュアを選択し、Z方向を軸にして回転させ、モデルの正面が -Y となるようにします。既にそうなっている場合は次の手順に進んでください。
2. 一旦メッシュとアーマチュアの親子関係を解除する
オブジェクトモードでメッシュとアーマチュアの両方を選択し、ショートカットキー[Alt + P]で現れるメニューから”Clear and Keep Transformation“を選択します。
これによってアーマチュアとメッシュの親子関係が解消されますが、後ほど修正します。
3. X軸に-90°の回転を適用
メッシュとアーマチュアを両方選択し、回転値を X = -90 としてください。その後、この回転を適用(Apply)し Rotation の表示が 0° になるようにしてください。
Apply > Rotation によって Transform の Rotation が 0 になればOKです。
3. X軸に+90°の回転を行い、適用はしない
先程の回転と真逆、 X = 90 の回転をメッシュとアーマチュアに入力します。入力はしますが適用はしないでください。
つまり Transform の Rotation には X = 90° となっている状態としてください。
4. アーマチュアとメッシュを再接続
メッシュを選択してからアーマチュアを選択し、ショートカットキー[Ctrl + P]で現れるメニューから”Armature Deform“を選択します。”Armature Deform with 〜“ではないので注意してください。
Outliner でメッシュがアーマチュアの子要素となったことを確認してください。
5. FBX出力
上記の手順を行い、アーマチュアとメッシュが選択された状態のまま Export > FBX により出力を行います。
出力オプションでは、出力対象を”Selected Object“に限定し、”Apply Scaling”では Scale を”FBX Units Scale“に、Forward を”-Z Forward“にします。
6. モデルをUnityに取り込んでみる
Transformの各値やアニメーションなどが適切に出力されているか確認してみてください。
モデルが+Z方向を正面にした状態でアニメーションしました。モデル内のアーマチュア・ボーンのスケールも 1 になっているはずです。
以上、Blender で作成したアニメーション付き3Dモデルを Unity で正常に取り込む方法についてでした。
他にもいくつか方法があるようですので、やりやすい方法を見つけると良いと思います。