VRChatでQuestProを用いてVRoidのフェイストラッキングを行う

VRChat
スポンサーリンク

はじめに

こんにちは。先月にQuestProを買いVRChatを始めたのですが、せっかくフェイストラッキングが機能があるので使えるように色々調べてようやく動作するようになりました。今回、フェイストラッキングを行うときに戸惑った場所や分かりにくかった部分について紹介したいと思います。

私以外に多くの方がVRChatでフェイストラッキングを行う方法について記事にしていただいています。以下の記事を参考にしました。これらの記事のおかげで無事行えるようになりとても感謝しています。

今回調べた内容は、2024年4月14日の時点の情報のため、最新はまた変わってくる可能性があり注意してください。

過去の記事について

これまで、VRChat用のアバターを作るためにVRoidStudioメタセコイアを使って作ってきました。今回はここで作成したアバターでフェイストラッキング化を行います。

VRChat用のアバターを作る(VRoid Studioの紹介編)
はじめに こんにちは。なたでです。 最近、VRChatで遊ぶためにアバター作成用の本(メタバースアバター作成バイブル VRoid Studioによるキャラクター作成のコツ)を購入しました。読んでみると意外に自分でも作れそうと感じ、やってみた...
VRChat用のアバターを作る(メタセコイアでVRMの編集)
はじめに こんにちは。なたでです。 今回は、前回のVRoid Studioの紹介編の続きです。VRoid Studioだけでは編集が難しかった部分をメタセコイアを使用して補う方法を紹介していきます。 ここで記載した内容は、2024/4/7時...

実行環境について

今回、私が試した実行環境は以下の通りです。

環境整備をしたVRChatに対して、フェイストラッキングに対応したアバターをアップロードすることで利用可能になります。先に環境整備を行い、アバターのフェイストラッキング対応を説明します。

環境整備

HMDの設定を変更する

以下の設定を有効化します。これにより表情が読み取れるようになります。

ブラウザーをアップデートしてください | Facebook

Virutal Desktopなどの準備

色々な方法があるとは思いますが、以下のようなインサイドアウトボディートラッキング(IOBT)を別途利用したいと考えていたため、Virutal Desktop (Wireless version)を用いた方法を使用しました。

『Virtual Desktop』ベータアップデートで指+フルトラッキングエミュレート機能が『Quest』向けに登場! | バーチャルライフマガジン

HMD側にて以下の対応が必要です。

  • HMD内臓OSのプライバシー設定からVirutual Desktopのアクセス許可
  • HMD上からVirutual Desktopを起動し、以下を有効化
    • Forward traking data to PC
      • Emulate SteamVR Vive trackers
      • Emulate Index controllers

他にもSteam側でOpenXRの設定などがありますが、@Kazu_Sackさんの記事を参考にしてみてください。

フェイストラッキング情報を送信するツールを準備

HMDからVirutal Desktop経由で送られたフェイストラッキング情報を、VRChatへOSC情報として送信するVRCFaceTrackingをインストールします。

インストールを終えたら、ツールを起動させてVirutal Desktop用のプラグインをインストールすれば完了です。

フェイストラッキングを行う場合はVRCFaceTrackingを起動した状態で、VRChatを起動する必要があります。正しくVRCFaceTrackingに対応したアバターがVRChat上で動作していると以下のようにAvatar Statusが表示されます。

VRChat側の設定を変更

後で設定してもいいのですが、環境整備ということでここで説明します。

VRChat自体にアイトラッキング機能が内蔵しているため、後に作成するアバターではフェイストラッキングの設定のみ行います。VRChatの設定は以下のようにしました。目の開き方はフェイストラッキングを使用するためVRChat側の設定はDisableとします。

表情情報を受信用にOSCを有効化したいため、左手のメニューからOSCを探して、Enableに設定しておきます。

ちなみにVRCFaceTrackingと連携できていないとOSC Debugで次のような表示がされます。OSC Debugはフェイストラッキングが正常動作しているかの確認等で使用するので覚えておきましょう。

Not receiving any OSC messages?
– Make sure your sender program is sending to port 9000
– If your sender program is running on a different device, make sure you are sending it do the correct IP address.
– Check your firewall settings. You may have to make an exception to allow VRChat or port 9000 through.
– Make sure you don’t have any other programs listing on port 9000.
– If you started your sender program before VRChat was launched, you may need to restart is so they can connect.

アバターを準備する

アバターにモーフ情報を埋め込む

vroid形式のアバターにモーフ情報を埋め込みます。後ほどこのモーフ情報を用いてフェイストラッキングで対応したい顔の表情を作成します。

デフォルトのモーフ情報

