VRChatでフェイシャルトラッキング対応アバターを作る方法

概要

こちらでQuest Proのフェイシャルトラッキングの方法を解説したので、今回は対応アバターの作成方法を説明します。
virtual-neco.hatenablog.com

知識があまり無い人でも出来るように書きますが、ある程度改変知識があるものとして説明するので、何をしているのか細かくは説明しません。
詳しく知りたい方はExpressionメニューの設定方法を検索すると大体同じ事をしていますのでそちらを見て下さい。
英語のドキュメント読む気力がある人はVRC Face Trackingのサイト見に行くと大体書いてあるので参考に。
docs.vrcft.io

あと、今回説明で使用したフェイストラッキング対応済みのアバターサンプルを置いとくので参考にして下さい。

wrchg.booth.pm

前提

・VRC Face Trackingを導入済み
・フェイストラッキングアバターで動作確認済み
・Unityでアバターの改変がちょっとでも出来る

仕組み

VRCFTから送られてくるパラメータには目の開き具合や口の開き具合、微笑んでいるかなど様々なパラメータがあります。
Expressionパラメータに該当パラメータを入れておくと自動で表情に対応した値に更新されます。

パラメータの例
youtu.be あとはExpressionメニューを使った改変と同じ事をするだけです

目のトラッキング

目のトラッキングアバターに特別な事をする必要はありません。
VRChat標準のEye Look機能(ランダムに他の人を見る機能)がONになっていれば使用できます。 実際は下の表情トラッキングの方法でも目のトラッキングは可能ですが、 こちらの方が導入が簡単でうまく動かないトラブルが少ないです。
(私はずっと目がうまくトラッキングできなくて困ってた)

表情のトラッキング

ここではひとまず例として、まばたきの設定だけしていきましょう。
まばたきが出来ればあとは同じ方法で口角上げや口すぼめなど他の表情も設定できます。

1.Expressionパラーメータの設定

ここから使いたいパラメータを探し出します。
すべて英語で書かれているので必要に応じて翻訳サイトを使用して下さい。
docs.vrcft.io
全て乗ってる訳では無い?のですがここに対応した表情の画像が乗っています。
docs.vrcft.io

今回はまばたきなので「v2/EyeLidRight」と「v2/EyeLidLeft」を使用します。(Eye Lidはまぶたの意味)
右の説明で目の開き具合を0~0.75で、目を見開いた状態を0.75~1.0で渡されると書いてあります。

AvatarDescriptorのExpressionの中にあるParametersをダブルクリック。
リストに行を追加し先程探し出したパラメータに名前を変更、Typeは「float」、Syncedはチェック。

2.AnimationControllerの設定

AvatarDescriptorのFXをクリックしてFXファイルを探す。 探し出したFXファイルをダブルクリックしてAnimatorを開く。
パラメータに先程入力したのと同じパラメータを追加する。

新しいレイヤーを作成。
分かりやすい名前に変更 。 Weightを1に設定。
(左右の目用に2つ作成する)

右クリックでBlendTreeを作成。
作成したBlendTreeをダブルクリック。

blendTreeをクリック。
パラメータを先程設定したパラメータに設定。
+ボタン→Add Motion Fieldを押してMotionを2行にする。
今回は目の開き具合を0~0.75で表現するのでAutomate Thresholdsのチェックを外し、Thresholdを0と0.75に設定。

Projectの適当なフォルダにアニメーションファイルを作成する。
今回は左右のまばたきなので目を閉じた状態と通常状態のアニメーションファイルを左右それぞれ作成する。
今回は目を閉じた状態を「◯◯EyeOpeness」目を開けた状態を「◯◯EyeNormal」に名前を変更した。

作成したアニメーションをBlendTreeのMotionに入れる。

3.Animationの設定

アバターのアニメーションを編集するためにAvatarDescriptorのFX をクリックしてFXファイルを探し、Animatorに入れる。

Animationウィンドウを出す。

Hierachyのアバターをクリック。
Animationウィンドウで編集するAnimationを選択。
今回は目を開いた状態と目を閉じた状態のAnimationそれぞれで行う。

Add Propertyから顔のメッシュのあるオブジェクト(ハオランくんはbody)→Skinnded Mesh Renderer→目的の表情のBlend Shape(今回はまばたきなのでウィンクを使用)を追加。

1秒の所のひし形を右クリックして削除する。
アニメーションの用途に合わせて数値を変更する。
今回はまばたきなので目を開いた状態のアニメーションは0、 目を閉じた状態のアニメーションは100に設定

4.動作確認

アップロードしてアバターが動く確認しましょう。
うまく動きましたか?これが出来れば他の表情も対応してみましょう。

もし動かない場合は アクションメニュー(Expressionで使う円形のメニュー)→Options→OSC→OSC Debugを開くと動画のデバッグメニューが出てきます。 youtu.be
ここでパラメータが反応していればアバターのFXレイヤーの何かがおかしいです。
反応してなければ一度VRCFTの設定からRisky Settings→Reset VRChat Configをしてアバターを再読み込みして見ましょう。
それでも治らなければアバターのParameterの設定かVRCFTがおかしいです。

うまく行かない場合は私にDMして貰えればお手伝いします。
お気軽にどうぞ。
にゃー! (@virtual_neco) / X

OSCmoothで表情を滑らかに

実はこのままではVRCFTから送られてくるデータの更新頻度が少し低く、表情がカクカクして見えます。
他の人から見ると更に更新頻度が下がり、もっとカクカクしています。 これを解決するOSCmoothというツールがあります。
画面右側の目だけOSCmoothを入れた比較動画を作りました。
後半目をパチパチした時少し違うと思います。
youtu.be
多分他の人の視点だともっと違いが分かりやすいのかな。

こちらも入れてみましょう

ここからUnityPackageをダウンロードして導入。
github.com

ToolからOSCmoothを開く。
Avatarアバターを入れる。
LayerにFXを選択。
Parameter Configurationを開く。
Add New Parameterで枠を追加し、滑らかにしたいパラメータを入れる。
Apply OSCmooth to Layerを押す。

おしまい

気が向いたらよく起きそうなトラブルシューティングや、便利な機能の付け方を追記しときます。
おしまい