概要
この記事はMeta Quest Proを使ってVRChatでフェイストラッキングをする話です。
VRChatterでQuestProを買った方も結構いるようですが、Quest2と同じような使い方をしてしまっていませんか?
せっかく高い買い物をしたわけなので、機能をフルに使っていきましょう!
この記事はQuest(Air)Link、VirtualDeskTop、SteamLinkを使ってPCVRでVRChatをプレイできる環境にあるかつ、基本的なアバター用Animator編集等ができる方向けとなっています。
更新情報
2023年7月 VRCFaceTrackingの仕組みが大きく変わったので修正しました。
2023年12月 VDとSteamLinkでのやり方を追記
必要なもの
- VRCFaceTracking
- (おまけ)OSCmooth
参考資料
-
VRCFTの公式ドキュメント
- ほとんどの内容はここと一緒です。
- υμβρανさんのアバターセットアップ記事
- SteamLink用のモジュールのリポジトリ
環境構築
VRCFaceTrackingのインストール(共通)
ここから最新のVRCFaceTrackingをダウンロードします。
ダウンロードしたインストーラーをダブルクリックしてインストールします。
インストールが終わったらVRCFaceTrackingのアプリを起動しておきましょう
Virtual Desktopを使う場合
まずQuest側でVDを開き、アイトラッキングとフェイストラッキングへのアクセスに許可を出します。
一度拒否してしまっていた場合は、プライバシー設定からオンにしてください
次にPCにつないだらPC側のVDの設定で Streaming > Forward tracking data to PC にチェックを入れます。その下にある2つの項目は外して大丈夫です。(それぞれ疑似フルトラとIndexコンエミュレーターになります)
今度はVRCFTの画面に行き、Module Registry から Virtual Desktop を探して install します。
VDを使う場合の設定は以上です。
Steam Linkを使う場合
※現在まだ出たてなので今後変更がある可能性が高いです。
こちらもまずQuest側でアプリを開いた時に出るフェイストラッキングへのアクセスへ許可を与えてください。
一度拒否してしまった場合も同様にプライバシー設定から許可を与えてください。
次にこちらから最新のzipをダウンロードします。
次にVRCFTに行き、Module Registry から Install Module from .zip を押して先ほどダウンロードしたzipを選んでインストールします。
※現状このモジュールを入れると自動でモジュールが切り替わらない仕様になってしまっているようなので、VDとかQuestLinkを使いたい場合は一度このモジュールをアンインストールする必要があります。
今度はSteamLinkでPCに接続し、SteamVRの中から設定のうち VR設定 を開き、
Steamリンク からOSC関連の設定を3つオンにし、 Output Port を 9015 に変更します。
SteamLinkを使う場合の設定は以上です。
Quest Linkを使う場合
今となっては設定がやや面倒なのであまりお勧めしません
Quest Proを開発者モードにする
公式ドキュメント通りにやればよいと思います。
開発者登録として組織を作らなくちゃいけないですが適当で大丈夫です。
スマホアプリからの操作はこちらの記事のスクショが分かりやすいです。
Oculusアプリでの設定
まず「 一般 」タブで「 提供元不明アプリ 」の許可と「 OpenXRランタイム 」をOculusに設定します。
画像のようになればオッケーです。
次で「 ベータ 」タブで「 開発者ランタイム機能 」をオンにし、そうすると現れる アイトラッキング と 表情認識 の項目をオンにします。
この時 周囲確認 はオフのままにしておいてください。
画像のようになればオッケーです。(公開テストチャンネルは関係ないです)
次にVRCFTに行き、QuestPro用のモジュールをインストールします。
QuestLinkを使う場合の設定は以上です。
OpenXRランタイムの話
詳しい説明は省きますが、VRCFTを使う上で厄介な設定がOpenXRランタイムというものです。
接続方法によって変わるので併用する場合は特に注意が必要です。
VD・SteamLinkの場合
ランタイムは SteamVR にしてください。
SteamVRの設定から OpenXR を開いて STEAMVRをOPENXRランタイムとして設定 を押します。
現在のOpenXRランタイムがSteamVRになっていれば何もしなくて大丈夫です。
QuestLinkの場合
ランタイムは Oculus にしてください。
Oculusアプリから「 一般 」タブで「 OpenXRランタイム 」をOculusに設定します。
画像のようになればオッケーです。
アバターの準備
さて環境はできましたが、動かす対象のアバターがないと何もできないのでそちらをやっていきます。
現在は標準のEyeTracking設定のアバターなら眼だけは動かせるようなんですが自分がうまくいってないのでよくわかりません…
VRCFaceTracking対応Publicアバターが置いてあるらしいワールドを紹介しておきます。
とはいえやはり自分のアバターをいろいろ自由に動かしたいですよね。
基本的にはυμβρανさんのアバターセットアップ記事と公式のEyeTrackingとLipTrackingのセットアップガイドを見れば分かりますが、補足を入れつつ書いていきます。
※2023年7月現在推奨パラメーター名が更新されており、下記設定のアバターはLegacyと認識されます。動作はしますが将来的に動かなくなる可能性があります。
まずは瞬きだけやってみる
これは自分がやってみて思ったんですが、一気に視線とか口とかまでやろうとするとしんどいので、いったん瞬きだけやって実際に動かしてモチベ上げるといいんじゃないかなと思います。
ExpressionParametersの準備
ここではデフォルトのParametersのファイルを複製してそこに追加していきます。
複製したファイルにLeftEyeLidExpandedSqueeze
とRightEyeLidExpandedSqueeze
という名前のFloatパラメータを追加します。
それをAvatarDescriptorのParametersに入れましょう。
AnimationControllerの準備
この部分はυμβρανさんの記事の「 FXの作成 」の章が完璧なのでそちらを参照してください。
1点アバターのシェイプキーにJoy・Wideがない場合のBlendTreeの設定について例の紹介です。
JoyもWideもない場合はこのようにすれば問題なく動作します。
ちなみにThreshold(閾値)ですが、例えば思ったより目が開かない場合はこのように値を小さくすると補正できたりします。
アップロード
あとはアバターのAnimatorにFxのControllerがないことを確認して、PlayableLayerのFxには入っていることを確認してアップロードしましょう!
ちなみにTestでのアップロードはOSCがうまく動かないことが多かったので普通にアップロードするのが良さそうです。
VRChatで動かしてみる
さてここから実際にVRChatを起動して動作確認をしてみましょう
-
上記で紹介した3つのうちどれかででPCに接続する
-
VRCFaceTrackingのアプリを起動する
-
その後SteamVRを起動してVRChatを起動する。
-
アップロードしたアバターに着替える
-
メニューボタン長押しからアクションメニューを開き,Options/OSC/EnabledからOSCを有効化する
注 アバターを再アップロードしたら上記メニューのResetConfigをする
動作確認
ここまで来たら、実際に瞬きしたらアバターも瞬きしてるか見てみましょう!
もしうまくいってなかったら上記メニューのOSC Debugを開きます。
そこにLeftEyeLidExpandedSqueeze
とRightEyeLidExpandedSqueeze
があってリアルタイムで値が動いていればトラッキングデータがOSCで送信されてきているので、アバター側に問題がある可能性が高いです。
パラメータのつづりを間違えてたりする可能性があります。
もしここにその表示がなかったり動いてなかったりしたらOSC周りかトラッキング自体がうまくいってないかもしれません。
VRChatを再起動したら直ったりしたこともあります。
発展
アニメーションの追加
瞬きができたらあとは大体同じ要領で、パラメータとシェープキーを紐づけたアニメーションを設定することでいろいろできます。
ただ 視線の動き に関してはυμβρανさんの記事や公式のEyeTrackingガイドでは Additive レイヤーでやると書いてありますが自分はうまくいきませんでした。そこで自分はFxレイヤーでやったらうまくいったことを記しておきます。
自分は瞬きに加えて、視線の動き、あ・い・うの口の形、ほっぺのふくらみを追加しました。
あの形はJawOpen
、いの形はMouthUpperUpLeft
、うの形はMouthPout
、ほっぺのふくらみはCheekPuffRight
のパラメータを使用しました。
実際に設定した例を貼ります。
(2023/2/25追記)
追加で眉毛の動きも設定してみました。
使ったパラメーターはBrowDown~
とBrowInnerUp~
です。
変則的なBlendTreeですがいい感じに動いています。
また、アバターによっては左右の目を別々に動かすシェイプキーの用意がないこともあると思います。
そういった場合はどちらかの目のXのパラメータ(LeftEyesXなど)を選んで両方の目を動かすアニメーションを設定することでおおむね問題ないです。
画像の例では目を下に向けるシェイプキーがない場合ですがこれでもそんなに支障なかったです。
LipSyncの干渉を防ぐ(2023/3/12追記)
口のトラッキングを活用する場合、標準のLipSyncと干渉するのでそれをOFFにした方が良さそうです。
多分ModeをViseme Parameter Onlyにすると良さそうです。
VIVE Pro Eye & Facial Trackerとの違い
残念ながらVIVE Pro Eye & Facial Trackerで取れて、Quest Proでは取れない値がいくつかあります。
こちらのスプレッドシートでまとめられています。多分左端がVIVEのです。
おおむね舌の動きと瞳の大きさが取れないのが大きいかなと感じています。
それらも使いたかったらVIVEの方を買いましょう()
他人から見たときにスムーズになるようにする
どうやらVRChatのOSCは同期感覚の問題でカクカクに見えてしまうことがあるそうです。
VRChat + Quest Proのフェイスラッキング、OSCなので他人から見たときカクカクなんだけど、スムージングかけたら超滑らかになった!💫
— オレンジ/メタバース撮影技術者 (@orange_3134) November 23, 2022
めっちゃ良くない!?😆
このツールでできました!👇https://t.co/qssKzCospM#VRChat #QuestPro #VRCFT pic.twitter.com/KrTX7jDb6H
こちらで紹介されているOSCmooth を使ってみましょう。
注意としてもともと設定されているAnimationControllerが上書きされ、一度設定したものに再度適用するとうまくいかないっぽいので、元のものを複製しておくとよいです。
アプデで修正されてました!
- Unitypackageを開いてインストールする。
-
Tools/OSCmooth
を開く
- Avatarのところに使いたい対象のアバターをセットする
- LayerがFXなのを確認して
Use Playable Layer Parameters
を押す -
Apply OSCmooth to Animator
を押す
これでいい感じにスムースしてくれるようになりました。
まとめ
さて、ここまで多分QuestProでフェイストラッキングができているのではないでしょうか?できてたらうれしいです。
アバターにリアルの表情が反映されるのが本当にいいことなのか議論の余地がある気はしますが、自分は結構面白くて好きです。
あと手の形と表情を分離できたのが快適でした。
ぜひQuestProをお持ちの皆さんは挑戦してみてください!
最後に自分のアバターがどうなったか貼っておきます。
ちょくちょくアバターのフェイストラッキング対応してたんですが、こんな感じになりました!
— サックー@XR (@VRC_Sakk) December 11, 2022
瞳が動くと活きてる感が増す気がしますね。
シャーロちゃんのトレードマーク?である、ほっぺぷく~も実装できたのが良かったです!#VRChat #QuestPro pic.twitter.com/kpJJFjQW95
フェイストラッキングで眉毛も動くようにした!
— サックー@XR (@VRC_Sakk) February 25, 2023
思ったよりわかりやすくて楽しい。#VRChat #VRCFT #QuestPro pic.twitter.com/8mRH4fJNjj