LoginSignup
20
14

More than 1 year has passed since last update.

UE5でのリターゲット

Last updated at Posted at 2022-04-11

下準備

UE5から異なるスケルトン間でのアニメーションリターゲットの方法が変更。IKリターゲッタが必須となり、今(5.0.0)のところ従来の手順でのリターゲットはできない(その分利点は多い)
3通りのリターゲット方法があるものの、IKリターゲッタの設定まで手順は同じ。

IKリグ

まずはソースとなるスケルタルメッシュのIKリグアセットを作成する。
ikrig.png
ソース(リターゲット元)となるスケルタルメッシュを指定。
今回はMannyをソースとしてリターゲットする。
MannyはIKリグが予め用意されているが、それを参考として今回は最初からセットアップする。

作成されたIKリグアセットを開く。
ikrig2.png
スケルトンツリー(画像左)から腰(pelvis)を右クリック>"リターゲティングルートの設定"

IKリターゲティング(画像右下)の欄から必要に応じて各チェーンを作成。最低限背骨、四肢、頭部が設定されていればそれらしく動く。

指などの作成が手間な部位は、スケルトンツリーで階層選択→右クリック>"選択ボーンからリターゲティングチェーンを新規作成"で行うと楽。
この辺りは後々プリセットが使えるようになる……といいなあ

ターゲット側も同様にIKリグを作成、設定を行う。
チェーン名を合わせておくと次の工程で自動設定してくれる。

IKリターゲッタ

IKリグ作成時に1つ下にあったIKリターゲッタを作成する。
ikretarget00.png
ソースのIKリグを選択して作成。

作成されたIKリターゲッタを開く。
ikretarget01.png
TargetIKRigAsset(画像右上)にターゲットとなるIKリグを指定するとターゲットがソースの横に並ぶ。

上部の"ポーズの編集"でターゲットのポーズをソースに合わせる。ボーンの表示サイズは詳細から変更可。

チェーン名がある程度合致していれば"チェーンの自動マップ"で合わせてくれる。異なる部分は手動で合わせる。ソース側に該当するチェーンが無い場合Noneにしておく。
ikretarget02.png
アニメーションを選択すれば書き出さずともリターゲット結果をプレビューしてくれる。
おかしな箇所があればポーズの編集やチェーン設定を見直す。

リターゲット方法①アセットメニューから

おそらく従来の一般的な方法に近いのがこちら。
アニメーションアセットのメニューからリターゲットする。
reta01-1.png
アニメーションシーケンス等を個別にリターゲットもできるが、AnimBPをリターゲットすれば内部で参照しているアニメーションアセットも自動的に置換してくれる。
reta01-2.png
IKリターゲッタを指定し、命名規則や保存場所を指定してリターゲット。
20220412_114700.jpg
作成されたAnimBPを開いてみる。
20220412_111133.jpg
アニメーションアセットの参照は置換してくれるがボーンの参照はそうもいかない。
特に足IKを機能させたい場合コントロールリグをどうにかする必要があるが、未履修なので当稿ではこれ以上は触れられない。
ともあれその辺りの処理を飛ばしても差し当たり動くようになる。
20220412_114323.jpg

リターゲット方法②アニメーションテンプレート

アニメーションブループリントを新規作成するとこのような窓が出てくる。
20220412_124708.jpg
テンプレートタブに切り替えて、下部のプルダウンからソースのAnimBPを選択して作成
reta02-2.png
元のAnimBPの継承として作られるが子と違ってスケルタルメッシュの参照を持たず、is TemplateがTrueになっている。
中間素材なので開く必要はない。
reta02-1.png
アセットメニューに"子AnimBPをスケルトンで作成"という項目があるので、ターゲットとなるスケルトンを選択、作成する。そして開く。
20220412_150444.jpg
右上のアセットオーバーライドから親のAnimBPが参照しているシーケンスやブレンドスペースをリターゲットしたアニメーションに差し替えることができる。
ただしAnimBPテンプレートはAnimGraphの編集ができないため、①と同様のボーンにまつわるエラーを解消できない。そもエラーとして表示されない。
追加処理という形であればPostProcessAnimBPで実装できる。
20220412_154840.jpg

リターゲット方法③RetargetPoseFromMesh

概要(個人的解釈)としては、ソースとターゲットを同時に実装し、ランタイムでリターゲットを行うといったもの。
ソースのAnimBPを介していないのでエラーが発生しない。何よりアニメーションアセットの使い回しが可能となる。以下手順。

ターゲットのスケルタルメッシュからAnimBPを作成。開く。
animbp00.png
AnimGraphでRetargetPoseFromMeshノードを作成してOutputへ繋ぐ。
ノードの詳細>IKRetargeter Assetにリターゲッタを指定。


ThirdPersonテンプレートのBP_ThirdPersonCharacterで動かしてみる。
ChaBP01.png
ソースであるスケルタルメッシュの子にする形でターゲットのスケルタルメッシュを追加。AnimBPも設定しておく。
この時点でソースのモーションがターゲットにも投影される。(IKリターゲッタのポーズの編集がONになっていると動かない)

重なったままでは使えないのでソースはVisibleやHiddenInGameで非表示にする必要がある。が、
ChaBP02.png
プレイしてみると待機ポーズで固まったまま滑ったり跳ねたりする。
原因はソースのスケルタルメッシュコンポーネントのここ
ChaBP03.png
VisibilityBasedAnimTickOption を AlwaysTickPose → AlwaysTickPoseAndRefreshBones に
20220412_193930.jpg
動くようになった。
が、今度は接地にズレが生じている。
修正のためIKリグとIKリターゲッタを編集する。おまけ的な部分なので箇条書きで。

①IKリグを開き、左下から新規ソルバを追加>フルボディIK
②腰(pelvis)→選択されているソルバにルートボーンを設定
③pelvis→設定を選択ボーンに追加。追加した設定の詳細から回転の剛性を1に。
④足首(foot)→IK目標の新規作成
⑤foot_Goalをドラッグ&ドロップでつま先ボーンの子に
⑥膝(calf)、腿(thigh)→設定を選択ボーンに追加
⑦ビューでGoalを持ち上げ、calfとthighに追加した設定の詳細から"望ましい角度"を良い感じに設定。
⑧反対側の足も④以降同じように設定
⑨LeftLeg、RightLegチェーンのIK目標にそれぞれを指定。
⑩IKリターゲッタを開き、LeftLeg、RightLegチェーンの詳細>IK調節>BlendToSourceを1、BlendToSourceWeightsを0,0,1、静的オフセットのZを足が接地する値に。

ジャンプモーション等の際に膝が上がりすぎるといった場合は⑩と同項にある"回転のアルファ"を調整する。
20220412_210809.jpg

20
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
14