[UE5] Unrealアニメーション大全5.4 ~多分これが一番動くと思います~

Post 2024年4月27日土曜日

UE4 UE5 Unreal Engine アニメーション よく分かれ解説

正確に言えば

(アニメーション初心者が語る)(独断と偏見による)アニメーション大全

になります。

実際はアニメーション入門という名前が正しいのでしょうけど、なんとなく大全のほうがかっこいいので…。


とにかくアニメーション周りはアセットの種類が多いし、テクノロジーも多くて分かりにくい!!(私は)


なので自分の備忘録としてUnreal Engineのアニメーション周りのことを記事にしました。

新しい情報が入ってきたら常に更新していきます。


お約束
この記事作成にあたって使用した主なUnreal Engine バージョンUE5.4.0 (Experimental)

本日のゴール

アニメーションについてちょっと理解する


アニメーションの全体像のおさらい

まずはUnreal Engineのアニメーションに関する全体像についておさらいしておきましょう。間違いがあったらコメントで教えて下さい。

あと、今回は初心者向けに大雑把に解説しているのでそれはご了承ください。(ゴニョゴニョ)


まず、アニメーションには基本的にスケルタルメッシュが不可欠です。

スケルタルメッシュとは何かといえば、骨(Bone)の情報が格納されたメッシュのことでした。

色はアセットの色となんとなく合わせています

キャラクターのアニメーションとは、骨(Bone)をどう動かすかの情報になるわけです。Unreal Engineでは「アニメーションシーケンス」というアセットになります。シーケンスとは手順書という意味なので、つまりスケルトンをいつどのように動かすのかの手順を書いた紙と思ってください。

結果的に、アニメーションシーケンスを適用すれば、スケルタルメッシュを動かすことができます。

なんだよ、めちゃめちゃ簡単じゃないかと思ったそこのあなた。

そうなんですよ。ゲーム以外だったら、工夫すればアニメーションシーケンスだけでアニメが作れちゃいます。

※作ったことないやつが言うなよというツッコミは禁止

しかし、ゲームだと状況に応じてどのアニメーションを再生するかを決めてやらないといけません。この機能を司るのが、アニメーションブループリント(BP)でした。


状況に応じてどのアニメーションを再生するか」とは具体的にどういうことか?

例えばジャンプのボタンを押したらジャンプの準備のアニメーションシーケンスを再生し、

空中にいる場合は飛んでるアニメーションシーケンスを再生する、

などという感じです。

コントローラーの入力や、キャラクターの速度、場所などによって再生するアニメーションを変えます。


ポイントとしては、

●スケルトン

●スケルタルメッシュ

●アニメーションシーケンス

●アニメーションBP (※作り方による)

はそれぞれのみ対応しており、他のスケルタルメッシュには基本的に適用できないということです。(※適用する手段であるリターゲットについては後述)


実際に、スケルタルメッシュを開くと対応するアニメーションシーケンスとスケルトンを開くボタンが現れます。




また、最近は、GameplayAbilitySystemによってアニメーションを再生するやり方も流行りの一つです。

もちろんアニメーションBPだけでも、すべてのアニメーションの制御はできるのですが、プレイヤーの入力に対するアクションに対してはGASはいろいろな面で優れています。
(例えば、攻撃中にはジャンプができない みたいな処理がすごい簡単に管理できます。排他処理ってやつですね。)

なので最近は

●アニメーションBPは状況に対するアニメーション (空中にいる、水中にいる、待機中)を再生する役目が多く、

●入力に対するアニメーション(ジャンプ、攻撃、防御など)はGASが担っているケースも多いです。

まあここは好みです

また、走ったりするときは速度によって段々と走っているモーションにしたいと思うのが人情でしょう。つまり、複数のアニメーションを合成して、あるパラメータで合成具合を調整するということをしたいわけです。これをやるのが「ブレンドスペース」です。


ブレンドスペースで、どれくらいどっちを合成するかを制御するのは、だいたいアニメーションBPが管轄することが多いです。

(なので、走るアニメーションはアニメーションBPで制御するべきなのか、GASで制御するべきなのかよく議論になります。)



