1 输入数据
现实世界中,头显和手柄的追踪数据会被传输给虚拟世界中的头部和手部,之后虚拟世界中的头和手就会同步现实中的位置和旋转。
上述概念适用于所有的 VR SDK。
在 Oculus Integration v57 版本中,具体分为以下五个组件:
-
From OVR Body Data Source
记录身体的姿态数据,在 v57 版本中可以模拟上半身的一个运动姿态,SDK 中有提供相关的示例场景。
-
From OVR Controller Data Source
记录手柄相关数据(以手柄模型呈现)。
-
From OVR Controller Hand Data Source
记录手柄相关数据(以手部模型呈现)。
-
From OVR Hand Data Source
记录手势追踪中,手部关节的相关数据。
-
From OVR Hmd Data Source
记录头显的相关数据。
Quest 使用上述 5 个 From OVR … Source 组件来获取追踪的数据。获取追踪数据后,将使用相应的接口去处理对应类型的数据,这些接口分为:
- IController
- IHand
- IHmd
- IBody
对追踪数据进行处理和包装后,才能适配 SDK 中的一些组件。
2 手部数据处理流程
- From OVR Hand Data Source 获取头显追踪到的手部数据。
- 实现了 IHand 接口的 HandFilter 组件对数据进行防抖处理。
- SynthethicHand 组件对手部关节数据进行进一步处理,在特定情况下覆写,也就是 override 手部关节的数据,从而限定虚拟手部的手势(例如防止手势穿模)。
- HandVisua 组件渲染虚拟手部的姿态。
3 交互基本概念
- Interactor:发起交互的对象。
- Interactable:可以被交互的对象。
Oculus Integration 中有不同的 Interactor 组件,通常被挂载到表示手部或者手柄的物体上。
当 Oculus Integration 获取设备的追踪数据后,就知道虚拟世界中的手或者手柄的位置和旋转角度,此时手部或者手柄物体上的 Interactor 就会寻找对应的 Interactable。例如:
- Grab:寻找周围有无可被抓取的对象。
- Poke:寻找周围有无可被点击的对象。
当 Interactor 检测到 Interactable 对象时,会进入 hover 状态。判断是否检测到 Interactable 对象需要一定的条件,以手势追踪为例:
-
手要靠近 Interactable 对象。
-
确保当前手上没有其他的 Interactor 正在与对应的 Interactable 对象交互。
-
手要做出 Interactor 触发所需要的手势。
hover 状态可以类比成鼠标悬停的操作,相当于准备进行交互。进入到 horror 状态后,完成交互则进入 select 状态。
比如:点击 UI 的交互,
- 当伸出食指且靠近按钮时,会先进入 hover 状态,此时要准备开始点击的交互。
- 用食指点击按钮时,会转变成 select 状态,表示点击的交互动作完成。
- 取消点击动作后,即,将手远离按钮的过程中,交互状态先由 select 变成 however,再由 hover 变成 normal。