ぼっちプログラマのメモ

UE4とかVRとかについて書いたり書かなかったり。

【UE4】Live Link Face for Unreal Engineを使って、あなたのキャラクタの表情を動かす方法

はじめに

少し前に、Epic Gamesよりリアルタイムフェイシャルキャプチャ用のiOSアプリ「Live Link Face」がリリースされました。
このアプリとUE4を連携させることで、
TrueDepthカメラ( ≒ Face ID機能 )を持つiPhoneiPadがあれば個人でもフェイシャルキャプチャを実現することができます!

www.unrealengine.com

こんなことや…

あんなことも!



実は2018年から実現可能だったのですが、当時は Face AR Sample を iOS向けにパッケージングする必要がありました。
そのため、iOS開発環境(MacApple Developer Programへの登録など)を整える必要があり、導入のハードルが高い状況でした…

pafuhana1213.hatenablog.com

しかし、「Live Link Face」があればそんなことは必要ありません!
対応デバイスさえあれば誰でも気軽に試すことができます!公式ドキュメントもあります!やったね!

Androidユーザの方は…す、すみません…僕は自腹でiPhone XRを購入しました…)

iPhone X からフェイシャル アニメーションを記録する | Unreal Engine Documentation
Face AR Sample | Unreal Engine Documentation


ただし…サンプルキャラ(KiteBoy)以外のキャラクタに応用する方法についてはあまり詳しく書かれていません。
マケプレなどのストアからDLしたキャラ や 自作のキャラではどう使うの!?」と悩んでしまっている方もいるかと思います。

ということで自分メモも兼ねて書いていこうと思います。
なお、「既にサンプルキャラ(KiteBoy)のフェイシャルキャプチャに成功している」という前提のもとで説明します。
上記の公式ドキュメントにある手順に従えば…大丈夫…なはずです!

また、Anim BPを少しでも触ったことがあることも前提とします。
といっても、「アセットの作り方」と「どんな機能なのかをふんわり知ってる」レベルで大丈夫です。
Animation ブループリントの作成 | Unreal Engine Documentation

