title: VR 交互与追踪体系 (手追/面捕/眼追) description: 手指追踪、面部捕捉、眼部追踪与 VRChat 的 Avatar 3.0 联动机制
VR 交互与追踪体系 (手追/面捕/眼追)
VRChat 的强大之处在于它不仅显示你的模型,还能实时追踪你的表情、眼神和手指动作。这一切都基于 VRM/Avatar 3.0 的标准化组件。
1. 手指追踪 (Finger Tracking)
原理
通过 VR 头显(如 Quest 3 原生追踪)或指虎手柄(Valve Index),系统会计算你每根手指的弯曲角度,并将其映射到 Unity 的 Animator 参数中。
Unity 实现
在模型上添加 VRCFingerTracking 组件。它会自动将 Unity 的 Hand Pose 绑定到 VRChat 的标准参数:
- IndexCurlLeft, MiddleCurlLeft, RingCurlLeft, LittleCurlLeft (左手四指)
- IndexCurlRight ... (右手四指)
- ThumbCurlLeft/Right (左右拇指)
交互应用:Hand Grab (手部抓取)
这是实现“提起裙子”、“握手”、“拿道具”的核心技术。 - VRCObjectPickup:让物体可以被手“抓”起来。 - Contact Receiver:检测手部是否触碰到了特定区域(例如:检测到指尖触碰裙摆边缘 -> 触发“提裙”动画)。
🎯 实战场景:在裙子两侧设置隐形的
Contact Receiver,当检测到手指做出“捏”的动作并触碰该区域时,触发 Animator 参数切换至“提裙状态”。
2. 面部捕捉 (Face Tracking)
原理
利用摄像头捕捉面部肌肉运动,映射为 52 个标准的 ARKit BlendShape 参数。
- vrc.v_eyes (眼神)
- vrc.v_blink (眨眼)
- vrc.v_aa, vrc.v_oh (嘴巴开合,即 Viseme)
Unity 实现
模型必须包含对应的 BlendShape (形变)。
- 比如,模型必须有一个叫 vrc.blink_left 的 BlendShape,其作用是将左眼的 Mesh 顶点向下压(闭眼)。
- 当 VRChat 收到摄像头数据说“闭眼了”,就会把这个 BlendShape 的 Slider 从 0 拉到 100。
常见问题
- 模型没有做 BlendShape:面捕无效,脸永远是僵硬的。
- 映射错误:张嘴变成了睁眼。这通常是因为导出 FBX 时勾选了错误的设置。
3. 眼部追踪 (Eye Tracking / Saccade)
自动眼球转动 (Saccade / Jitter)
即使你戴着头显,眼球也不会一直死盯着一个地方。VRChat 提供了内置的微动算法。
- LookTarget:模型的眼睛会自动看向你当前 VR 视野的注视点。
- Saccade:每隔几秒,眼球会随机微动一下,模拟真人思考时的眼神游移。
提供了内置的微动算法。
- LookTarget:模型的眼睛会自动看向你当前 VR 视野的注视点。
- Saccade:每隔几秒,眼球会随机微动一下,模拟真人思考时的眼神游移。### Unity 配置
在 VRCAvatarDescriptor 的 Eye Look 区域设置:
- Eyes: 指定左右眼的骨骼节点。
- Eye Movement: 选择 Animation (动画控制) 或 SDK (由系统接管)。
- Saccade Type: Smooth (平滑) / Saccade (跳动)。
⚠️ 避坑指南:如果你的模型眼睛看向奇怪的方向(比如天花板),通常是因为
Eye Look里的Look Position没有对准眼球中心,或者骨骼轴向 (Rotation) 错了。
4. 联动逻辑示例:害羞表情
结合上述知识,一个完整的“害羞”交互是如何实现的?
- 触发:用户在菜单点击“害羞”。
- 面捕联动:Animator 参数
IsShy = true。 - BlendShape 执行:
- 眉毛 BlendShape 下沉 (
brow_down)。 - 脸颊 BlendShape 变红 (
blush). - 嘴巴微微张开 (
mouth_smile). - 眼神回避 (Saccade):通过 Animator 覆盖
LookAt权重,让眼睛看向地面或侧方,而不是直视前方。
这就是为什么高级模型看起来“有灵魂”:它们把 Unity 的静态组件变成了动态的生理反馈。