まだ終わりじゃありません。このままではキャラクターのコリジョンが設定されていないからです。このコリジョンを設定したりするのが、物理アセット(Physics Asset)です。モコモコしているやつです(笑)。



これまで説明してきたのが、UE4から連綿と続くアンリアルエンジンのアニメーション周りの仕組みとなります。

(ただ、アニメーションBPの書き方はUE4時代から大きく変わったので注意が必要です。)

そのほか、よく使うアセットにアニメーションモンタージュがあります。アニメーションアセットでありながら再生するアニメーションに場合分けができるアセットで、コンボ攻撃などに役立ちます。
アニメーションモンタージュも、同様に対応するスケルタルメッシュが決められています。



UE5での進化ポイント:ブレンドスペース

先程のブレンドスペースですが、これが非常に変わってきています。3つのアニメーションシーケンス合成みたいなことは以前からできていたのですが、上半身だけの合成、みたいなことができるようになっていますし、ボーンごとにどの程度混ぜるかを調整する機能が追加されてます。(Blend Mask)

結構めんどくさいので、丁寧にいじるかた以外は気にされずにスルーするかなと言うことろはありますけど。

一番大きいポイントとしては、ブレンドスペースというアセットを作らなくてもアニメーションBPの中のノードでブレンドスペースを作ることができるようになった点ですかね。大分使いやすくなった気がします。

アニメーションBPの中でBlendSpaceをつなぎます。なんのパラメータで合成比率を変えるかはこの緑色のところにつなぐ。

BlendSpace1Dノードをダブルクリックして、ここにアニメーションシーケンスを放り込めば合成可能。


UE5での進化ポイント:アニメーションBP

アニメーションBPはかなり変わりました。

まず前述したGASの台頭により、入力に紐づいたアニメーション制御の座は奪われつつありました。アニメーションBPは廃れるのかと思われましたが、それは杞憂。一回り大きくなって帰ってきたのです。

先ほどもいった、「状況に対するアニメーションの適切な選択」に加え、アニメーションの微修正も担当範囲であるため、どちらかというとこれに集中するような設計になっています。

例えば後述する、「Template Animation BP」は、アニメーションBPが乱立して理由がわからなくなる現状を考えて作られたもので、Templateとなるブループリントでアニメーションの骨子を作っておき、その子となるアニメーションレイヤー側でキャラごとの設定をするという感じです。

進化したのはState Machine(ステートマシーン)という、先ほど申し上げた"状態"によってアニメーションを変えるためのノードになります。この説明だけで多分1記事作れるな…。

新しくなったState Machineの記述

参考になるブログ記事を貼り付けておきます。

【UE5】State Alias を使ったアニメーションステートの制御 | トンコツ開発ブログ



Unreal Engineが提供するいろいろなアニメーション機能

さて基本を説明したということで、Unreal Engineが提供する素晴らしい機能を見ていきましょう。

参考:猫でも分かる UE5.0, 5.1 におけるアニメーションの新機能について | CEDEC+KYUSHU 2022

※Experimental(実験的)機能も含まれています。ご注意ください。


なんじゃこりゃ、ワシを殺す気か?

しかも、これで全部説明できたわけではないという恐ろしさ。

これを全部説明するには、あまりに余白が足りないのでできません。

ブログなんだから余白なんて無限大だろいい加減にしろ。

普通に触ったことのない機能めちゃめちゃ多いです。(これプロの人って全部触ってるのかな。)

この中でも私的に使える機能、今後使いたい機能にフォーカスして説明していきます。


Anim Notify

この中では最も基本的な機能になりますかね。

実は標準で使われています。


これです。

これはアニメーションシーケンスを開いたところですが、なんか緑色のマークがありますね。このマークがAnim Notifyで、要するに通知です。

Anim Notifyするたびに実行するブループリントを作成できるので、やれることは無限大ですが、主にやることとしては例えば「足音を鳴らす」ですかね。あとはコンボ攻撃を実装するなどにも使われますね。

初級編11 3Dモデルのモーションに音をつける

