ある日、twitterを見ていたらOSS/OSHによる顔トラッキングプロジェクトを知った。UpperFaceことアイトラッキングはEyeTrackVR、LowerFaceこと口トラッキングはProjectBabbleというのだった。当然のようにVRChatでも使えるようだ
さらに M5Stackカメラで作るVR用フェイシャルトラッカー 【データ無料】 - 霧雨工房 - BOOTH で口トラックなら既製品で比較的カンタンにできそう、というのを知ったので2025年のゴールデンウイークの工作にやってみようという次第
完成図(2025/6/26)


…ゴールデンウィーク中に完成したかったんだがなぁ
前提の知識
世間で普及している(であろう)フェイストラッキング規格
フェイストラッキング技術はまだまだ普及しておらず、統一的な規格はない。そのため、どの顔の部位を検知して、3Dモデルがどう動くかについて統一されたものはない
一方で世間では顔トラッキング機能の付いたiPhoneとかいうスマホが7年ほど継続して販売されており、しかもこれがやたらと性能が良い。顔トラッキングがそんなに一般化してないのに非VR向け顔トラデバイスはなぜか一強がいる、というなかなかヘンテコな場になっている
その上、20万30万が普通の業務用デバイスと比較すると、顔トラッキングにしか使わないとしても10万ぐらいのiPhoneが安い。そのため、VTuberが顔トラッキングデバイスとしてiPhoneを前提にするのが一般化している。その流れに乗ってApple ARKitを下地にした準拠した実装「パーフェクトシンク」がある。VTuberやVRM方面で普及している
VRC向けとはある程度技術的に分岐して普及しているため留意したい
VRChatにおけるフェイストラッキング規格
一方でVRデバイス方面では開発向けやプレミアムなHMD*1などで、顔トラッキング機能や追加デバイスが細々と販売されている。これをVRChatで使いたいと思うのは当然の要求だ。しかし、これらのフェイストラッキング規格について、視線トラッキング以外はVRChatは特に公式でサポートしているわけではない。代わりにOSC経由で表情情報をVRChatに送りつけ、顔トラッキング→アバターを実現している
顔トラッキングデバイスとVRChatのブリッジ役をやっているソフトが、VRCFaceTracking(VRCFT)であり、VRCFTが各種デバイスの公倍数として定義した表情一覧がUnifiedExpressionsだ。
VRCアバターがそれぞれ独自の表情ジェスチャー操作やFXレイヤーを持っているのと同様に、これらのOSCとblendshapesが使えるようにAnimatorやExpressionParameterが組まれたアバターが必要になる
ただ、boothを探してみると、既存アバターへの追加機能として顔トラ機能Addonのみを販売しているものが結構あるため、限られたモデルか自力モデリング&セットアップしかなかった以前よりは格段に導入がしやすくなったと思われる。また市販アバターでも顔トラに対応したものが、多くはないものの見かけるようになってきたため、それらの試着アバターで試すのもありだろう
VRCのOSCにおけるExpressionParameters上限問題とBinaryParameters
VRCで顔トラッキングをアバターに反映するには、Avatar3.0のOSC通信を利用ことは説明した。外部通信によってAvatar3.0のExpressionParametersを注入する形で、表情ブレンドシェイプ、つまりVRCFTのUnifiedExpressions値を書き込む。
ここで注意しないといけないのが、VRCでは同期されるExpressionParameterには256byte上限があるのだが、UnifiedBlendshapesを愚直に変換する(FloatParameters)と256byteを超えてしまう。そこで解像度が必要ないパラメーターをビット列に圧縮し、アバター側ではそれをうまいことデコード出来るようにすることで、256byte制限に収まるような工夫が作られた。これがVRCFTのBinaryParametersだ
VRCフェイストラッキングのために必要なもの
ということで、VRC内でそれなりに動くようにするためには、
- 顔トラッキングデバイス(ハードウエア)
- これが今までニッチだったワケ
- VRChat OSCを使えるぐらいの知識
- 顔トラ対応アバター
- といっても、顔トラアバターは結構増えててboothでアドオンが売られている。単体て顔トラ対応してるアバターも出てきている。例えば EasternWindのネフェリサは試着アバターに顔トラ対応版があり、FUJIYAMAにも設置されてるPolygonLoadingの試着サービスでも提供されているので、まずはこのあたりから試しても良いと思う
が最低限必要になる
今回はこのうちの顔トラデバイス(口のみ)を、ProjectBabbleと自作ハードウエアでなんとかしてみよう、というチャレンジになる
開始と共に盛大に間違える!
ということで M5Stackカメラで作るVR用フェイシャルトラッカー 【データ無料】 - 霧雨工房 - BOOTH を参考に、ESP32TimerCAM Fを買い… Babbleのドキュメントを読み…

理屈の上で言えば、5000円ちょっと*2で、公式のBabbleMouthTracker*3に近い機能のアイテムが手に入る…。なんなら旧ViveFacialTrackerにも近いアイテムになるんじゃないか?ふふふ、やったぜ!と妄想だけ爆発していたんですが
ん?
Babbleの公式ハードウエアガイドにESP32 TimerCAM F いないじゃないか!せっかくファーム書き込みツールまで用意されているのにそのままインストール試そうとしてもダメ(それはそう) グエーッ!早合点が過ぎるぞ俺!ギエー!
…いやまて、霧雨工房さんはちゃんと出来ているみたいだし、ハードウエア機能的には足りてるはず。ProjectBabbleは単にカメラ映像をトラッキング情報に変換するだけ、Webカメラでも動作は見れている。そしてESP32TimerCAMはESP32とカメラモジュールの抱き合わせパッケージ販売であり、つまり公式推奨ハードと構成は同じようなもの…じゃないっけ?TimerCAMには映像ストリーミングのサンプルプログラムもあればArduinoIDEでの開発ガイドもある…
つまり…、理屈の上ではあとはESP32TimerCAMのサンプルをコネコネして、自力でなんとか公式ファームに寄せて、Babbleに読み込みせれば"勝ち"だ!ガンバルゾー!
つづく