VRoid StudioでVRM0.xで出力したvrmファイルの時点でモーフ情報が埋め込まれています。眉毛の位置情報を切り替えるのがないので微妙ですが、目を閉じたり、口の開け閉めだけであればこれらの組み合わせで対応できます。

モーフID 種類 内容
Fcl_ALL_Neutral 表情 標準
Fcl_ALL_Angry 表情 怒り
Fcl_ALL_Fun 表情 嬉しい
Fcl_ALL_Joy 表情 楽しい
Fcl_ALL_Sorrow 表情 悲しい
Fcl_ALL_Surprised 表情 驚き
Fcl_BRW_Angry 眉毛 怒り
Fcl_BRW_Fun 眉毛 嬉しい
Fcl_BRW_Joy 眉毛 楽しい
Fcl_BRW_Sorrow 眉毛 悲しい
Fcl_BRW_Surprised 眉毛 驚き
Fcl_EYE_Natural 標準
Fcl_EYE_Angry 怒り
Fcl_EYE_Close 両目を閉じる
Fcl_EYE_Close_R 右目を閉じる
Fcl_EYE_Close_L 左目を閉じる
Fcl_EYE_Fun 嬉しい
Fcl_EYE_Joy 楽しい
Fcl_EYE_Joy_R 右目だけ楽しい
Fcl_EYE_Joy_L 左目だけ楽しい
Fcl_EYE_Sorrow 悲しい
Fcl_EYE_Surprised 驚き
Fcl_EYE_Spread 目を開く
Fcl_EYE_Iris_Hide 眼孔を小さく
Fcl_EYE_Highlight_Hide ハイライトを隠す
Fcl_MTH_Close 下唇を上げる
Fcl_MTH_Up 口の位置を上へ
Fcl_MTH_Down 口の位置を下へ
Fcl_MTH_Angry 怒り
Fcl_MTH_Small 口の横幅を小さく
Fcl_MTH_Large 口の横幅を大きく
Fcl_MTH_Neutral 口の横幅を通常
Fcl_MTH_Fun 嬉しい
Fcl_MTH_Joy 楽しい
Fcl_MTH_Sorrow 悲しい
Fcl_MTH_Surprised 驚き
Fcl_MTH_SkinFung 唇で牙を作る
Fcl_MTH_SkinFung_R 唇で右の牙を作る
Fcl_MTH_SkinFung_L 唇で左の牙を作る
Fcl_MTH_A
Fcl_MTH_I
Fcl_MTH_U
Fcl_MTH_E
Fcl_MTH_O
Fcl_HA_Hide 歯を隠す
Fcl_HA_Fung1 八重歯を生やす
Fcl_HA_Fung1_Low 下の八重歯を生やす
Fcl_HA_Fung1_Up 上の八重歯を生やす
Fcl_HA_Fung2 サメ歯を生やす
Fcl_HA_Fung2_Low 下のサメ歯を生やす
Fcl_HA_Fung2_Up 上のサメ歯を生やす
Fcl_HA_Fung3 中央の上下に牙を生やす
Fcl_HA_Fung3_Up 中央の上に牙を生やす
Fcl_HA_Fung3_Low 中央の下に牙を生やす
Fcl_HA_Short 歯を短くする
Fcl_HA_Short_Up 上の歯を短くする
Fcl_HA_Short_Low 下の歯を短くする

モーフ情報の拡張

有料ですがVRoid Studioで出力したVRM0ファイルに対してモーフ自動生成ツールのHANA_APPを用いることで、パーフェクトシンク用のモーフが追加され、モーフ情報が大幅にアップデートされます。以下は追加される情報です。眉毛の位置、口を膨らませる動作、舌を出すといった情報が追加されるため、これらをフェイストラッキングに組み込むことが可能になります。パーフェクトシンクの表情は、私が文章化していますが実際の顔を確認したい場合ははいぬっかさんのiPhoneトラッキング向けBlendShapeリストが参考になります。