44. Anim Notifyによるアニメーションの特定のタイミングで処理をするような独自のロジック | Zenn[ちゃんす]


リターゲット

リターゲットというのは、Unreal Engine歴が長い人なら聞いたことがあるんじゃないかなと思います。

リターゲットとは、とあるスケルトンを持っているスケルタルメッシュに登録されている、アニメーションシーケンスを、別のスケルトンを持っているスケルタルメッシュ用に作り変える機能のことをいいます。

先ほどアニメーションシーケンスとは、Boneをいつどこでどう動かすのかを書いてある手順書であるといいました。この手順書を、別のキャラでそのまま使い回すのは無理があるってものです。(骨の大きさが違ったり、そもそも骨の名称や数が違う場合がある)

そこでアニメーションシーケンスを、別のキャラで使えるように読み替える作業という感じですね。

リターゲットはアニメーションシーケンスを右クリックしてリターゲットするを選べばできます。(以前に比べると格段に簡単なんですけどね)

あの方が動画化していたので、紹介します。

ただリターゲットは、アニメーションシーケンスを変換してそのキャラ用に新しいアニメーションシーケンスを作る作業なので、キャラが多いとどんどんアニメーションシーケンスが増えていきます。これは大変です。

なので、後述のIKリターゲッター / Compatible Skeltonの出番になります。



IKリターゲッター

IKリターゲッターではリターゲットをプレイ中に実行ができます。プレイ中に作成したキャラとかに対してもリターゲットをすることが可能。これで人外のキャラクターですら、人のアクションを使えたりするらしいです(できない場合ももちろんある)。すごい時代になったもんだ…

ただそれなりに負荷がかかるらしく、何百体も同時に起動するのはやめたほうがいいらしいです。

使い方の順序としては、

① IK Rigの作成 (リターゲットの対象と参照先それぞれについて)

② IKリターゲッターの作成

③ IKリターゲッターをアニメーションBPに適用

という順序になります。ちょっとそれぞれが面倒な手順になります。


IKリターゲッターの利点と欠点

【欠点】

IK Rigとリターゲッターアセットの作成が結構めんどくさいです。

【利点】

非常に高い精度のリターゲットが可能。リターゲットの精度を上げたい場合に必要。

IKリターゲッターを使う場合は、アニメーションBP、アニメーションシーケンスの使いまわしが可能。


なので、次に話すCompatible Skeltonをまず試してみて、もっと精度が必要ならこちらのIKリターゲッターを使うことを検討するイメージでいいと思います。


【IK Rigの作り方】

基本的にはおかずさんが解説されているこの動画の通りです。

Lyraには、UE4マネキンからUE5MannyにリターゲットするためのIK Rigがマネキン及びMannyそれぞれで作成済みなので、それを見ながら作成していくことになります。


また、もしも、IKリグを作成したいキャラクターのBoneの名称と構造が全く同じであれば、IK Rigの使いまわしが可能です。

ほとんど販売されているアセットはUE4スケルトンに互換性があると思います。UE4スケルトンのIKリグをコピーしてスケルトンを変更して特にエラーが出なければ使い回せると思います。まずはこれからやってもいいかも。


以下、普通に作る場合についても記載します。

まずIK Rigを作成したいキャラを右クリックして、IK Rigを作成を選択します。


IKリグをいじります。

① Retargeting Rootの選択

左上のBone一覧画面から、Rootを右クリックしてリターゲットルートを設定します。Rootがない場合は…Pelvisとかを指定する...んですかね?


② IK Solverの選択
次に作成するIKの種類を選択します。IKソルバスタックから新規ソルバを追加します。特にこだわりが無ければフルボディIKにします。


③ Pelvisに対して、Solverの適用範囲に設定して、Solverのルートにする
「設定を選択ボーンに追加」をやったあと「〜〜 ルートボーンを設定」

こんな感じの見た目になる



④ IKゴールを作成
IKの目標を作成します。手足に設定します。UE4スケルトンと同じなら4箇所になりますね

⑤ あとはひたすらにリグを打っていく
あとはリグをひたすらに打っていきます。打つ数はUE4マネキンのIKを参照。一応全部載っけておきます。

