ぼっちプログラマのメモ

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

【UE4】フェイシャルキャプチャ時における、Live Link Remap アセットを使ったカーブ名の再マッピングについて

前回の記事

pafuhana1213.hatenablog.com

はじめに

前回の記事で説明した通り、Live Link Faceアプリを使ったフェイシャルキャプチャにおいて
対応するカーブを用意することは非常に重要なのですが、地味に作業が面倒です。

面倒です!!!

と思っていたら、Live Link Faceアプリの公式ドキュメントにこうあります。

使用するキャラクターのブレンド シェイプの名前は ARKit ブレンド シェイプとまったく同じである必要はありません。LiveLinkRemap アセット内にカスタムのブループリント関数を作成して、ARKit ブレンド シェイプ名を自分のキャラクターで使用する名前に変換することができます。手順については「Face AR サンプル ドキュメント ]」を参照してください。ただし、最良の結果を得るために、使用するキャラクターのフェイシャル ブレンド シェイプが覆う顔領域は ARKit ブレンド シェイプと同じになるようにしてください。
iPhone X からフェイシャル アニメーションを記録する | Unreal Engine Documentation

コレを見てなるほど!と思い、Face ARサンプルのドキュメントを見に行くと…

LiveLinkRemap アセット内でのカーブ名の再マッピング
[My Blueprint] パネルの [Function] グループで、[Override] そして [Get Remapped Curve Names] を選択します。
入力と出力と合わせて、関数のグラフが開きます。目標は、このグラフを使用して、AppleSDK で想定される名前リストから受け取った名前を、キャラクターのブレンド シェイプ名に対応する名前に変更することです。たとえば、キャラクターのブレンド シェイプが適切な名前であるものの、「Character_」が追加されている場合、使用するグラフは次のようになります。

Apple SDK から受け取った名前に「Character_」を追加し、結果を出力している点に注意してください。
Face AR Sample | Unreal Engine Documentation

?????????????

となって、どう使うのか分かるのに少し苦労したので記事にします。

…と記事を書いてる途中で公式ドキュメントの別のページで解説があるのを知りましたが、
今回は Live Link Face を使ったフェイシャルキャプチャに特化した話ということでご容赦ください!
Live Link プラグイン | Unreal Engine Documentation ( Live Link ターゲットの項より )

LiveLinkRemap アセットを使うメリット

LiveLinkRemap アセットを使うことで、
Live Link Faceから受け取った各カーブの名前を別名に置き換えることができます。

つまり、既に表情を制御するモーフターゲットが用意されているモデルの場合は
前回の記事で紹介した手順を踏まなくても、 LiveLinkRemap アセットを使って置き換えるだけでOKになる可能性があります

対応が超ラクになるので是非活用したい所です!

LiveLinkRemap アセットの作成・設定方法

LiveLinkRemap アセットはBPアセットなので、LiveLinkRemapAsset をベースに新規BPを作成します。

f:id:pafuhana1213:20200802010658j:plain

次に、作成したLiveLinkRemapアセットを開き、関数のoverride から Get Remapped Curve Name 関数を選択します。
この関数にて、カーブ名の置き換え処理を実装することになります。

f:id:pafuhana1213:20200802010901p:plain
f:id:pafuhana1213:20200802011153p:plain


例えば、前回の記事に見習って、Live Link Face より取得した EyeBlinkLeft カーブを
モデルが持つモーフターゲット EyeClosedL に置き換える場合は以下のようにノードを組みます。

f:id:pafuhana1213:20200802012124p:plain

簡単ですね!

ただ、今回は置き換えるカーブは一つだけですが実際はより多くのカーブを置き換えることになります。
なので、Branchノードを使うのはあまり適切ではありません。下図のようにSwitchノードなどで対応することになります。

f:id:pafuhana1213:20200802012626p:plain


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

…置き換えたいカーブの数だけピンを追加するのは少し面倒と感じる方がいるかもしれません。私は感じました。
そんな人向けにちょっと幸せになれるC++クラスを用意してみました。
github.com

まずFaceARサンプルにソースコードを追加してコンパイルした後に、
FacialTrackingLiveLinkRemapAsset をベースに新規BPを作成します。

f:id:pafuhana1213:20200802013556p:plain

そして、BPが持つ Apple ARKit Blend Shape Names to Mesh Curve Names プロパティに対して手を入れます。
プロパティの左側がLive Link Face側のカーブ名、 (なので基本的に弄っちゃ駄目よ)
プロパティの右側が置き換えたいカーブ名です。 (なので弄るのはこっちよ)

f:id:pafuhana1213:20200802013708p:plain

これで準備OKです。ノードを組む必要はありません。
あとはこれから説明する Anim BPでの設定を行うだけです。簡単!
(バグってたらこそっと教えて下さい)

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

LiveLinkRemap アセットの適用方法

LiveLinkRemap アセットを作成・関数編集するだけではカーブ名の置き換え処理は行われません。
AnimBPで使われている Live Link Poseノード の Retarget Asset プロパティに設定する必要があります!

f:id:pafuhana1213:20200802014440p:plain


これで終わりです!対応完了!
簡単!!!

最後に注意点について

LiveLinkRemapアセットを活用することで、前回の記事で説明した作業の多くをスキップすることができます。
ただし、LiveLinkFace側のカーブとモデル側のカーブ(モーフターゲット)が概ね同じ働きをしている必要があります。

例えば、モデル側で用意されているモーフターゲットが
目の 閉じ 具合ではなく 開き 具合だった場合は
LiveLinkRemapアセットを使ってカーブを置き換えても上手く動作しません。
そういった場合は前回の記事で説明した方法を使うほうが安全かと思います。

おしまい