Meta Quest Pro 表情トラッキング/ パーフェクトシンク対応表 ※追記あり
Meta Quest Proの内部にはフェイストラッキング用のカメラが内蔵されており、ユーザーの表情・視線の動きをリアルタイムにトラッキングできます。
モデルをこれに対応させるには、Meta Movement SDK の OVRFaceExpressions で定義された63個のシェイプキーが必要です。
iPhoneフェイストラッキング(ARKit)向けのシェイプキーが揃っていれば、ほぼシェイプキー名の差し替えで対応可能です。
一部は、ARKitのシェイプキーを上下左右に分割して作成することになります。
青字は、ARKitのシェイプキーを左右(L/R)・上下(T/B)に分ける項目です。
赤字は、新規で作成する項目です。
全て揃っていなくてもそこそこ動きます。
いずれもFacial Action Coding System (FACS)に基づいた表情設計ということで、シェイプキーほぼそのまま流用できました やったね
— はいぬっか (@hinzka) 2022年12月18日
VRM対応の、リアルタイムで表情調整できるツール等はまだないよ
一旦パーフェクトシンクで整えてからQuest Pro対応させるのが合理的かとおもいます pic.twitter.com/51fXz2NVfy
| OVRFaceExpressions | ARKitとの互換 | 内容 | |
| 1 | BrowLowererL | browDownLeft | 左眉全体を下げる |
| 2 | BrowLowererR | browDownRight | 右眉全体を下げる |
| 3 | CheekPuffL | cheekPuff |
左頬をふくらます
|
| 4 | CheekPuffR | cheekPuff | 右頬をふくらます |
| 5 | CheekRaiserL | cheekSquintLeft | 左頬をもちあげる |
| 6 | CheekRaiserR | cheekSquintRight | 右頬をもちあげる |
| 7 | CheekSuckL | 新規 | 左頬をへこます ※CheekPuffLの逆ベクトル |
| 8 | CheekSuckR | 新規 | 右頬をへこます ※CheekPuffRの逆ベクトル |
| 9 | ChinRaiserB | mouthShrugLower | 上唇を上げる |
| 10 | ChinRaiserT | mouthShrugUpper | 下唇を上げる |
| 11 | DimplerL | mouthDimpleLeft | 左えくぼ (口角を後ろに引く) |
| 12 | DimplerR | mouthDimpleRight | 右えくぼ (口角を後ろに引く) |
| 13 | EyesClosedL | eyeBlinkLeft | 左閉じ目 |
| 14 | EyesClosedR | eyeBlinkRight | 右閉じ目 |
| 15 | EyesLookDownL | eyeLookDownLeft | 左目で下を見るときの瞼 |
| 16 | EyesLookDownR | eyeLookDownRight | 右目で下を見るときの瞼 |
| 17 | EyesLookLeftL | eyeLookOutLeft | 左目で左を見るときの瞼 |
| 18 | EyesLookLeftR | eyeLookInRight | 右目で左を見るときの瞼 |
| 19 | EyesLookRightL | eyeLookInLeft | 左目で右を見るときの瞼 |
| 20 | EyesLookRightR | eyeLookOutRight | 右目で右を見るときの瞼 |
| 21 | EyesLookUpL | eyeLookUpLeft | 左目で上を見るときの瞼 |
| 22 | EyesLookUpR | eyeLookUpRight | 右目で上を見るときの瞼 |
| 23 | InnerBrowRaiserL | browInnerUp | 左眉の内側を上げる |
| 24 | InnerBrowRaiserR | browInnerUp | 右眉の内側を上げる |
| 25 | JawDrop | jawOpen | 顎を開く |
| 26 | JawSidewaysLeft | jawLeft | 左に顎をずらす |
| 27 | JawSidewaysRight | jawRight | 右に顎をずらす |
| 28 | JawThrust | jawForward | 顎を前に出す |
| 29 | LidTightenerL | eyeSquintLeft | 左目を細める |
| 30 | LidTightenerR | eyeSquintRight | 右目を細める |
| 31 | LipCornerDepressorL | mouthFrownLeft | 左口角を下げる |
| 32 | LipCornerDepressorR | mouthFrownRight | 右口角を下げる |
| 33 | LipCornerPullerL | mouthSmileLeft | 左口角を上げる |
| 34 | LipCornerPullerR | mouthSmileRight | 右口角を上げる |
| 35 | LipFunnelerLB | mouthFunnel | 左の下唇をラッパ状に突き出す (ウの口) |
| 36 | LipFunnelerLT | mouthFunnel | 左の上唇をラッパ状に突き出す (ウの口) |
| 37 | LipFunnelerRB | mouthFunnel | 右の下唇をラッパ状に突き出す (ウの口) |
| 38 | LipFunnelerRT | mouthFunnel | 右の上唇をラッパ状に突き出す (ウの口) |
| 39 | LipPressorL | 新規 | 左唇を上下に圧縮する 唇の幅は変化しない |
| 40 | LipPressorR | 新規 | 右唇を上下に圧縮する 唇の幅は変化しない |
| 41 | LipPuckerL | mouthPucker | 左唇を細めつつ突き出す (チューの口) |
| 42 | LipPuckerR | mouthPucker | 右唇を細めつつ突き出す (チューの口) |
| 43 | LipStretcherL | mouthStretchLeft | 左口角を引き下げつつ横に伸ばす |
| 44 | LipStretcherR | mouthStretchRight | 右口角を引き下げつつ横に伸ばす |
| 45 | LipSuckLB | mouthRollLower | 左の下唇を巻き込む (もぐもぐの口) |
| 46 | LipSuckLT | mouthRollUpper | 右の上唇を巻き込む (もぐもぐの口) |
| 47 | LipSuckRB | mouthRollLower | 左の下唇を巻き込む (もぐもぐの口) |
| 48 | LipSuckRT | mouthRollUpper | 右の上唇を巻き込む (もぐもぐの口) |
| 49 | LipTightenerL | mouthPressLeft | 左の口角をぎゅっと緊張 ※ARKitより弱める |
| 50 | LipTightenerR | mouthPressRight | 右の口角をぎゅっと緊張 |
| 51 | LipsToward | mouthClose | 顎を開いた状態で唇を閉じる |
| 52 | LowerLipDepressorL | mouthLowerDownLeft | 左の下唇を引き下げる |
| 53 | LowerLipDepressorR | mouthLowerDownRight | 右の下唇を引き下げる |
| 54 | MouthLeft | mouthLeft | 口全体を左に寄せる |
| 55 | MouthRight | mouthRight | 口全体を右に寄せる |
| 56 | NoseWrinklerL | noseSneerLeft | 左の鼻をしかめる (左の眉根が寄る) |
| 57 | NoseWrinklerR | noseSneerRight | 右の鼻をしかめる (右の眉根が寄る) |
| 58 | OuterBrowRaiserL | browOuterUpLeft | 左眉の外側を上げる |
| 59 | OuterBrowRaiserR | browOuterUpRight | 右眉の外側を上げる |
| 60 | UpperLidRaiserL | eyeWideLeft | 左の目を見開く |
| 61 | UpperLidRaiserR | eyeWideRight | 右の目を見開く |
| 62 | UpperLipRaiserL | mouthUpperUpLeft | 左の上唇を引き上げる |
| 63 | UpperLipRaiserR | mouthUpperUpRight | 右の上唇を引き上げる |
VRChatでQuestProのフェイストラッキングを使いたい人向けの追記:
眉毛がしっかり動くとたのしい が徐々にHMDがずりおちてきちゃいます よいしょ pic.twitter.com/6GcHmjG5JB
— はいぬっか (@hinzka) 2023年4月26日
ALXRとVRCFaceTrackingを用いて、表情のOSCデータをVRChatへ送信することができます。サックーさんの記事が参考になります。
このシステムでは、検知した各種表情に対して、任意のシェイプキーを自由に割り当て可能になっています。このため、ARKit用シェイプキーの文字列をわざわざQuestPro用にリネームする必要はありません。
UnityでQuestProのトラッキング環境を自作している人向けの追記:
VRMのBlendshape Clip経由の表情定義でフェイストラッキングできるスクリプトを、くにやんさんが公開されています。
Meta Movement SDKで定義された文字列で、Clipを63個用意し、それぞれに対応するBlendShapeを登録しておけば、QuestProで動作させることができます(パーフェクトシンクと同じしくみです)。
FaceExpressionsController.cs
FaceExpressionsControllerVRM.cs
の2つを、BlendShapeを持つオブジェクト(VRoidであれば"Face")にアタッチします。
Quest Pro、単体で3点トラッキングと顔トラッキングと指トラッキングできてMR合成できて外部ストリーミングもできる
— はいぬっか (@hinzka) 2023年3月12日
組み合わせると楽しいよ これは良いおもちゃ pic.twitter.com/R3F65s9ju4