上記と同様に、リグを打っていきます。

IKリグの打ち方ですが、上を見ると「開始ボーン」と「終了ボーン」とあります。
開始ボーンから終了ボーンを選択した状態で、新しいリターゲットチェーンを作成を選択します。※手足の場合は④で作成したIKゴールも含んで選択します。
その後なにか出てきます。何も考えずに一番左のチェーンを追加で大丈夫です。

これをひたすらにやります。Rigの名前も重要になるので、必ず同じにしてください。

⑥Solverの適用範囲を追加
UE4マネキンのIKを見ると上記の通り、緑色になっているところはSolverの適用範囲になっています。
なのでボーンを選択して右クリックで「設定を選択ボーンに追加」を選択するんですが、②で作ったIKソルバーが選択状態でないと、追加を選べないので注意。

これでリグの設定は終了。
次にリターゲッターの設定に移ります。

【リターゲッターの作成】

まずリターゲッターを作成します。

IKリグを右クリックして作成も可能なんですが、その場合は今作成したターゲット側のIK Rigではなく、UE5 MannyのIKリグを右クリックして作成します。


Source(ソース)に UE5 MannyのIK Rig (これはLyraのサンプルの中にあります)を設定し、

Targetに今作成したご自分のIK Rigを設定します。何やら下記の案内が出るのでいいえを押しておきます。


こんな感じで両者が重なった状態で表示されるはずです。


その際に、前項④で作成したIK Goalが黄色い四角で表示されていると思います。ここがIKリターゲットで、リターゲットの対象のキャラとUE5Mannyのそれぞれの位置を合わせる目標になるので、両者の手足が重なるように調整していきます。

LeftLegを選択した状態でオフセットを調整する、これをGoal毎に実施する

これでリターゲッターの作成は終わりです。


【アニメーションBPの作成】

あとはアニメーションBPに反映するだけです。これは簡単。

Retarget Pose from Meshでアセットはさっき作ったリターゲッターを指定するだけ
これだけです。これだけで、手足の位置が合うようなリターゲットが簡単に実装できます。以下で解説するCompatible Skeltonに比べると手順が多いので大変ですが、リターゲットの質を向上したいのなら必須の機能ですね。


Compatible Skelton

アニメーションのアセットを購入してきて、UE5標準あるいはUE4標準のマネキンに適用したアニメーションなのに、なぜか自分のところのマネキンで使おうとしたらリターゲットが必要だった経験ってありませんか?

これはUE5側はこの2つが同じものだ、と判別できる手立てがないからなんですよね。

だったらそういう手立てを作ってしまえよ、となってできたのがこのCompatible Skeltonです。

スケルタルメッシュに登録されている骨(Bone)構造が (ほぼ)同じであれば、同じアニメーションシーケンスを使うことができます。やり方は簡単で、スケルタルメッシュを開いて、このスケルタルメッシュAはこのスケルタルメッシュBとコンパチだよ(互換性があるよ)と設定してあげるだけ。これだけ。

[UE5] Lyra改造計画③  Compatible Skeltonを使い、超速で買ってきたアセットをLyraで使用する

これの良いところは、アニメーションシーケンスが多くならないので、管理が非常に楽になります。ただもちろん悪いところもあって、いくらスケルトンが似ている構造だとしても、若干スケルトンに違いがあったり、肉付きの良さ/悪さでアニメーションが破綻することがまあまああります。

破綻までいかなくても、ちょっと崩れたりとか。銃を構えるアクションではあるキャラではちゃんと収まってるのに、あるキャラでは収まらなくてうーんみたいなことがよくあります。

そこで、アニメーションをちょっとだけ修正したいなぁみたいな需要が生まれるわけです。そこでRigの出番です。


Control Rig / IK Rig / FK Rig

参考:UE5のIK的なアレソレコレドレ

一般的に、動物の骨というのは基本的に関節を使うことで腕や足を曲げることができます。それぞれの関節は曲げられる限界角度だったり、可動域があります。

Rig とは3Dモデルを動かす仕組みのこと。


