《Clash of Chefs VR》分享:基于Quest手部追踪的交互实现
实现手部追踪的过程
(映维网 2021年12月30日)欢烹饪做菜的VR玩家或许知道《Clash of Chefs VR》。在这款烹饪竞技游戏中,玩家不仅需要争分夺秒地完成订单,并同时保证自己的菜肴质量。你能够自由选择美式,意识,日式和墨西哥餐厅,并完成80个单人游戏关卡。或者,你可以在实时和异步两种多人竞技游戏中与人类玩家较量。
与满是按钮的控制器相比,双手显然是厨师烹饪美味菜肴的最直观方式。所以随着Meta逐步开放Quest的手部追踪,《Clash of Chefs VR》的团队马上实现了所述功能。日前,团队创始人阿德里安·杜拉(Adrian Djura)撰文介绍了具体的过程,下面是映维网的具体整理:
当Oculus发布手部追踪更新时,我们立即发现我们的游戏《Clash of Chefs VR》非常适合手部追踪实现。当我们开始设计游戏并规划游戏中的交互时,我们的主要目标是令尽可能多的用户能够访问。这就是为什么我们的游戏只使用抓取(扳机键)按钮进行交互,不需要使用任何其他按钮。正因为如此,控制器可以很容易地更换为手部追踪。当游戏在Quest平台发行之后,我们决定将手部追踪作为一个更新来实现,而这就是我们手部追踪实现之旅的开始。
首先,我们对手部追踪进行了大量的研究,并发现了非常有用的公开信息和资料。这非常有助于在一开始就做出关于实现的决定,并且使得我们的工作更加容易。我们决定分享我们在实现过程中学到的知识,并希望这对其他开发者能够有所帮助。也许他们会发现我们的经验在实现手部追踪过程中很有用。
1. 抓取
我们需要实现的第一点是如何检测对象何时被抓取。我们决定根据指尖到手掌中部的距离来计算抓取强度。我们使用的另一个抓取值是指尖和拇指之间的挤压值。抓取值高于阈值时发生抓取。
为了确定获得抓取物体的最佳整体感觉,我们进行了很多不同的测试。我们在迭代中先用4根手指抓取一个物体,然后用2根手指抓取,最后只用1根手指抓取。当玩家仅使用食指抓取时,效果最好。另外,当使用更宽容的阈值时,玩家的错误抓取更少,总体满意度更好。有时,用户尝试通过挤压来抓取对象,这就是为什么我们决定将抓取强度计算为挤压值和手指抓取值之间的最大值。
一旦抓取值低于阈值,对象将被释放。为了防止意外掉落,我们在追踪可信度不高时忽略抓取值。
用户所面临的问题是,并非每个人都试图使用同一个手势抓取对象,这就是为什么我们需要引入相对抓取阈值和相对释放阈值。当进入抓取对象碰撞器时,相关值将根据手势进行更新。
固定抓取阈值(左)和相对抓取阈值(右)之间的差异
当释放手指时,需要更新相对抓取阈值;在握住物品时,需要更新相对释放阈值。
抓取和释放阈值在你更改姿势时进行调整
由于使用手部追踪时缺乏触觉反馈,有两件事情可以永来提示玩家,而我们已经在游戏中实现了它们。当你抓取一个物体时,手会消失;成功抓取时则会发出声音。
2. 挤压
我们的目标是实现控制器所无法首先的功能。所以我们决定对番茄酱、芥末瓶、纸杯、柠檬片和橙子片等物品进行挤压实现。挤压机制只是视觉上的效果,不会影响游戏性。所以,我们需要确保玩家的意图是挤压物体,而不仅仅只是抓住它。
我们制定了一个算法以确保不会意外触发挤压。我们将挤压定义为一段时间内抓取超过阈值的变化。因为挤压与抓取机制有关,所以我们需要添加一定的条件来区分挤压和抓取。
挤压的条件是抓取对象后的延迟,以防止玩家在试图抓取对象时意外挤压对象。另一个问题是,有时想要挤压对象时,你会意外地将其释放。为了定义挤压力学的参数,我们需要对不同玩家进行大量测试,以找到我们应该使用的确切参数。我们配置了初始参数并对玩家进行了测试。然后我们改变参数,并让玩家重复测试。我们注意到有多少次他们没有成功地挤压,有多少次物体从他们手中掉落。通过这种方式,我们收集了足够的数据来定义挤压和放置对象的最佳参数。
3. 投掷
投掷是最难用手追踪的机械之一。幸运的是,其他开发者分享了他们解决投掷问题的见解和实现。我们决定根据前几帧的速度和肩上投掷来实施投掷。
手会随着物品在肩部区域消失,并在手张开释放时出现在面前
根据最近速度计算的投掷不是我们满意的解决方案,因此我们决定更彻底地分析这个问题。我们记录了每一帧的速度,并将其保存到一个文件中以供进一步分析。然后,我们对不同的用户进行测试,要求他们投掷物体,并记录他们何时不成功。在我们收集了数据之后,我们获得了一些能够帮助我们更好地定义参数的发现。
从物体投掷失败中收集的数据,其中释放延迟明显
我们注意到,在检测到释放和应该检测释放之间存在延迟。解决方法是忽略图表末尾的平缓曲线。这个解决方案提供了更好的结果。下一个问题是,当用户故意突然停手,然后释放对象,这时会发生什么情况。我们发现用户不太可能这样做(即使是有意),所以我们决定继续截断速度图的最后一部分。
4. 用户界面
在我们的游戏中,菜单使用的是一个指针,指针指向手,按钮则是通过点击扳机按钮激活。这个想法是简单地从手部进行光线投射,并使用按压来点击按钮。这与Oculus Home中使用的机制相同,因此玩家可以直观地将其应用到我们的游戏中。
我们注意到光线投射不是从手的位置开始,光线会穿过你估计的肩部位置和你的手。我们的想法是,当你指向要选择的对象时,是否最好从手指进行光线投射。实现起来很简单,但期间出现了很多问题。首先,食指有点抖动,但我们可以很容易地平滑该点的移动。但更大的问题是,在挤压时,食指的移动不稳定,这就是为什么指针会将预期的点击位置放错位置。
我们进行了一次实际测试,以更好地理解玩家是如何进行指向。结果表明,使用肩-手射线实现是正确的决定,因为它已经在Oculus Home中实现。你可以和你的朋友一起尝试,并很快意识到为什么它是最合适的解决方案。
给出指向对象的指示
5. 高/低置信度追踪
尽管手部追踪技术仍然不像我们希望的那样精确和稳定,但我们发现有助于更好实现的技巧。高置信度和低置信度信号能够帮助我们根据它们的值调整体验。当我们进行高置信度追踪时,我们确信手和手指处于我们表示它的位置。在某些情况下,追踪不太稳定,而我们假设手处于该位置,因此追踪的置信度较低。如果你快速移动手部,或者手部不在camera视图中,然后再次出现,则通常会出现低置信度追踪。
我们想看看忽视低置信度追踪对玩家的影响。我们使用低置信度状态和不使用低置信度状态进行了测试。如果没有低置信度追踪,玩家会感觉到游戏卡顿,这不是一个好的用户体验。使用低置信度状态,追踪结果会更好。
低置信度追踪的问题是,它通常会导致抖动。为了防止这种情况,我们只追踪位置,并使用最后一个高置信度追踪帧的旋转。这样我们得到了更好的追踪结果,对象抖动不再是一个问题。
对于用户来说,抖动造成的最大问题之一是他们试图上菜的时候。为了上菜,玩家需要把手伸到前面。但对于这个位置,大多数时候追踪的可信度都很低。玩家手上的菜盘将开始失去追踪,而旋转变得不受控制。为了解决这个问题,我们决定在低置信度追踪中忽略旋转。通过这个解决方案,我们得到了更好的结果。
当你尝试上菜时,低置信度追踪将激活
6. 进一步改进
由于手部追踪仍处于开始阶段,而且每个玩家都有不同的游戏风格,因此很难找到一个适合每个人需求的解决方案。当我们针对不同的参与者进行测试并分析结果时,我们收集了最为有用的见解。
由于我们游戏的手部追踪更新现在已经发布,我们可以从玩家那里收集更多的信息。我们可以检查他们的偏好并注意出现的问题。我们需要测量和分析物体何时从手上掉落,检测错误抓取以及发生原因,测量玩家反复尝试的每个动作。通过收集足够的数据,我们将能够更好地了解问题所在,并实现更具适应性的算法。
这是我们在《Clash of Chefs VR》中实施手部追踪的故事,遇到的问题以及我们如何设法解决。未来,我们将根据从玩家那里收集的数据来进行优化,并进一步分享更多关于改进的细节。我们希望本文能够对你的手动追踪实现有所帮助。