跳转至

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 配置 在 VRCAvatarDescriptorEye Look 区域设置: - Eyes: 指定左右眼的骨骼节点。 - Eye Movement: 选择 Animation (动画控制) 或 SDK (由系统接管)。 - Saccade Type: Smooth (平滑) / Saccade (跳动)。

⚠️ 避坑指南:如果你的模型眼睛看向奇怪的方向(比如天花板),通常是因为 Eye Look 里的 Look Position 没有对准眼球中心,或者骨骼轴向 (Rotation) 错了。

4. 联动逻辑示例:害羞表情

结合上述知识,一个完整的“害羞”交互是如何实现的?

  1. 触发:用户在菜单点击“害羞”。
  2. 面捕联动:Animator 参数 IsShy = true
  3. BlendShape 执行
  4. 眉毛 BlendShape 下沉 (brow_down)。
  5. 脸颊 BlendShape 变红 (blush).
  6. 嘴巴微微张开 (mouth_smile).
  7. 眼神回避 (Saccade):通过 Animator 覆盖 LookAt 权重,让眼睛看向地面或侧方,而不是直视前方。

这就是为什么高级模型看起来“有灵魂”:它们把 Unity 的静态组件变成了动态的生理反馈。