CGBoxの一部の記事にはアフィリエイト広告が含まれております。
UE5でBlenderリグモデルを自由に操作できるようにする方法
こんにちは!
今回は、3DCGソフト「Blender」からゲームエンジン「Unreal Engine 5 (UE5)」にエクスポートしたモデルを、自由に操作できるようにする方法を紹介します。
UE5のノードベースのプログラムである「ブループリント」を使って、キーボード操作とモデルの動きを紐づけて操作することができます。
自分の作ったキャラクターやマシンなどのモデルを、UE5の中で自由に動かせるようにするまでの一連の流れを説明するので、ぜひ参考にしてみてください。
本記事で使用しているBlenderのバージョンは4.2で、Unreal Engineのバージョンは5.4.4です。
他のバージョンでは記事の通りにエクスポートできない可能性があるので注意してください。
Unreal Engineとは?
Unreal Engine (UE)は、米国のEpic Games社が開発したゲーム開発用ソフトウェアです。
高度なグラフィックスやリアルタイムレンダリングなどの最新機能を、直感的に操作できるのが特徴で、ゲームだけでなく映画製作などにも用いられています。
BlenderとUnreal Engineを連携することで、例えばBlenderで作成したモデルをUnreal Engineにエクスポートしてアニメーションレンダリングしたり、ゲームのキャラクターとして動かしたりなど、幅広い創作活動に活用することができます。
ちなみに、現在使用可能なUnreal Engineはバージョン4(UE4)とバージョン5(UE5)がありますが、今から始めるのであれば、2022年にリリースされグラフィックが向上したUE5がオススメです。
こちらのリンク先の記事で紹介している有料講座では、UE5初心者でも分かりやすくUE5を使った風景の作成方法を教えてくれます。
UE5の使い方を学びたい方は、ぜひ購入を検討してみてください。
全体ワークフロー
今回の記事で解説する作業の流れ(ワークフロー)は以下のような感じです。
今回の記事は後半のUE5上での作業の説明がメインですが、Blender上での作業(リグ・アクションの追加、FBXファイルへのエクスポート)についても、過去記事を参照しながら簡単に説明します。
- 【Blender】リグの追加
- 【Blender】アクションの追加
- 【Blender】FBXファイルのエクスポート
- 【UE5】FBXファイルのインポート
- 【UE5】アニメーションブループリントの追加・編集
- 【UE5】ステートマシンの追加・編集
BlenderからUnreal EngineにFBXをエクスポートして、ブループリントを編集する流れは、Yonaoshi3Dさんのこちらの動画を参考にさせていただきました。
BlenderとUEは過去のバージョンですが、分かりやすくまとめられているので、こちらもあわせて参考にしてみてください。
Blenderでモデルにリグを追加しよう!
まずは、モデルを動かすために、Blender上でモデルにボーン(骨)を連ねたアーマチュア(骨格)を追加しましょう。
アーマチュアとコンストレイントからなる、モデルを動かすための仕組みを「リグ」と呼び、モデルにアーマチュアを追加し、ウェイトペイントを使って関連付ける一連の作業を「リギング」と呼びます。
リギングの詳しい説明は本記事では割愛させていただきますが、リギングの基本的な方法についてこちらの記事で詳しく解説しているので、あわせて参考にしてみてください。
Blenderでアクションを作ろう!
リギングが完了したら、リグにキーフレームアニメーションを追加します。
Blenderでは、一連のキーフレームアニメーションをまとめた「アクション」を登録することができます。
アクションの作成・編集・活用方法については、こちらの記事で解説しているので、あわせて参考にしてみてください。
今回は、以下の2つのアクションを作成します。
- Walk…歩行モーション
- Wait…待機モーション
以下のようにアクションエディターで2つのアクションを作成・保存しました。
BlednerからFBXファイルをエクスポートしよう!
BlenderからFBXファイルをエクスポートする前に、いくつか注意点があります。
- メッシュオブジェクトのトランスフォームを適用する
- テクスチャは、FBXファイルと同じ階層に保存
- アーマチュアのオブジェクト名を「Armature」以外の名前に変更
- アーマチュアの親ボーンの名前を「Root」に変更
まず、FBXファイルにエクスポートする前に、メッシュオブジェクトのトランスフォームは適用しておいてください。
オブジェクトモードでメッシュオブジェクトを選択し、「Ctrl+A」→「全トランスフォーム」でOKです。
また、テクスチャはFBXファイルと同じ階層に保存しておくと、UE5にFBXファイルをインポートする際にテクスチャも自動で読み込まれるので便利です。
(テクスチャをあとからUE5にインポートする方法については、のちほど紹介します。)
リグ付きのモデルをエクスポートする場合は、アウトライナーからオブジェクト名をデフォルトの「Armature」から変更してください。
「Armature」のままでも一応読み込めますが、UE5でスケールが反映されないなどの問題が起きる可能性があるので、別の名前に変更しておいてください。
さらに、Unreal Engineへのインポート時にアーマチュアの階層構造が正しく認識されるように、すべてのボーンの親になっているボーンの名前をデフォルトの”Bone”から”Root”に変更しておいてください。
以上の準備が終わったら、FBXファイルをエクスポートします。
BlenderからUE5用にFBXをエクスポートする方法については、以前の記事で詳しく説明しているので、こちらをご覧ください。
UE5にFBXファイルをインポートしよう!
ここから先は、UE5での作業に移ります。
UE5のインストール方法についてはこちらの記事で紹介したので、参考にしてください。
サードパーソンプロジェクトの作成・起動
Epic Games LauncherからUE5を起動します。
UE5が起動すると「プロジェクトブラウザ」の画面が表示されるので、新規プロジェクトを作成します。
今回は「ゲーム」から「サードパーソン」を選択してください。
新規プロジェクトファイルの作成が完了すると、 UE5の操作画面「レベルエディタ」が表示されます。
「サードパーソン」のテンプレートは、既にキャラクターを動かす設定された状態になっています。
ヘッダーのボタン(または「Alt+P」)をクリックすると、デフォルトで設定されているロボットを操作することができます。
以下のようにキーボードとマウスで操作することができます。
- W・D・A・Sキー:前後左右に進む
- マウス操作:進む方向・カメラの向きを変更
- Space:ジャンプ
- Esc:終了
FBXモデルのインポート
FBXモデルをUE5にインポートします。
「ファイル」→「レベルにインポート」を選択します。
FBXファイルを選択し、インポート先の階層を設定すると、インポートオプションメニューが表示されます。
キーフレームアニメーションを含むファイルをインポートする場合は、「スケルタルメッシュ」タブの「Inport Animations」にチェックを入れます。
「インポート」を選択すると、モデルがUE5にインポートされ、こちらのように、レベルエディタ上に表示されます。
「ブループリント」でモデルとアニメーションを定義しよう!
UE5のファイルブラウザにインポートしただけでは、モデルを操作することはできません。
モデルを自由に動かせるようにするには、キャラクターの操作を定義した「ブループリント」を書き換える必要があります。
「ブループリント」とは、日本語に翻訳すると「設計図」のことで、UE5上ではこちらのようなノードベースのプログラムのことを指します。
サードパーソンのテンプレート内には「BP_ThirdPerson」というブループリントがあり、ここにキーボードやマウスの操作をキャラクターやカメラの動きに変換するためのノードが組み込まれています。
メッシュの差し替え
まずは、モデルのメッシュを差し替えましょう。
「Ctrl+Space」でコンテンツドロワーを開き、「コンテンツ」>「ThirdPerson」>「BluePrints」のフォルダ内の「BP_ThirdPerson」をダブルクリックで開きます。
「イベントグラフ」のタブを選択するとノードが表示され、「ビューポート」のタブを選択するとキャラクターと当たり判定を示すカプセル、そしてカメラのプレビューが表示されます。
まずは、ビューポートの画面上でキャラクターを選択し、画面右の「詳細」から「メッシュ」を差し替えます。
「SKM_Quinn_Simple」から、インポートしたメッシュ(今回は「Penguin」という名前にしています)に変更します。
スケールが小さいので、ビューポート画面上でカプセルのサイズに合わせて拡大しました。
「コンパイル」をクリックして、レベルエディター上でプレイすると、キャラクターがBlenderからインポートしたモデルに置き換わりました。
アニメーションブループリントの追加
次に、モデルのアニメーションをUE5上で再生するための「アニメーションブループリント」を追加します。
コンテンツブラウザーを開き、モデルを保存したフォルダ内で右クリックし、「アニメーション」→「アニメーションブループリント」を追加します。
スケルトン(アーマチュア)を選択する画面が開くので、Blenderからインポートしたモデルを選択し、適当な名前を付けて保存します。
追加したアニメーションブループリントをダブルクリックをして開きます。
「AnimGraph」のタブに、アニメーションを定義するためのノードを追加していきます。
コンテンツブラウザから、「Walk」と「Wait」のアニメーションシーケンスをドラッグアンドドロップで追加します。
ノードをつなぎかえることで、再生されるアニメーションが切り替わります。
アニメーションのループ再生が無効になっている場合は、「詳細」→「設定」→「LoopAnimation」のチェックをONにしてループ再生を有効にしてください。
レベルにアニメーションを反映するためには、再度サードパーソンのブループリント上で設定が必要です。
「BP_ThirdPerson」を開き、モデルを選択して「詳細」→「Animation」→「Animクラス」で追加したアニメーションブループリントを選択し、「コンパイル」します。
レベルエディター上でプレイすると、こちらのように歩行アニメーションが再生されます。
条件分岐:「ステートマシン」を定義しよう!
いちどアニメーションシーケンスを削除して、条件分岐を表現すためのノード「アニメーション」→「ステートマシン」を追加します。
ステートマシンとAnimationを接続し、ステートマシンを作りこんでいきます。
ステートの追加
ステートマシンのノードをダブルクリックすると、ステートマシンの中身が表示されます。
デフォルトの状態では、シーケンス開始を示す「Entry」というノードだけがある状態になっています。
Entryからドラッグアンドドロップでコネクターを伸ばして、「ステートを追加」を選択します。
「ステート」とはキャラクターの動作の状態のことで、待機、歩く、ジャンプなどのキャラクターの動作の状態にアニメーションを関連付けるために使われます。
最初に追加したステートへは無条件で遷移するため、このステートを「Wait」と名付けて待機モーションを関連付けます。
「Wait」をダブルクリックしてWaitのステートの内容を定義します。
コンテンツドロワーから「Walk」のアニメーションシーケンスをドラッグアンドドロップして、「Output Animation Pose」に接続します。
ループアニメーションにチェックが入っていない場合は設定を行ってください。
次に、歩行アニメーションのステートを追加します。
「Wait」からドラッグアンドドロップでステートを追加し、「Walk」と名付けます。
WaitからWalkへの矢印には、条件付きで遷移することを示すのアイコンが付けられています。
この条件については後程設定します。
また、Walkから一定条件でWaitに戻るために、ドラッグアンドドロップでWaitに戻る矢印を追加しておきます。
Waitと同様、「Walk」のステートメントをダブルクリックし、Walkのアニメーションシーケンスを追加して「Output Animation Pose」に接続します。
トランジションルールの追加
WaitからWalk、WalkからWaitに遷移するための条件(トランジションルール)を設定します。
モデルの動くスピードが、ある一定の値を超えたときにWalkのモーションになるように設定します。
まず、WaitからWalkのアイコンをダブルクリックします。
モデルの動くスピードを表すための変数を追加します。
画面左下の「マイブループリント」→「変数」の横の「+」マークをクリックして変数を追加します。
「Speed」と名付けて、タイプを「Boolean」から「Float」に変更します。
Speedをドラッグアンドドロップして「Get Speed」を選択し、ノードを追加します。
スピードがしきい値を超えたときにWaitからWalkに遷移するようにしたいので、「Speed」からドラッグアンドドロップでノードを追加し、「>」と入力し「Greater」ノードを追加します。
値を0.1に設定します。
ステートマシンに戻り、今度はWalkからWaitのアイコンをダブルクリックします。
変数Speedをドラッグアンドドロップし、今度は「<」と入力し「Less Equal」(≦)ノードを追加します。
こちらも値は0.1に設定します。
以上で、ステートマシンの設定は完了です。
速度の取得
最後に、フレーム毎にモデルの速度を取得する設定を行います。
アニメーションブループリントの「イベントグラフ」のタブを開きます。
デフォルトだと以下の2つのノードがグレーアウトされた状態になっていますが、ノードを繋げることでアクティブになります。
- Event Blueprint Update Animation:フレーム毎に取得したアニメーション情報を更新する
- Try Get Pawn Owner:アニメーション情報を出力する
ちょっと複雑ですが、以下の手順に従ってノードを追加していきます。
「Try Get Pawn Owner」ノードと「? Is Valid」ノードも接続しておきます。
速度ベクトルを取得します。
速度のベクトル(X,Y,Z方向の速度)をスカラー量(速度の絶対値)に変換します。
「Is Valid」と「Vector Length」からそれぞれ「セット」に接続すると、取得した速度が変数「Speed」に格納されます。
「ファイル→すべて保存」を選択してコンパイルすることで、レベルにアニメーションが反映されます。
こちらのように、止まっているときは待機モーション、動いているときは歩行モーションが反映されるようになりました。
ちなみに、ステートマシンで条件分岐をさらに追加することで、こちらのように停止→歩行→ダッシュの3段階のアニメーションを切り替えたりできるので、ぜひいろんなアニメーションを追加してみてください。
まとめ
今回は、Blenderで作成したリグモデルをUE5で自由に操作できるようにする方法について紹介してみましたが、いかがだったでしょうか?
「ブループリント」や「ステートマシン」など、聞きなれない言葉が色々と出てきて、UE5が初めての方には難しかったかと思いますが、自作のモデルをゲームのように自由に動かせるようになるのはすごく面白いので、ぜひ試してみてください!