モーフID 種類 内容
browInnerUp 眉毛 両方の眉毛が上がり、合わせて瞼も上がる
browDownLeft 眉毛 左の眉毛が下がり、合わせて瞼も下がる
browDownRight 眉毛 右の眉毛が下がり、合わせて瞼も下がる
browOuterUpLeft 眉毛 左の眉毛が上がり、合わせて瞼も上がる
browOuterUpRight 眉毛 右の眉毛が上がり、合わせて瞼も上がる
eyeLookUpLeft 左の瞼が上がる
eyeLookUpRight 右の瞼が上がる
eyeLookDownLeft 左の瞼が下がる
eyeLookDownRight 右の瞼が下がる
eyeLookInLeft 左目で内側を見る
eyeLookInRight 右目で内側を見る
eyeLookOutLeft 左目で外側を見る
eyeLookOutRight 右目で外側を見る
eyeBlinkLeft 左目を閉じる
eyeBlinkRight 右目を閉じる
eyeSquintLeft 左目を半開きにする
eyeSquintRight 右目を半開きにする
eyeWideLeft 左目を広げる
eyeWideRight 右目を広げる
cheekPuff 頬を膨らます
cheekSquintLeft 左の頬を上げる
cheekSquintRight 右の頬を上げる
noseSneerLeft 左側の顔であざ笑う
noseSneerRight 右側の顔であざ笑う
jawOpen 口を開ける
jawForward 顎を前へ出す
jawLeft 顎を左へずらす
jawRight 顎を右へずらす
mouthFunnel 口をすぼめながらイーってやる
mouthPucker 口をすぼめる
mouthLeft 口を左へずらす
mouthRight 口を右へずらす
mouthRollUpper 上唇を前へ出す
mouthRollLower 下唇を上げる
mouthShrugUpper 口を横に広げてイーってやる
mouthShrugLower ムスーって口にする
mouthClose 口を閉める
mouthSmileLeft 口の左側で笑う
mouthSmileRight 口の右側で笑う
mouthFrownLeft 口の左側を下げる
mouthFrownRight 口の右側を下げる
mouthDimpleLeft 口の左側を横に広げる
mouthDimpleRight 口の右側を横に広げる
mouthUpperUpLeft 口の左側の歯茎を見せる
mouthUpperUpRight 口の右側の歯茎を見せる
mouthLowerDownLeft 口の左側の下歯茎を見せる
mouthLowerDownRight 口の右側の下歯茎を見せる
mouthPressLeft 口の左側を閉める
mouthPressRight 口の右側を閉める
mouthStretchLeft 口の左側を下へ伸ばす
mouthStretchRight 口の右側を下へ伸ばす
tongueOut 口内 舌を出す

表情アニメーションを作成する

上記のモーフですが、Unityではシェイプキーと呼ばれています。このシェイプキーを元に表情アニメーション(*.anim)を作成していきます。ここからはUnityでの操作となります。上記のアバターをVRM Converter for VRChat で取り込んだものとして説明していきます。

表情アニメーションは、フェイストラッキングから受信した情報を元に、どの表情アニメーションに設定するかというものになります。VRCFaceTrackingで対応している表情はVRCFaceTracking Parametersに記載されています。量が多いので、必要な表情のみピックアップして限定的に対応でよいかと思います。顔のイメージはUnified Expressionsに記載されています。

表情アニメーションを作成には、本来目的は違うのですがFaceEmoというUnity用のツールを使用していきます。アニメーションファイルは複雑な操作で作る必要があるのですが、このツールを使うことで簡単に作成することが可能となります。

作成するアニメーションを考える

作成するアニメーションはVRCFaceTracking Parametersに記載されているものから以下としました。表情アニメーション名の列は用意するファイルです。最終的に0.0ならどの表情、1.0ならどの表情という設定をする必要が出てくるため、0.0用の表情として無表情の「EmptyFace.anim」も用意しています。

名前 機能 表情 表情アニメーション名
無し 無し 無表情 EmptyFace.anim
v2/BrowInnerUpLeft <0.0 -> 1.0>Brow Inner Up Left 左眉がハの字 v2BrowInnerUpLeft1.anim
v2/BrowInnerUpRight <0.0 -> 1.0> Brow Inner Up Right 右眉がハの字 v2BrowInnerUpRight1.anim
v2/CheekPuffSuck <0.0 -> 1.0> Cheek Puff
<0.0 -> -1.0> Cheek Suck
ほっぺ膨らまし v2CheekPuffSuck1.anim
v2/EyeLidLeft <0.0 -> 0.75> Left Eye Openness
<0.75 -> 1.0> Left Eye Widen
左目を閉じる v2EyeLidLeft0.anim
v2EyeLidLeft75.anim
v2EyeLidLeft100.anim
v2/EyeLidRight <0.0 -> 0.75> Right Eye Openness
<0.75 -> 1.0> Right Eye Widen
右目を閉じる v2EyeLidRight0.anim
v2EyeLidRight75.anim
v2EyeLidRight100.anim
v2/EyeSquintLeft <0.0 -> 1.0> Eye Squint Left 左目を細める v2EyeSquintLeft0.anim
v2EyeSquintLeft1.anim
v2/EyeSquintRight <0.0 -> 1.0> Eye Squint Right 右目を細める v2EyeSquintRight0.anim
v2EyeSquintRight1.anim
v2/JawOpen <0.0 -> 1.0> Jaw Open アの口 v2JawOpen1.anim
v2/LipPucker <0.0 -> 1.0> Lip Pucker 口をすぼめる v2LipPucker1.anim
v2/MouthOpen <0.0 -> 1.0> Mouth Upper Up
+ Mouth Lower Down
イの口 v2MouthOpen1.anim
v2/SmileFrown <0.0 -> 1.0> Mouth Corner Pull
<0.0 -> 1.0> Mouth Corner Slant
<0.0 -> -1.0> Mouth Frown
口角を上げる v2SmileFrown1.anim
v2/TongueOut <0.0 -> 1.0> Tongue Out 舌を出す v2TongueOut1.anim

