【UE5】自作キャラモデルを動かしてみる!
この記事で解説していること
自作キャラをUE5でさくっと歩かせてみたい方向けのメモになります。
(IKリグ・IKリターゲッタを使用してThirdPersonのアニメーションを流用します)
前回の記事の続編として、Mixamoでウェイトを付けてUE5用にコンバートしたキャラクターモデルを使用して解説しております。
汎用的な骨構造だと思うので、Mixamoで書き出していないモデルでもある程度参考にしていただけると思います。
ざっくりとした流れは以下の通りです。
【UE5】ThirdPersonのメッシュと自作キャラモデルを差し替え
【UE5】IKリグ作成
【UE5】IKリターゲットでThirdPersonのアニメーションを自作キャラに使い回せるよう設定
早速やっていきましょう!
※こちらは学習目的のコンテスト『第20回UE5ぷちコン』に参加した際に執筆した個人的な備忘録になります。
ご参考にされる際は自己責任でお願い致します。
環境
Windows10
UE5.2.1
Blender3.2.0
【UE5】ThirdPersonと自作キャラモデルを差し替える
まだUE5で何も作成していない方はThirdPersonでプロジェクトを用意します。
キャラクターモデルもインポートしておきましょう。
今回はこちらのキャラモデルを動き回れるようにしていきます。
ThirdPersonを元に自作キャラを差し替える
まずはコンテンツブラウザ内の
コンテンツ >ThirdPerson >Blueprints >BP_ThirdPerson_Charactor
にあるBP_ThirdPerson_Charactorを複製してください。
わかりやすい名前にリネームします。
私は”BP_Boy01”という名前にしました。
BP_Boy01をダブルクリックして開きます。
①タブをビューポートに切り替えると現在のメッシュが表示されます。
②Mesh(CharacterMesh0)を選択
③Skeletal Mesh Asset のプルダウンを選択
④先程インポートした自作キャラを選択
メッシュを差し替えたらとんでもない化物が誕生してしまいました……。
Animation Mode を”アニメーションアセット”にしたところ、原型を維持したまま差し替えが完了しました!
”BP_Boy01”を操作キャラクターに設定する
UE5メインウィンドウの上メニューから
ウィンドウ >ワールドセッティング にチェックを入れます。
詳細タブの隣あたりに”ワールドセッティング”タブが表示されるので、”Default Pawn Class”に”BP_Boy01”を設定します。
ビューポート上の再生マークからゲームを実行してみます。
Tポーズ固定ですが、十字キー(またはキーボードのW/A/S/D)で操作することができるようになりました。
IKリターゲッタでモーションを使い回す
今度はアニメーションを設定していきましょう。
ThirdPersonで使用されていた、走ったりジャンプするアニメーションを自作キャラクターでも使えるようにします。
異なる構造のスケルトンでアニメーション使いまわすには2種類の方法があるようです。
1つ目は互換スケルトン(コンパチブルスケルトン)を使用する方法で、スケルトンが似通っていてボーン名が共通の場合のみ、こちらの機能でアニメーションの流用が可能です。
設定は簡単ですが、スケルトンの類似性が高い場合でないとこの方法は利用できません。
今回のキャラクターはサイズ感などが結構違うので、試してみたところ↓のようになりました…。
2つ目の方法はIKリターゲッタという方法です。
IKリグを作成することで、ボーン名や構造が違っていてもアニメーションの流用ができるようになります。
今回、こちらの記事ではIKリターゲッタを使用する方法でアニメーションを流用していきます。
※ 互換スケルトン(コンパチブルスケルトン)についてですが、以下の記事で詳しく解説されています。(IKリターゲッタの詳しい解説もあります。)
Mixamoのモデルでいけるかは未検証ですが、自作キャラがグレイマンさんやマニーさんに近い体型の場合は試してみても良いかもしれません。
IKリグを作成する
IKリグでリターゲティングするには、ソースとなるスケルトンとターゲットのスケルトン両方のIKリグが必要です。
しかし、ソースとなるMannyさんのIKリグは、
コンテンツ >Characters >Mannequins >Rigs >IK_Mannequin
に既に用意されているので新たに作成する必要はありません。
そのため、今回はBoy01のIKリグのみ作成していきます。
コンテンツブラウザのなにもないところを右クリックして出てくるメニューから
アニメーション >IKリグ >IKリグ
を選択して新規でIKリグを作成し、わかりやすい名前をつけます。
検証では”IK_Boy01”という名前にしました。
IKリグを開いたら、 Preview Skeletal Mesh に”CH_Boy01”のスケルタルメッシュを指定します。
リターゲットチェーン設定
リターゲットチェーンの個人的なイメージは、DCCツールでキャラモデルにIKを設定する作業に近いと思いました。
肩から手首、足の付根から足首にIKを設定しておくと、操り人形のように手首のコントローラーを動かすことでアニメーションを付けることができます。
細かく設定したい場合は指の関節などまで作成することができますが、今回はあくまで簡易的に大まかな動きが一致すれば良いので、手・足・胴のみリターゲットチェーンを作成していきます。
リターゲティングルート設定
それではIKリグにリターゲティングチェーンの設定をしていきましょう。
まずはリターゲティングルート設定で核となるボーンを指定します。
ルートモーションなどはこちらで設定したボーンが基準となるようです。
一般的には骨盤や臀部のボーンを指定しましょう。
詳しい設定方法ですが、左の階層タブのボーン一覧で”pelvis”を右クリックし、”リターゲティングルートの設定”を選択します。
リターゲティングチェーンの項目に”Retaeget Root”と表示されました。これでルートの設定が完了です。
リターゲティングチェーン設定
次はまず胴のリターゲティングチェーンを追加していきます。
階層タブのボーンリストでCtrlキーを押しながら
spine_01 →spine_02 →spine_03 の順で選択し、右クリックメニューから”新しいリターゲティングチェーン…”をクリックします。
チェーン名を”Spine”に設定して、”チェーンを追加”をクリックします。
右下のIKリターゲティングタブ内のリストに、いま設定したチェーンが追加されていればOKです。IKリグ作成で覚えるのは以上の動作だけです。
あとは同じ要領で他の関節にもリターゲティングチェーンを設定していきます。
右腕
upperarm_r → lowerarm_r → hand_r を選択
”RightArm”という名前でチェーンを追加
左腕
upperarm_l → lowerarm_l → hand_l を選択
”LeftArm”という名前でチェーンを追加
右脚
thigh_r → calf_r → foot_r を選択
”RightLeg”という名前でチェーンを追加
左脚
thigh_l → calf_l → foot_l を選択
”LeftLeg”という名前でチェーンを追加
頭
neck01 → head を選択
”Head”という名前でチェーンを追加
※通常のリギングでは頭、首にIKを付けたことがあまりないのですが、リターゲティングでは使用するようなので作成しました。
※指などもリターゲティングしたい場合は、同じように追加しておきます。
ソルバの設定
次にソルバを設定していきます。
ソルバとはIKの動作を管理する仕組みのようです。
ソルバに関しての詳しい解説は以下をご参照ください。
左下”ソルバスタック”タブ >新規ソルバを追加 >フルボディIK
を選択し、新規ソルバを追加します。
ソルバがリストに追加されました。
”ルートボーンが存在しません”と言われているので、ルートボーンを設定します。
①”ソルバスタック”タブ内にある、先程新しく追加した”フルボディIK”をクリックして選択状態にします。
②”階層”タブ内の"pelvis"上で右クリックします。
③メニューの中から”選択されているソルバにルートボーンを設定”を選択すると"pelvis"がルートに設定されます。
IK目標の設定
ソルバスタックタブのリストで出ていた”ルートボーンが存在しません”という文字は無事消えましたが、今度は”目標が存在しません”と言われています。そのため、IK目標を設定していきます。
この作業はMayaなどのDCCツールで例えるとしたら、IKの手首・足首にコントローラーを置いていく工程に近いと思いました。
まずは左腕のIK目標を設定していきましょう。
先程と同じく”ソルバスタック”タブ内の項目を選択状態にしたまま、”階層”タブ内の ”hand_l” を右クリックし、”IK目標の新規作成”を選択します。
ウィンドウが出ますが、”目標を割り当て”に設定しました。
同じ要領で、右腕、両脚にもIK目標を設定します。
IK目標の設定を行うと、3Dビュー内のキャラクターモデルの手足に黄色いボックスが表示されます。
スケールがおかしかったら
自分の環境では黄色いボックスが異様に大きく表示されるという事態が発生しました。
解決方法
3Dビューで直接ボックスを選択し、右の”詳細”タブ内のトランスフォームのスケールを調整したところ、程よい大きさになりました。(スケール 100→1)
設定が完了したら、”IKリターゲティングタブ”にてIK目標が正しく紐づいているか確認してみます。
Spine,HeadはNoneのままで問題ありません。
もし別のIK目標が入っている場合などはプルダウンメニューで作成したIK目標が選択できるので、正しいものに修正します。
以上でIKリグの作成が完了しました。
キャラクターモデルのセットアップに慣れていれば、UE5のIKリグも似たような工程が多いためすぐに覚えられそうな印象でした。
次はMannyさんのIKリグと”CH_Boy01”のIKリグを使用してアニメーションをリターゲティングさせる、IKリターゲッタを設定していきます。
IKリターゲッタを作成する
コンテンツブラウザのなにもないところで右クリック >アニメーション >IKリグ >IKリターゲッタ
IKリターゲッタ ファイルが新しく追加されるので、わかりやすい名前にリネームします。例では”RTG_Manny_Boy01”としました。
IKリターゲッタ を開くと”ソースのIKリグを選択(アニメーションのコピー元)”ウィンドウが表示され、プロジェクト内に存在するIKリグが並んでいます。
今回はThirdpersonと差し替えを行いたいため、現在Thirdpersonに組み込まれているMannyさんのIKリグを選択する必要があります。
”IK_Mannequin”がMannyさんのIKリグのようなので、こちらを選択します。
また同じようなウィンドウが表示されますが、今度は”ターゲットのIKリグを選択(アニメーションのコピー先)”とのことなので、先程作成した自作キャラのIKリグ”IK_Boy01”を選択します。
IKリターゲッタの設定画面が開かれます。
右下の”アセットブラウザ”タブの中にManequinに設定されたアニメーション一覧が表示されています。
こちらのアニメーションをクリックすることで、キャラモデルがアニメーションします。
Walkなどが確認の際にわかりやすそうです。
重なったモデルをずらす
モデルが重なっていて見づらい場合は、緑色のリングを選択して”詳細”タブから”平行移動オフセット”のXに100ほど数値を入れると見やすくなります。
エラー対応メモ
アニメーションを確認してみたところ、何やら不具合が起きているようです。
・手の角度が違う
→TポーズとAポーズの違いがあるので、Mixamo生成のモデルを使用している方は発生すると思われます。
自作キャラのAポーズを作成する
まずは腕の違和感から修正していきます。
左上にある”ターゲット”を選択した状態で”+ 作成”をクリック
”新規作成”を選択すると”リターゲティング ポーズを新規作成”というウィンドウが出るので、名前をつけて”OK”を選びます。”A_Pose”という名前にしました。
”現在のリターゲットソース:A_Pose”になっていることを確認し、”編集モード”を選択します。
※ 追記 2024/01/07
UE5 5.3では編集モードがEditing Retarget Poseの項目の中にありました
(続き)
3Dビュー上、または”階層”タブから”upperarm_l”を選択し、Mannyさんの腕の角度に合わせていきます。
角度の調整は右の”詳細”タブからも数値で設定が可能です。
60°を入れたところいい感じになりました。
また、上から俯瞰で見るとわかりやすいですが、MannyさんのAポーズは肘が少し前の方へ傾いています。
そのため、自作モデルの”lowerarm_l”と”lowerarm_R”を調整し同じくらい角度をつけてあげましょう。
Zに30°程いれたところ、同じくらいになりました。
エラー修正メモ
はじめに肘の角度を設定しないまま再生したところ、IK目標が伸び切っているためか、動画左右に引っ張られるような動きになってしまいました。
もしも上半身がブレるような動きをしていたら、肘の角度が同じか確認して見ると良いと思います。
指を設定している場合も、初期ポーズが伸び切っているとピンと伸ばした状態になってしまうので、Mannyさんの手の形に似るように回転値を入れると良いです。(指ボーンを選択して一律で 回転 X:20 を入れたら良い感じになりました)
”アセットブラウザ”タブからアニメーションを選択して確認したところ、先程より自然な動きになりました。
でもまだ少し肩がいかり肩のようで違和感がありますが、モデルの調整など必要かもしれないので一旦細かい部分は置いておきます。
追記 2024/01/07
clavicle_l/r 回転 X:20
upperarm_l/r 回転 X:30
程で調整してみたところ、いかり肩が直りました。
なるべくソース元のポーズに合わせておくと変な違和感がなくなるようです。
エラー修正メモ
緑のリングに移動値を入れてずらしておいた場合は、設定が終わったら0に戻しておきましょう。
移動値が入ったままアニメーションのリターゲットを実行したところ、アニメーションブループリントの方にも移動値が入ってしまい、上半身だけずれたような表示になってしまいました。
自作キャラ用のアニメーションブループリントを作成する
リターゲッタがいい感じに動作するようになったので、Mannyさんのアニメーション一式をリターゲットして”CH_Boy01”用のアニメーションブループリントを作成していきます。
コンテンツブラウザ
コンテンツ >Charactor >Mannequins >Animations >ABP_Manny
にあるMannyさんのアニメブループリントデータで右クリックして
アニメーションアセットのリターゲティング >アニメーションアセット/ブループリントを複製してリターゲティング
を選択します。
”アニメーション アセットを複製しリターゲット”ウィンドウが立ち上がります。
右の”IKリターゲッタ”の下のプルダウンメニューから先ほど作成したIKリターゲッタ”RTG_Manny_Boy01”を選択しましょう。
ソーススケルタルメッシュとターゲットスケルタルメッシュにMannyさんと自作キャラモデルが表示されます。
書き出し先のフォルダを指定したい場合は”変更”ボタンから場所を指定することができます。
問題なければ”リターゲット”をクリックします。
ABP_Mannyで使用されていたアニメーションすべてがCH_Boy01用にリターゲットされました。
リターゲットされたアニメーションブループリントはリネームしておきます。”ABP_Boy01”にしました。
プレイヤーにアニメーションを設定する
自作キャラ用にリターゲットしたアニメーションができたので、Tポーズのままステージを歩き回っていたキャラにアニメーションを設定していきます。
ThirdPersonを複製して作成した”BP_Boy”を開きます。
”コンポーネント”タブで”BP_Boy(Self)”を選択しておきます。
”詳細”タブから
Animation Mode: Use Animation BluePrint
Anim Class (プルダウンメニューから) :ABP_Boy01_C を選択
待機ポーズが変わりました。
試しにプレイしてみます。
アニメーションは適用されているのようですが、下半身が動いていません。
こちらaiさんにご助言いただいて解決したので以下にメモさせて頂きます。
不自然なアニメーションを修正していきます。
まずは自作キャラのアニメーションブループリント(ABP_Boy01)を開きましょう。
”コンパイル”をクリックすると”コンパイル結果”タブにコントロールリグ周りのエラーが表示されます。
エラーを選択すると、該当のノードにジャンプします。
”スロット Default Slot”から”出力ポーズ”に線をつなぎ、コントロールリグノードを通らないようにしてからコンパイルし直すと、コンパイルエラーが消えました。
保存してプレイ実行してみます。
下半身が動かなかった状態が修正されました。
エラー解決メモ
プレイを実行して確認していたところ、地面に着地するアニメーションのみキャラモデルが異様に大きくなってしまう現象が起きました。
次から次へと問題が起きますが、めげずに解決していきましょう。
原因となっているアニメーションシーケンスをダブルクリックして開きます。
自分の環境では、着地のアニメーションでのみ巨大化が起きているのですが”MM_Land1”が該当のアニメーションシーケンスのようです。
上のように、正常なアニメーションシーケンスのファイルと比較してみると大きさにかなりの違いがあることがわかります。
(原因のアニメシーケンスファイルの名前がわからない場合は片っ端から開いてみると特定できると思います)
解決方法
問題が起きている”MM_Land1”アニメーションシーケンスを開き、
”アセット詳細”タブ >加算セッティング >Addtive Anim Type
”ローカル空間”になっている部分を”加算”に設定します。
巨大化していたキャラモデルが他のアニメーションシーケンスのものと同じサイズになりました。
しかし、これだけでは実行しても巨大化はなおりません。
アニメーションブループリントの方も設定が必要です。
自作キャラのアニメーションブループリント”ABP_Boy01”を開きます。
”マイブループリント”タブ の”Land(ステート)”をダブルクリックすると、”MM_Land1”というLandアニメーションの再生をするノードが出てきます。
どうやら、”加算を適用”ノードを通すことでスケーリングを調整しているようです。
”MM_Land1” から直接”アニメーションポーズ出力”へとコードを繋ぎ、コンパイルをします。
プレイを実行してみたところ、巨大化せずに着地するようになりました。
・アニメーションシーケンスのAddtive Anim type を”加算”にする
・アニメーションブループリント内の”MM_Land1”ノードを”アニメーションポーズを出力”ノードに直接つなぐ
上記2点を行うことで、巨大化問題を解決できました。
ちなみにABPのみ設定したところ、逆に小さくなってしまったので両方必要そうです。
以上でThirdPersonと自作キャラの差し替えが完了しました!
設定したIKリグはボーン構造が同じであれば使い回せるようなので、Mixamoで作成したモデルは楽に使い回せるかもしれません(今回は未検証です)
長々とお付き合いいただきありがとうございました。
間違った解説などお気づきの方は、お手数ですがご連絡頂けましたら幸いです。(記事の更新・訂正の保証は致しかねます。)
polyCube1
X:@polyCube0
https://twitter.com/polyCube0
参考WEBページ
この記事が気に入ったらサポートをしてみませんか?