読者です 読者をやめる 読者になる 読者になる

Let's Enjoy Unreal Engine

Unreal Engineを使って遊んでみましょう

UE4 AnimMontage(アニメーションモンタージュ)について プロシージャルアニメーション編

UE解説

AnimMontage(アニメーションモンタージュ)について、最終編です。前回までは以下から。

UE4 AnimMontage(アニメーションモンタージュ)について 解説編 - Let's Enjoy Unreal Engine

UE4 AnimMontage(アニメーションモンタージュ)について 実践編 - Let's Enjoy Unreal Engine

まずプロシージャルアニメーションとは?この記事が非常に詳しそうです。

4Gamer.net ― [SQEXOC]データ駆動型プロシージャルアニメーションが目指す次世代のキャラクターモーション

つまり、アニメーションが様々な状況に合わせて独自に変化し、用意されているアニメーションとは別のモノへとなるように制御する事です。

f:id:alwei:20150220100939j:plain

 UE4での実現方法

UE4でプロシージャルアニメーションを実現する方法は実は色々とあります。スケルトンのボーンに対して直接操作を行なったり、複数のアニメーションをブレンディングする方法などです。

今回は後者の複数のアニメーションをブレンディングする方法を使ってプロシージャルアニメーションを実現させたいと思います。まずは前回と同じようにアニメーションモンタージュを普通に作成します。あとはブレンディングさせたいアニメーションをモンタージュUI内へと読み込ませます。

f:id:alwei:20150220102051j:plain

この時はセクションやブランチポイントの指定は必要ありませんが、スロットアニメーション用にスロットの設定だけはしておくようにしておきます。今回は銃を撃つための"GunShot"というスロットを追加しました。

 アニメーションモンタージュの再生

ここまで来ると再生するのは前回もやった通りで簡単です。

f:id:alwei:20150220102614j:plain

これだけで既存のアニメーションとは別に銃を撃つアニメーションをアニメーションブループリントの"Montage Play"ノードで呼び出す事ができるようになったはずです。

ただし、これだけだと本当に再生しているだけで何の意味もありません。

アニメーションブレンディング

アニメーションをブレンドするために"Layered Blend per Bone"というノードを使います。日本語だと"ボーンごとのレイヤードブレンド"と表示されます。このノードを選択した状態で右下のあたりにあるプロパティのウィンドウを探してみます。

f:id:alwei:20150220103300j:plain

Configという項目の中に"Branch Filters"というエレメントに対して"+"ボタンで項目を追加し、"Bone Name"にこれより下の階層のボーンに対して影響を与えたいボーンのトップを指定します。

f:id:alwei:20150220103740j:plain

ケルトンツリーで確認しておきましょう。今回は腰より上半身の"UpperSpine"というボーンを指定しました。これであとはアニメーションステートマシンの結果とGunShotのアニメーションをブレンドさせます。ウェイトの設定は特に問題がなければそのままでOKです。

f:id:alwei:20150220104044j:plain

これで上手くいくかと思いきや…

f:id:alwei:20150220104258j:plain

キャラクターの腰から上半身だけTポーズになるような妙な挙動になってしまいました…

アニメーションステートキャッシュが必要

これをどうにかするにはAnimStateCache(アニメーションステートキャッシュ)と呼ばれるものが必要です。これはその名前の通りアニメーションの状態を変数のように格納するキャッシュで一時的にアニメーションの情報を保存しておきたい場合に使用します。

では、これを使って再度ノードを組み直します。

f:id:alwei:20150220104750j:plain

ステートマシンからAnimStateCacheノードで結果を一時的に格納して、"Use Cached pose AnimStateCache"で内容を参照します。(日本語だと"キャッシュしたポーズを使用")

これを"Layered Blend per Bone"のBase PoseとブレンドしたいアニメーションのBlend Posesで繋げて結果を最終アニメーションポーズに渡してあげればOKです。

ブレンドした結果を確認

これでブレンドしたアニメーションを確認してみましょう。上手くいけば通常の移動アニメーションを行ないつつ、銃を撃つアニメーションをブレンド出来ているはずです。

f:id:alwei:20150220105447g:plain

これは本当に単純なブレンディングですが、実際はもっと複雑なブレンドも可能ですし、スロットアニメーションを使いこなせば沢山のアニメーションを同時に再生させながら、必要な部分だけをブレンドする事が可能です。

 

プロシージャルアニメーションとしては最も単純なものですが、この応用方法次第でいくらでもやり方があるのは使っているとわかると思います。

ちなみにここまでアニメーションモンタージュとして解説してきましたが、実はアニメーションモンタージュではなくてもスロットアニメーションは可能です。ここでは解説しませんが、必要になりそうなら調べてみてください。

そしてアニメーションモンタージュとUE4の高度なアニメーションシステムを組み合せる事で様々な事が実現可能という事がわかったと思います。これは全てUE4内で完結しており、C++コードを書く必要すらありません。言いすぎとも言われるかもしれませんが、これほどのシステムが個人で使えてしまうという事は本当に凄いです。ぜひ皆さんも活用してみてください。

これでアニメーションモンタージュについての解説はおしまいです。お疲れ様でした。