Control Rigとは 手動で自由自在にモデルを動かすことができるアセットです。ノードを組んで自動で動かすこともできます。自分でアニメーションシーケンスを作ることもできますし、既存のアニメーションシーケンスに重ねることで、Control Rigで動きを修正する、なんてこともできます。また、あるアニメーションシーケンスを「Control Rig Backwards Solve」で解析して、完全にControl Rigだけで弄っていくみたいなことすらできます。おかずさんがおっしゃるように、Control Rigで弄った結果をアニメーションシーケンスに反映する「Linked Animation Sequence」の機能で即時反映をすることができます。


一方でIK Rigとは何でしょう?IKとは「Inverse Kinematics(逆運動学)」の略です。例えば指先の位置から逆算して手首、肘、肩の位置を決める計算のことだと考えてくれればいいです。IK Rigで最も基本的な使い方は、LegIKでしょう。階段とか坂に足がピタッとなるあれ。


イメージとしては、Control Rigは手動で動きをつけるのをメインで、IKはモノや動作に対して最適な関節の位置を(自動的に)定めるというイメージなんですがややこしいことに実はControl RigでもIKを使えます。というか実は標準のMannyなどで既に使われています。

なので、Control Rigは何でも屋、IK Rigは限定された用途に使うと思っていただけばいいかなと思います。それこそLeg IKとかはIK Rig(や後述するFoot Placement)を使ったほうが楽で簡単ですが、標準がControl Rigを使っていることから何か意図を感じてしまいますね。UE5のIK的なアレソレコレドレでも書かれていますが今はIK RigはIKリターゲットのための下準備的な意味合いが強いようです。足を坂にピタッとつけるだけならIK Rigのほうが使いやすいですけど。

要するに、基本的にはControl Rigをつかいましょうということです。

標準のUE5のManny & QuinはControl Rigが有効で、Full Body IKが足に適用されている

オフにすると段差や坂で足がピタッとしない

アニメーションBPをチェックするとたしかにControl Rigのノードが挟まってますね。ダブルクリックすると中身を見れますが、なかなかカオスです。


ただしControl Rigには面倒な事が一個あります。Rigを打つ必要があります。(まあIK Rigにしたって要るんですけど)

Rig、つまり動かすポイントは自分で作ります。Pythonを使って半自動化することなども一時期流行りました。

Mannyに対して打たれているRig

Rigをうつのってやってみればわかりますが、結構大変なんですよ。苦行に近い。

そこでそれを解決するのがUE 5.4から追加された「Modular Control Rig」(ただし実験的機能)なんですね。

Modular Control Rigは人形で決められた関節の情報を持ってきて当て込むだけの簡単実装。

これだけでControl Rigが実行可能になります。UE 5.4でコントロールリグを作成すると選ぶ欄が出てくるのでここで選択するだけです。



Control Rigを作成したら、作成したControl Rigをレベル(どこかのワールド)にドラッグドロップすれば、自在にスケルタルメッシュを動かすことができます。
その際にシーケンサー(要するに動画用の画面)が出てくるので、コマ打ちをすればアニメーションを作成できます。
もちろんControl Rigは人型に限りません

Unreal EngineではControl Rigのサンプルもひっそりと公開中なのでぜひ触ってみてね。上の龍も触れますよ。

ちなみに、我流でControl Rigによる既存のアニメーションの修正をやってみたのですが、アニメーションBPでControl Rigによるアニメーションの修正はあまり現実的ではないかもしれません。
やっぱり一度アニメーションシーケンスにしないといけなさそうです。
一応供養として、やり方を書いておきます。
既存のPose Assetに対して、特定のBoneだけControl Rigで修正を加える

Layard Blend Per Boneの設定はこんな感じ



腕だけをControl Rigで修正できた。

ただ、私のやりたかったのはこういうことじゃなくて、既存のアニメーションに加える形での効果だったんですよね。もしかしたらできるのかもしれませんが、私の力量では無理でした。

※もちろんBlendは試しましたが、これでも意図した挙動にはなりませんでした。Blendした場合は、既存のアニメーションとControl Rigで作ったあポーズとの合成になります。