そして、解説にはマケプレのこの娘を使います。猫耳いい…かわ…(*´∀`*)
KemomimiFighter:AutumnRiceField:Characters - UE4 マーケットプレイス


微妙に話が長くなってしまったので、急ぎの方は 「まとめ」を先にご確認くださいまし。
UE4のアニメーション機能をそれなりに触ってる方はそれで概ね把握できると思います。


Live Link Faceアプリ からのデータを正しく受け取る方法について

なぜフェイシャルキャプチャがサンプルキャラ以外ではうまく動作しないのか?①

今回のフェイシャルキャプチャに限らず、
UE4モーションキャプチャやDCCツールをリアルタイムで連動させる際はLive Linkという機能を使うことになります。
Live Link プラグイン | Unreal Engine Documentation

そして、Live Link機能を使ってキャラクタを動かす際は、Animation BPのAnim GraphにてLive Link Poseノードを使えばOKです。
早速動かしたいキャラのAnim BPに追加してみましょう!

f:id:pafuhana1213:20200801153226p:plain

しかし、サンプルキャラの時とは異なり全く動かないはずです。
そして、サンプルのAnim BP(KiteBoyHead_JointsAndBlends_AnimBP)を見ても何だか複雑そうに見えて心が折れそうになります…

f:id:pafuhana1213:20200801153616p:plain

が、実はこの中身や動かない原因はとても単純です。
Live Link Faceアプリ から受信したカーブデータの受け皿が動かしたいキャラ ( のSkeleton ) にないだけです!

キャラ ( のSkeleton ) が持つカーブデータ Anim Curvesについて

SkeletonアセットはAnim Curvesというカーブ値のリストを持っています。
これを使うことで、キャラのモーフターゲットやマテリアルなどを制御することができます。

f:id:pafuhana1213:20200801155852g:plain

Anim Curvesに関する公式ドキュメントはこちら
アニメーション カーブ | Unreal Engine Documentation
アニメーションのカーブ | Unreal Engine Documentation ( こっちは マテリアル制御について )

なぜフェイシャルキャプチャがサンプルキャラ以外ではうまく動作しないのか?②

話を戻します。

Live Link Pose ノードは
「受信したカーブデータと同名の項目がAnim Curvesにあるのなら値を設定する」という仕様
になっています。

そのため、Live Link Faceアプリから送られたカーブデータと同名の項目が
動かしたいキャラのSkeletonのAnim Curvesにないと機能しません。

逆に言うと、サンプルキャラはAnim Curvesに同名の項目が用意されているのでフェイシャルキャプチャが機能しています。

f:id:pafuhana1213:20200801222709g:plain

「えっ…サンプルキャラのように大量のモーフターゲットを用意しないといけないの!?」
と思うかもしれませんがご安心を!そんな大変なことをしなくても大丈夫です! ( 大量に用意するのも正解ではあります )

Anim Curves に Live Link Face に対応したカーブを追加する方法について

まず、SkeletonやAnimBPなどを編集するためのPersonaエディタにてAnim Curvesタブを開きます。
(PersonaのMeshタブ時には開けないので注意)

f:id:pafuhana1213:20200801222756p:plain
f:id:pafuhana1213:20200801223219p:plain

そして、Anim Curvesの右クリックメニューから Live Link Face から受け取りたいカーブ名を追加します。

f:id:pafuhana1213:20200801225522p:plain

例えば左目の閉じ具合を受け取りたい場合は eyeBlinkLeft という名前を追加すると、
下図のようにサンプル以外のキャラでもキャプチャ結果を受け取れるようになります。
(あくまでデータを受け取っただけなので、まだキャラは動きません)
f:id:pafuhana1213:20200801230250p:plain

この作業をLive Link Face から受け取りたいカーブの数だけします!!!

その際はLive Link Faceの画面に表示されるパラメータが参考になるはずです。
ただ…そのパラメータ名とカーブ名は実際は違ったりします…。カーブ名のリストを以下に置きましたのでご活用くださいまし…。
github.com

============================================================

「ええ…そんな作業するの面倒くさいなぁ…」とか
「Anim Curvesが大量の項目を持つことになって嫌だなぁ…」と思う方がいるかと思います(私は思いました)。
そんな方向けの機能として、UE4LiveLinkRemapAsset という機能を用意しています。
Live Link プラグイン | Unreal Engine Documentation

ただ少し使い方が分かりづらいと思うので、次回の記事で解説予定です。お楽しみに!

かきました
pafuhana1213.hatenablog.com

============================================================

ひとまず、これでLive Link Faceから情報を受け取れるようになりました。あとはその情報を元に動かすだけです。

Live Link Face から受け取った情報を元にモーフターゲットを制御する方法

結論から言うと、Modify Curve ノードを使ってモーフターゲット用のカーブ値を調整することで実現できます!

Anim BPのAnimGraphで使える Modify Curve ノード
下図のように設定することで指定のカーブ値を設定することが可能です。(少し分かりづらいですが検索可能です)
f:id:pafuhana1213:20200801233737g:plain

そして、指定のカーブ値は Get Curve Value ノードで取得することができます。

そのため、例えば左目制御用のモーフターゲット EyeCloseL を持っているこのモデルの場合は
下図のようにノードを組むことで…

f:id:pafuhana1213:20200801234543p:plain

左目が動くようになりました!!! ( ウィンク苦手なのでがんばりました )

f:id:pafuhana1213:20200801234812g:plain

この作業をLive Link Face から制御したいモーフターゲットの数だけします!!!

ちなみに、 Modify Curveノードは 何個でもピンを追加することができるので、
制御したい数と同じ数のノードを用意する必要がありません。

f:id:pafuhana1213:20200801235351p:plain

また、Modify Curveノードによる値の設定方式を詳細パネルから設定可能です。

f:id:pafuhana1213:20200801235444p:plain

============================================================

「ええ…そんな作業するの面倒くさいなぁ…」とか以下略
そんな方向けの機能として、UE4LiveLinkRemapAsset という機能を用意しています。
Live Link プラグイン | Unreal Engine Documentation

ただ少し使い方が分かりづらいと思うので、以下略

============================================================


ひとまず、これで今回したかったことは実現できました!!!
やったね!


============================================================

「ええ…自分のモデルはモーフターゲットじゃなくてボーンで表情を動かす方式なんだけど…」
という方がそれなりに多くいると思います。そんな方にオススメなのが Pose アセット です。

Animation Pose アセット | Unreal Engine Documentation
Pose アセットを作成する | Unreal Engine Documentation
表情のアニメーションの共有 | Unreal Engine Documentation


この Pose アセットを使うことで、ボーンを動かして作成した表情を保存ができ、
それをモーフターゲットと同じような感覚で使うことができます!
(ちなみに、表情に限定した機能というわけではありません。指の動きの制御とかにも使えます)

例えばこの動画の場合ですと、
モーフターゲットがほぼ無いモデルだったので Pose アセット機能フル活用で実現してます。

折角の機会なので簡単な使い方について記事を今後書いてみようと思います。

============================================================

まとめ

  • Live Link Face からフェイシャルキャプチャ結果を正しく受け取るためには、それに対応したカーブを Skeleton の Anim Curves に用意する必要がある
  • Live Link Face 向けに新規にモーフターゲットを用意する必要はなく、Anim Curves に 名前をあわせたカーブを新規追加するだけでOK
  • 受け取ったフェイシャルキャプチャ結果を Get Curve Value ノード で取得し、その結果を Modify Curve ノードに渡せば実装完了
  • これらの作業を楽にするために LiveLinkRemapAsset というものがある。今後解説予定
  • モーフターゲットでなくボーンで表情を制御するキャラの場合は Pose アセット を使う。今後解説予定

おしまい


つづき
pafuhana1213.hatenablog.com