Warudoでとりあえずトラッキングできるようになった後のブレンドシェイプの設定(目、口など)

Warudoでとりあえずキャラクターとトラッキングが適応できたけど、イマイチうまくトラッキングできなかったときの自分なりの対処法を書いていきます。
具体的に
①目がピクピクしてるような挙動や常に半開きなどの対処法
②口が上手くトラッキングしなく半開き、開かないときの対処法
③おまけ:目を閉じるとき左右が同じように閉じない(ズレる)

書いていきます。
①、②項目に分けてますが、やり方自体は一緒です。
③は力技で解決するので、おまけとなっています。

自分なりの解決方法なので、あくまで参考程度に見ていってください。

では早速ですが
①目が痙攣してるような挙動や常に半開きなどの対処法
下記の画像は私が3Dアバターを導入してフェイストラッキングした状態です。
仕様:2000円ぐらいの安物ウェブカメとWarudo備え付けのMediaPiPeトラッカー

左目が常にピクピクした状態で、半開きです。上手くトラッキングできてません。
原因は私自身目が細かったり、眼鏡だったり、ウェブカメと真っすぐ顔を向けてなかったり色々と考えられますが、常時これだと可愛くありません。

これを常に目をパッチリ、目を閉じるときはちゃんと閉じるようにWarudoで設定してきます。

まず下記画像より
①アセット
②フェイストラッキングを行っているトラッカー
(今回はMediaPipeトラッカー)
 その他だとOpenSeeFaxe、iFacialMocap、VTubeStudioなどなど
③フェイストラッキングのBiendShapeマッピングの構成をクリックしてください。

クリックすると以下のようなタブが開きます。

今回は目の開閉についてやっていくので、
1番上のeyeBlinkLeftと次のeyeBlinkRightに関係があります。
左に入力 右に出力のパラメーターがありますね。
入力:ウェブカメラでキャプチャした値
出力:3Dモデルへの影響となってます。
※この場合eyeBlinkであるため、出力0のとき目が全開、1だと目が完全に閉じるとなります。(モデルによっては逆の可能性あり)
eyeBlinkLeftでいうと0.13の値が入力された結果、3Dモデルに0.00の結果が影響されているわけですね。つまり目が全開に開いています。

次に縦軸の方を見ていきます。、
左だと0.3~0.7 右は0~1となっています。
左の入力の値が0.3の時、右の値は0
左の入力の値が0.7の時、右の値は1となります。
つまり画像だと入力が0.13だと0.3以下なので右への影響は0となっています。

それではピクピクとか半開きになっているときどういう感じになっているかというと下記の画像になります。

普通に目が開いているときが0.3~0.7の間に位置してしまって出力結果が0より大きくなってしまい。
目が半開きになったり、入力値が少し上下するだけで目がピクピクしてしまいます。

対策としては下記のように上下のパラメーターをいじってあげます。

値自体は人によって違いますが、私はこれが丁度いいです。
普段の目の大きさの入力値より少し高めに
下限を設定することで常に目を全開にします。
上下の差を狭くすることで半開きや目ピクピクがあまり起こらないようになります。
上限を目を閉じたとき超えるような値に設定します。
こう設定することで、目が全開か目が閉じるかのほぼほぼ二択になるので、中途半端な挙動はしなくなります。
デメリットとしては若干人形っぽい挙動なのかなと思います。
リアル系とかだと合わないかと、ごく一般的なVtuberはアニメっぽい顔してるので合うと思いますが、好みだと思います。

②口が上手くトラッキングしなく半開き、開かないときの対処法
これも同様にBlendShapeマッピングをいじっていきます。
やり方は一緒です。
3Dモデルによって若干違う可能性がありますが、
私の場合jawOpenで口の開閉を制御していました。
口が常に半開きだったり、喋っているときに口が動かないとかは
こちらのパラメーターをいじって綺麗にできるように試してみてください。


③おまけ:目を閉じるとき左右が同じように閉じない(ズレる)
これは気になってしまう人向け&力技です。
こちらは先ほどの画像と同じですが、下記の画像とみてください。

両目は同じ大きさのつもりですが、人間は若干身体が左右ズレてたり、トラッキング上手くいかなかったりで、
私は両方同じ大きさのつもりですが、eyeBlinkLeftが0.48 eyeBlinkRightは0.63と0.15もズレています。
これぐらいズレていると両目を閉じても、左右ズレて閉じるようになってしまいます。
1番の力技は入力値の範囲を0.15ズラすことだと思いますが、キャリブレーションでまたズレたりしてオススメできません。
なので片方の目で3Dモデルの両方の目を制御します。
やり方はブループリントいじっていきます。
ブループリントでフェイストラッキング項目を開いてください。
今回はMediaPipeで制御しているので、こちらになります。

グチャってしますが、頑張りましょう。
ブループリントの左側の方に下記の
BlendShapeリストBlendShapeを取得すると
BlendShapeリストBlendShapeの設定というノードが沢山あると思います。

これは私も多分そうだろう程度の認識ですが
「BlendShapeリストBlendShapeを取得する」はトラッカーからBlendShapeの値を抽出するノード
「BlendShapeリストBlendShapeの設定」は抽出した値を3DモデルのどのBlendShapeに割り当てるかのノードだと思います。……たぶん……

ってことで
例えば左目の開閉で3Dモデルの両目を制御するには
これを

こうします。

eyeBlinkLeftを設定した「BlendShapeリストBlendShapeを取得する」を
Blink_LとBlink_R両方に繋げます。
そうすることでeyeBlinkLeftの値で3DモデルのBlink_Rを設定するということになります。
eyeBlinkRightの値はいらないので出力を繋げません。

これのデメリットはウィンクとかをリアルタイムですることができません。
キー設定でウィンクを用意すればできます。
メリットは両方同じタイミングで目をパチパチすることができます。

初めての書き物なので上手く伝えられたかわかりませんが、役に立つことを祈っています。

この記事が気に入ったらサポートをしてみませんか?