Contextual Animations (加筆予定)

いやいや、モノにたいして動くアニメーションを修正したいというならControl Rigもいいけど僕がいるよ!ということで紹介しておきます。

車に乗ったり、ドアを開いたりするというアニメーションを修正する機能があるらしいです。

(勉強中)

Warping

Warpingはわりかしこの中では利用が長い分野です。
Warpingは基本的にあらゆる動作の自然さを意識しています。
横を向くときに腰が曲がるのか曲がらないのか?などです

Orientation Warping :移動方向に腰が曲がる
Slope Warping : 段差で低い方に腰が落ちる
Foot Placement : 足を確実に置いて、腰をいい感じにする(実験的機能)
Distance Matching : 着地の際に足を出すみたいな機能

アニメーションシーケンスがルートモーションであるという前提でですが、
非常に優れた機能だと思います。

他力本願寺ということで、おかずさんが作った最強サンプルを見ていきましょう。


こちらのサンプルでは、上記のWarpingやDistance Matchingに対する効果を実際に体感することができます。

まず何も設定をしないオリジナルを見ていきます。

振り返るときに足をなぜか大きく広げて滑るような形で振り向いています。
歩くモーションを再生するので、どうしてもこのような「滑り」が発生してしまうわけですね。

これはUE5オリジナル・バージョンでも、かなり良くはなっていますが、
やはり発生はしてしまいます。

また、Control Rigのところで解説した「坂や階段で足がピタッと」の機能もありません。
ただ走っていると「坂や階段で足がピタッと」機能がなくてもあまり破綻がありません。若干坂にめり込んだりする程度です。
※最初のテロップは入れ間違い

一方で歩くとき、止まっているときは結構目立ってしまいます。
歩くときは違和感が目立つ

上記がまず、Warpingの機能がない状態です。以下二点の大きな問題がありました。
●曲がるときの「滑り」がある
●坂にピタっとしない
まずはこの2つについてフォーカスしてみます。
Warpingの機能を入れるとどうなるか見てみましょう。


「Orientation Warping:ON」
違和感としては残っていますが、腰から曲がることでだいぶリアル感が増しました。
坂のピタッとの方はOrientation Warpingでは改善しません。


「Orientation Warping:ON」
「Slope Warping:ON」
坂にピタッとするようになりました。
また、坂に対して腰が入るようになっています。ここまで来ると一段レベルが上がった感じがしますね。
滑りに関しては、まあ若干ありますね。歩くときでもやはり見ると分かるレベルでは残っています。


「FootPlacement:ON」
FootPlacementは足滑り軽減に定評がある機能です。まずはこれだけ入れてみた結果を表示します。
これを入れると、足を地面に置くと、基本的にそこから動かさないようにアニメーションします。なので足滑りはほぼなくなります。しかも坂にもピタッとするので一見するとこれだけで事が足りる気がしてきます。しかし、複雑な地形になると膝がガックンガックンします。また、どうしても足を固定してアニメーションするので、足がクロスすることが発生します。

またこの機能を入れても走ったときには若干まだ滑ります。足を大きく開くところも変わりません。


「Orientation Warping:ON」
「Slope Warping:ON」
「FootPlacement:ON」
ここまで来るとかなり自然になります。若干まだ歩き始めの滑りや、大股のモーションなど気になる点はあるものの、ほぼほぼこれで製品化しても問題ないレベルでしょう(個人の意見です)

しかしこれで"自然"にはなったんですが、上半身の動きなどに関してはまあ普通というかダイナミックな動きにはなりません(そりゃそうなんですが)。

なのでこれ以上のダイナミックさを求めようとすると、後述するMotion Matchingなどの導入を検討する必要がありそうです。

Motion Matching (加筆予定) 

UE5アニメのなかでもかなり注目されている機能ですね。
大量のアニメーションシーケンスが必要になりますが、このアニメーションシーケンスをリスト化して、速さ、方向、入力によって一番よいアニメーションシーケンスを選択するというものです。ある意味、ブレンドスペースの最強版ですね。

(勉強中)