FaceEmoで作成していく

ヒエラルキーからVRChat用アバターの右にEmoアイコンがあるのでこれをクリックしてツールを起動できます。

主に使うのは2つの機能です。

  • +ページのアイコン … 新しい表情アニメーションを作成する
  • 鉛筆のアイコン …. 表情アニメーションを編集する

例えば、イを表すv2MouthOpen1という表情アニメーションを作ってみます。これはVRoidに最初から入っていたFd_MTH_Iを使用して作成できます。

口角を上げるv2SmileFrown1も作ってみます。これはパーフェクトシンク用のモーフのcheekSquintLeftcheekSquintRightの両方を用いて作成してみました。

無表情の表情アニメーションは特に何もなしで作成しました。

このように、頑張ってたくさん用意していきます。

VRCFaceTrackingから受け取る情報を設定する

VRCFaceTrackingから受け取る表情パラメータVRCFaceTracking Parametersに記載されたパラメータをいくつか受け取れるように設定します。

VRChat用アバターを選択した状態でインスペクターにあるExpressionsPrametersにあるVRCExpressionParametersをダブルクリックします。

既存設定にVRCFaceTrackingから受け取る表情の情報を追加します。これでVRChatプレイ中にこの値がリアルタイムに変わるようになります。Syncedのチェックは入れ忘れないように。

専用のAnimationControllerを作る

VRC Expression Parametersで設定された値を元に、どの表情アニメーションに切り替えるかという設定ファイルを作ります。今回は、VRCFaceTracking.controllerというファイル名で作っていきます。

上記(スクリーンショットでは作成済み)のようにプロジェクトのフォルダ内で右クリックをして「作成」から「アニメーターコントローラー」を選択することで、「New Animator Controller.controller」というファイルが作成されます。分かりにくいので適当に名前を振っておきましょう。プロジェクトでこのファイルをダブルクリックするとファイルがUnity上で開かれて編集ができます。

パラメータを追加

パラメータタブで連動する変数をfloat型で作成します。ここでの値はVRC Expression Parametersで設定した変数名に合わせる必要があります。

レイヤーを追加

作成したい表情分のレイヤーを追加します。

ウェイトを設定する

ギアマークを押すとウェイトの設定(0.01.0)ができるので1.0にします。

Blend Treeの設定をする

各種レイヤーに対して、パラメータに応じた表情アニメーションの設定を行います。具体的にはBlend Treeというものを使用していきます。

以下のように右クリックで新規作成からBlend Treeを作ります。作成したBlend Treeを選択したらインスペクターのMotionにあるBlend Treeをダブルクリックすると詳細設定が可能になります。MotionBlend Treeが表示されない場合は、作り方が間違っている可能性があります。

あとは以下のような感じで、パラメータの数字に合わせてどの表情アニメーションを使用するかを適当に設定していきます。余裕をもって、0.01.0といったピッタリな数字を使わずにちょっと誤差があっても動くように設定するのがコツのようです。

目の閉じ方については、0.75からは意味が変わってくるため、表情アニメーションが複雑になります。

全ての設定を終えたら、VRChatアバターを選択してインスペクターから、Playable LayersBaseFXに先ほど作成したVRCFaceTracking.controllerへ変更したら完成です。

VRChatで動作を確かめる

以上の設定を終えたらVRChatで動作を確かめてみましょう。うまく動作しない場合はOSC Debugを確認すると良いです。正しく取得できていると以下のように追加したパラメータが動作していることが分かると思います。

ここで出てくる表示が変だった場合は、以下のローカルに記録されているアバターのOSC情報を削除すると治る場合があります。

C:\Users\***\AppData\LocalLow\VRChat\VRChat\OSC\usr_***\Avatars

おわりに

いったん駆け足でしたが、私が作った時の調べたことや難しい箇所をまとめてみました。

参考になりましたら幸いです。

ちなみにHMDを購入して1か月が経とうとしていますが、1週間のうち数時間しか遊べない貴重な時間をVRChatの技術的な情報を調べるだけでなかなかプレイが出来ていない状況ですので、そろそろアバターで散歩したり色々な人と話したりしてみたいなぁとこの頃です。

コメント

タイトルとURLをコピーしました