皆様いかがお過ごしでしょうか。歌乃です。

最近またUEを触り始めましたが、色々変わっていて正直手探り状態です(´・ω・`)

今回は UE5 で取り込んだVRMのフェイスアニメーション(モーフターゲット)の追加に関する記事です。

以下のような読者を対象にしてます。

  • UEの基本操作がわかり、BluePrintで簡単な処理を作れる。またはBPのサンプルを触ったことがある。
  • スケルトンやボーン、リグ、メッシュなど3Dアニメーションに関わる用語や仕組みがある程度わかる。

前回記事、UE5 リターゲットしたアニメーションの修正



VRMを取り込んでサンプルプロジェクトでアニメーション出来るようになりましたが、体の動きだけで無表情なので、せっかく取り込んだキャラクタの魅力が半減です。

VRoid Studio から取り込んだVRMにはモーフデータ(フェイスアニメーションのデータ)が含まれています。
モーフデータを利用することでキャラクタに表情をつけることが出来ます。

モーフデータはメッシュに含まれているので、取り込んだメッシュデータを開くと確認できます。

メッシュデータを開く

モーフターゲットのウェイトを変更すれば、プレビューメッシュ上で結果が確認できます。

モーフターゲットのウェイト



今回は、定番の「まばたき」を待機アニメーションに追加していきたいと思います。
まばたきのモーフィングターゲットは「Fcl_EYE_Close」として登録されています。

まず、前準備としてメッシュにカーブメタデータを追加しておく必要があります。

追加するカーブメタ名は目的のモーフターゲット名と同じにしてください。

カーブメタデータを追加

追加したカーブのタイプで「モーフィングターゲット」にチェックを入れておきます。



つぎに表情をつけたいアニメーションを編集します。
ここでは待機アニメーションの「MM_Idol」を編集します。

アニメーションを開きシーケンスエディタで「カーブ」を追加します。
カーブの一覧から追加したいカーブここでは「Fcl_EYE_Close」を選びます。

シーケンスエディタで「カーブ」を追加

メッシュにカーブメタ名として追加していないカーブは追加しても動作しないの注意。



カーブを編集していきます。

カーブを編集

MM_Idol は約8秒のアニメーションです。一秒30フレームです。

2秒(60フレーム)にキーフレームを作成します。

キーフレームの作成はカーブライン上でマウスのセンターボタンクリックです。

同じ用に61フレーム(2.033秒)、62フレーム(2.066秒)にキーを作成します。

キーフレームを作成

二番目のキーを1.0に設定します。

二番目のキーを1.0

設定できたら、シーケンスエディタに戻って動きを確認します。

シーケンスエディタに戻って動きを確認

「目パチ(まばたき)」してれば成功です。

一回だけだと寂しいので最終的にはこんな形にしました。

最終的にはこんな形に

2秒のキーで一回、4秒のキーで2回「目パチ」させています。



レベルを実行して確認します。

実行してみた

まばたきしているのが確認できます(Gifアニメーションに変換しているので微妙ですが)。




まばたきするだけでも随分と印象が変わりますね。
これで無表情だったVRMに表情が付きました (`・ω・´)

あとは同じ要領で他のアニメーションにも表情をつけていけば、キャラが生きてくると思います。

続きっぽいもの > UE5 で 取り込んだ VRM のIKボーンが動いてくれない問題の対応



【おまけ】

今回、表情を撮影するために、サンプルプロジェクトのカメラ部分に修正を加えました。

具体的にはマウスのホイールでズームイン・ズームアウト出来るようにしました

やり方は以下のとおりです。

まずはキャラクターブループリント(BP_ThirdPersonCharacter)を編集します。

ビューポートで、CameraBoom の位置をキャラクターの顔(おおよそ目線の高さ)あたりに移動します。

CameraBoom の位置

CameraBoomはカメラを保持する腕のようなもので、キャラクタとカメラの間に障害物などが入った場合に自動でカメラの距離を調整してくれたりする便利な機能です。

次にイベントグラフでMouseWheelAxisイベントを追加します。

最終的には以下のような感じになります。

MouseWheelイベント

元のBPに合わせてCameraInputにまとめてますが、他に機能を追加している場合はそちらでも、単一の機能として独立に配置しても構いません。

CameraBoom 変数は元々用意されていますのでそちらをD&Dで追加します。

GetTargetArmLength 関数を追加して CameraBoom とつなぎます。

MouseWheelAxis の AxisValue を 乗算(float × float)の一方につなぎ、もう一方には-10.0を入力します。

MouseWheelAxis の AxisValue はマウスホイールを回すたびに正方向なら1.0、反対なら-1.0を返します。このままだと移動量が少なすぎるので10倍し、正方向に動かしたときカメラを近づけたい(Lengthを減らしたい)ので符号を反転させています(つまり-10.0にしてます)。

GetTargetArmLength と 乗算した AxisValue を 加算し(float + floatにつなぎ)ます。

加算した結果を、Clamp (float) につなぎます。クランプにつなぐ理由はズームによって CameraBoom がキャラに近づきすぎたり、遠くなりすぎたりするのを制限するためです。

Clamp (float) の Min に50.0を、Max に 600.0 を設定します。このあたりは実装したい機能に合わせて変更してください。

クランプ結果を SetTargetArmLength の TargetArmLength につなぎます。SetTargetArmLengthのターゲットには、最初に追加した CameraBoom 変数をつなぎます。

これで、マウスホイールによるズームイン・ズームアウトが実現します。

ズームイン・ズームアウト

マウスホイールをすでに他の機能(アイテムやスキルの切り替えなど)に使っている場合は、CTRキーやALTキーと組み合わせて切り替えるといいかもしれません。



ポスト いいんじゃね。と感じたらポストしてもらえると喜びます。
タイーツ タイーツもできます。