VRC|2024年にアイトラ・フェイトラ始めるなら「VRCFaceTracking」が便利
はじめに
先日、アイトラッキングやフェイストラッキングを解禁した。
アイトラ・フェイトラの導入にあたり、記事を検索したところ、セットアップの詳細に関する記事はよく見つかったが、概要から書いている記事は見つけることができなかった。そこで、はじめてアイトラ・フェイトラを導入する際に、全体像が分かっておいた方が良い人向けに記事を書くことにした。(先人が苦労して解決したことをシェアしてくれている様に、私も苦労したことをシェアして隙間を埋めていきたい。)以下では、アイトラやフェイトラに関する概要と、セットアップ例を示す。
概要
2024年の現在、VRChatのプレイスタイルは主に4種類ある。(1) パソコンだけでプレイするデスクトップ勢、(2) HMDとコントローラーを用いて顔の向きと手の位置を反映させる3点トラッキング勢、(3) トラッカーを足と腰につけて体の向きや足の向きなどを反映させる6点フルトラ勢、そして、(4) フルトラに加えて、目線や口の形を反映する装置も用いるアイトラッキング・フェイストラッキング勢がいる。なお、アイトラ・フェイトラ勢には、フルトラを兼ねていないタイプもいる。(この他、特殊なスタイルとしては、疑似トラッキング勢や、スマホ勢などもいる。)
アイトラ・フェイトラを導入するためには、(1) 視線や口の形を検出するデバイス対応デバイス (2) デバイスが検出した数値を意味のある情報に変換する翻訳ソフト (3) その翻訳されたデータを受信してVRCに送る仲介ソフトが必要である。VRCでは、OSCと呼ばれるプロトコルを用いることで、パソコンとVRCの間でデータを送受信することができる。そして、(4) VRCに送られてきたOSCデータを視線や表情に反映させることができるアバターを用意することで、アイトラ・フェイトラが実現できる。アバターのパラメタの反映はOSCの名前とExpression Parameter の名前を一致させるだけでよい。
具体例
(1) アイトラ・フェイトラ用のトラッキング・デバイスとしては、現在入手しやすいものでは例えば VIVE XR Elite や Meta Quest Pro などがある。入手困難なものでは、例えば、VIVE PRO EYE、VIVE Facial Tracker、Droolon F1が挙げられる。
(2) 翻訳ソフトは、デバイスを販売している各社より入手することができる。VIVE PRO EYE などの古めのデバイスを使う場合は、旧バージョンのソフトの方が安定しているらしい。これは公式サイトからはダウンロードできないため、個別に入手する必要がある。(推奨バージョンはここにまとめられている。)
(3) デバイスが得たシグナルの翻訳結果は各社によって異なるが、これは統一されていることが望ましい。というのも、あるデバイス用にアバターを作成している場合、別のデバイスを使用する際に作り直す必要があるからである。この問題を回避するためには、2024年の現在では、 VRCFaceTracking という仲介ソフトを用いると良い(GitHubはこっち)。
有志が作成している各社のアイトラ・フェイトラデバイスに対応するModuleをインストールすることで、各社の統一されていない情報を、統一されたアイトラ情報・フェイトラ情報として、VRCFaceTracking に入力することができるようになる。
VRCFaceTracking は OSC データを送信するサーバーになっている。上記のModule のおかげで、どのようなデバイスを用いても、例えば、「左目が動いた」という情報は、水平方向は「v2/EyeLeftX」という名前のパラメタの値、鉛直方向は「v2/EyeLeftY」という名前のパラメタの値として送信される。(パラメタの詳細はここで定義されている。)
私は VIVE PRO EYE と VIVE Facial Tracker を使用しているので、下記の様な構成となった。
導入方法はVRCFaceTracking の懇切丁寧なマニュアルを見ればわかるが、SRanipal をインストール際に少し手間取った。この解決方法も同マニュアルに書かれている通りに行って解決できたが、概要を書いておくと、下記のとおりである。
もともとパソコンにはSRanipal 1.3.6.1 ? がよくわからないまま入っていた。推奨バージョンの 1.3.1.1 をインストーラーを用いて入れようとすると ERROR 1001によりインストールができなかった。
VRCFaceTracking のマニュアルには2種類の解決方法が掲示されていた。まずは、インストーラが生成するものをエラー発生時に別のフォルダにコピーし、ERRORをOKして全部消されてから、コピーしたものを置く方法を試した。しかしながら、この方法ではうまく機能しなかった。
そこで、クリーンな状態にしてから再インストールする方法を採用した。コマンドプロンプトを管理者権限で起動して `sc delete SRanipalService` と入力、SRanipal のサービスを停止。上のマニュアルに記載されているレジストリを削除して、C:\Program Files\VIVE\SRanipal にあるフォルダも削除した。これらを行った後、インストーラーを起動すると、無事にインストールすることができた。
なお、SRanipal v1.3.1.1 はすでに公式サイトから入手できないようであり、ここからリンクされている物を使用した。(一般的に、こういう第三者の再配布はウィルスなどが仕込まれている危険性がある。各自で確認の上、使用するかを判断してほしい。)
(4) アバターの設定
VRCの設定を変更し、OSCを受信するようにする。すると、アバターのExpression Parameters を受信した信号で上書きすることができる。
ローカルでは20msぐらいで更新しても反映されるようであり、工夫次第では例えば下記動画の様に、自分の心電図波形を持ち込んだりすることもできる。
これは余談であるが、2023年は私にとってハードウェアの制御方法の理解が進んだ年であった。具体的にはIoTデバイスの試作にハマっており、ハードウェアが出す信号をSeeed XIAOで読み取ったり、Jetson nanoでI2C通信を用いてハードウェアを制御したり、BluetoothやBLEの技術を勉強したりしていた。その流れで、OSCに関する技術調査も兼ねてポケットECGを自作し、自分の心電図波形を取得、VRChatにリアルタイムで持ち込んでいた。作成している時は、これをつけてお化け屋敷配信とかしたら面白そうだなって思っていた。(なお、今はお蔵入りしている。オンラインの相手には100~200msぐらいの間隔で届くため、波形がつぶれるのと、今は配信をしていないためである。)
さて、デバイスで検出した自身の表情変化をアバターに反映させる話に戻りたい。例えば、目を閉じている状態から開いている状態に切り替えるためには、目を閉じている animation と、開いている animation の極端を作成し、それを BlendTree を用いて中間状態を滑らかに補間できるようにする。自分の目の開き具合とBlendTree の補間位置を対応させることで、目の開閉が実現できる。
BlendTreeに入れるanimatonは3つ以上指定することができる。例えば、自分の目を大きく開いている状態から閉じていくにしたがって、驚いている表情→目を開いている状態→閉じている状態→笑っている状態といった推移も実現可能である。混ぜる割合を指定するパラメタは、VRCFaceTracking で定義されている物を用いる。
また、BlendTreeを制御するパラメタは1種類だけでなく、2種類同時に使うこともできる。例えば、視線の動きは水平方向と鉛直方向の移動に関するパラメタを組み合わせることで、実現できる。
以下ではこれらの実装例について述べる。VRCFaceTracking が送信するパラメタから使えそうなものを探し、Expression Parameters に追加し、Animator の条件に使用する。このリンク先のマニュアルの下の方には簡素化された便利パラメタも示されている。
なお、定義されているパラメタすべてを使う必要はなく、例えば下記の様なパラメタを使用している。
これらの概要は下記の通り。実験用の構成である。
視線の設定に「v2/EyeX」「v2/EyeY」
瞼の設定に「v2/EyeLidLeft」、「v2/EyeLidRight」
舌の設定に「v2/TongueOut」
口が開いた設定に「v2/MouseOpen」
ウの口をしたとき用に「v2/LipPucker」
Animation の詳細な作り方は、他の方が書いてくれているため、以下では設定の肝である、BlendTreeの設定について主に述べる。
視線の設定例
視線用のAnimationLayerを作成し、下記の様な構成とした。
BlendTreeの下のEmptyは、瞼が閉じ気味のときは視線を動かさず、瞼が開いているときだけ視線に応じて目を動かすための物である。「v2/EyeLidLeft」の値の大小で切り替えるようにしている。
目を動かすanimationはBlendTreeを用いて実装している。BlendTreeは animation の余白を右クリックし、Create State > From New Blend Tree から作成した。BlendTreeをダブルクリックすると下記のような画面が出てくる。なお、余白をダブルクリックすると元の全体像に戻る。
BlendTreeを選択すると、Inspector が切り替わる。Blend Type を 2D Freeform Directional にし、Parameters を 「v2/EyeX」「v2/EyeY」に指定した。これらのパラメタに対して、animation を設定した。
例えば、左に向いたときは 「v2/EyeX」=-0.4、「v2/EyeY」=0 として、そのanimationは左目が左を向いたものを指定する、といった具合で行った。
なお、将来的に寄り目ができるのか実験したかったので、animation は左目と右目、独立で作成し、animation layer も 左目用と右目用で分けている。
瞼の設定例
左目の瞼についてはこんな感じである。Blend Type を1Dにし、Parameter をには「v2/EyeLidLeft」を指定した。Motion には、3種類のanimation を設定した。それぞれ、目を閉じたとき、開いているとき、驚いたときの3種類である。Threshold は、Automate Thresholds のチェックを外し、自分で指定した。値は、VRChat内でOSC Debugツールの値を見ながら瞼を動かし実験的に決めた。右目も同様に設定を行った。
このような設定を行うことで、冒頭で示した動画の様な表現ができる。
おわりに
2024年の現在、有志の方が便利なツールの開発および懇切丁寧なマニュアルの整備を行ってくれている。このおかげで、簡単にアイトラ・フェイトラを導入することができる様になっている。本稿ではこの概要を述べた。より詳細なセットアップ方法は他の方の記事を参考にされたい。