雷锋网按:本文作者 Leap Motion 首席 VR 交互工程师 Barrett Fox 和 VR 设计师 Martin Schubert。
Leap Motion 一贯秉持的设计理念是:最自然、最直觉化的交互一定是直接且物理的。用手直接操控物体顺应了我们长久以来习惯的本能,省去了学习新交互方法的时间。不过在 VR/AR 世界,有些时候物体会出现在双手够不到的地方,或超出用户的直接操控范围。这时该怎么办呢?我们可以让用户走到物体旁边,又或者,我们可以赋予用户超能力!
我们最新的交互设计实验开发出了三种把远处物体召唤到臂展范围内的原型:第一种是简单的动画召唤技术,适用于与单个物体的交互,第二种赋予用户 “意念移物”的体验,第三种直接增强了用户手臂在虚拟世界中的能力。
第一种方案可以有效地选取遥远的单一静物,并将其直接召唤至你手中。一旦完成查看和交互后,你还可以把它送回原处。这就像从架子上选中一个物体,把它召唤到手边再让它原路返回,这一用例适用于各类游戏、教育和数据可视化应用等。
这种方法需要调动四种交互过程:选取、召唤、抓握/交互以及归位。
许多 VR 开发者常常会掉入一个陷阱,认为我们的双手和手柄的使用机制类似,并以此为基础进行交互设计。选取远处物体需要对目标精确瞄准,这种情况下很适合使用射线(raycasting)。不过,让手指或整只手悬空瞄准某个方位是很难的,特别是当你需要依靠瞄准触发动作时。
与其从手部直接发射射线,我们的做法是将头部/头显位置作为参考位置,通过添加偏移量估算出肩膀位置,再从肩膀处发出射线,经过手掌位置两点成线直达目标。
这种方法可以大大提升射线投射的稳定性,当射线击中物体的碰撞器时,线渲染器和物体周围的高亮光圈会示意使用者。
除了确保射线的稳定投射,我们还为远处物体添加了范围更大的代理碰撞器,有助于增加目标物面积,提高命中率。此外,我们还为代理碰撞器添加了逻辑程序, 一旦目标射线击中远处物体的代理碰撞器,线渲染器会被直接吸附到物体的中心点。这一结果相当于切断目标物周围区域外的线渲染器,使得这些物体能够被精确命中。
在确定了选取的运作机制后,我们还要确定何时激活这个动作,因为一旦物体移至使用者双手可及之处,使用者就要从“选取模式”返回常规的直接操作模式。
由于从手部发射射线击中远处目标的交互太过抽象化,我们考虑用相关物理隐喻来指向这一动作。如果一个小孩想要去拿他够不着的东西,他会本能地张开五指伸手去抓来表达他的愿望。
于是我们决定用这一动作来激活选取模式。当你在距离头部一定位置处张开五指,我们就开始向可能的目标物发射射线。
为了完成这一选取交互,我们还要一个确认指令,以确定悬浮物体就是我们想要选取的物体。我们再一次借鉴了小孩想抓取远处物体的做法,如果你对着悬浮物体弯曲手指做出一个抓取的动作,就能选中该物体。随着你手指继续弯曲,悬浮物体和它周围的高亮光圈会缩小,模拟一种被握住的状态。当你的五指全部攥紧,物体就会回到原来的大小,高亮光圈的颜色也会变化,说明选取成功。
现在,远处的物体已被选中,接下来,我们想让它移至可直接操作的范围内。我们又一次借鉴了现实生活中的手势。试想当我们想让某些物体靠近时,我们通常会手掌朝上,快速勾勾手指。
在选取动作的最后,我们五指攥紧,手掌朝向目标物。因此,我们决定召唤动作的第一步是要保证手掌(在一定距离内)朝上。一旦这个动作到位后,我们会让物体按手指弯曲度比例向手部移动。一旦你的手指全部攥紧,你会发现目标物已经到了你的手中,并处在被抓取的状态。
在测试阶段,我们还发现许多使用者在选取物体后,手臂伸直,手掌朝向目标物,手指攥成抓取动作,但是他们随后会把攥紧的拳头往回收来实现抓取,好像在把目标物往自己身上拉。而我们设置的激活召唤动作是手掌朝上,并根据手指弯曲度召唤物体,这一动作才把物体立即召唤至使用者手中。
将选取和召唤指令合二为一会比两套分开的动作效率高很多,但分开的动作可以提升控制力。不过,我们的激活方式非常灵活,这两种选取召唤的动作可以并存,使用者可以自己决定他们想要的交互方式。
一旦物体到了你手中,所有额外的召唤逻辑就失效了。现在,你已经得到了一个交互物体(InteractionObject)!你可以把它从左手传到右手,放在虚拟世界中某个位置,并进行交互(如果物体有 UI 组件)。只要物体处在使用者触手可及的范围内,它就不能被再次召唤。
好了,现在你用完了这个东西,接下来该如何做呢?如果你抓住这个物体并伸直手臂 (超过以你头部位置为圆心的预设半径范围外),线渲染圈会出现并给出物体返回原来位置的路线。一旦你在路线可见的情况下放开物体,物体会自动回到锚位。
总的来说,这一执行能够准确完成任务,且并不费力。它可以轻松地驱动整套基本召唤流程,完成对单一静物的选取、召唤和归位。但是,它缺乏物理感,过度依赖手势,且物体只能在规定的两个位置间按照既定路线移动。
基于这个因素,该方法较适合在召唤 UI 类非实体物,或当使用者物理移动空间有限,需要精准的点对点召唤的情况下使用。
我们在第一个实验中成功通过既定路线召唤并送回静态物,不过,我们还想进一步探索如何才能召唤动态的物体。我们能否将物体发射到使用者所在的位置,让物体落在使用者手中或落在使用者直接操控范围内呢?这一实验的灵感来自于《星球大战》中的原力,《X 战警》中万磁王把枪从敌人手中抽回来的一幕,以及巫师互相解除诅咒等。
在这个实验中,可以被召唤的物体是处于物理启动状态下的(physics-enabled)。也就是说,大多数情况下这些物体都在地上,而不像在架子上那样处于和我们视线平行的位置。为了让召唤过程更加轻松,我们决定改变下选取模式中的手势,也就是从手掌面向目标物张开这一姿势变成一种手掌张开,自然朝上,手指指向目标物的姿势。
为了迅速完成召唤,我们决定把悬浮和选取动作合二为一。我们保留了原先的射线选取方式,只不过取消了选取手势。我们保留了弯曲手指的召唤手势,使用者只需手掌向上张开并指向目标物,弯曲手指就能快速选取并召唤物体。
起初,我们想把使用者的手作为目标,让召唤物自动向手部发射。虽然听起来很有意思,不过,让物体自己精准地落入手中,这离物理原则有点远。为了解决这一问题,我们把目标从你的手部偏移到了你的前方,并在物体中加入随机的微小扭矩来模拟爆炸式发射。我们还在发射点加入冲击波和光点,并按照每个物体的当下速度进行发射,完成爆炸效果。
这样交互过程就被极大简化了,也就是说,你可以快速连续召唤不同物体,甚至在前一个物体尚未到达时就召唤下一个!
一旦你熟练掌握这个本领,你可以对着正向你飞来的召唤物进行再召唤。
相比实验一的动画召唤,实验二在动态连贯性方面更为出色,更加符合物理定律。这一交互过程也更为轻松,物理的附加变量也让这一召唤过程更有乐趣。不过这一变化也存在一个小问题,物体可能会突然降落在你的触及范围之外,不过只需再召唤一次,便可轻松解决这一问题。尽管这类召唤仍然基于手势,却比之前的方法运用了更多的物理特性。
我们第三个实验也是我们最后一个实验,这一次,我们尝试反过来看问题。与其通过手势命令遥远的物体来到我们跟前,何不延长手臂来抓取远处的物体呢。
这种想法需要向远处物体发射潜在的 “交互手 ”(InteractionHands),通过交互引擎(Interaction Engine)进行抓取。一旦使用者抓住物体后,就能对物体实行完全操控,不但可以把物体抓到手边,还能完成物体换位、释放等操作。
这种方法涉及了一些神经科学的概念,如身体图式和近体空间。我们的大脑通过处理收到的信号不断调整身体和身体各部位在空间中的姿势,以便我们在周围空间中采取立即行动。当我们使用工具时,我们的身体图式得到了扩展,把工具也包括在内,使得近体空间也相应外扩至工具可以触及的范围。当我们使用耙子或开车时,大脑会把这些工具当作我们身体的一部分。
图解来自 Sandra Blakeslee 和 Matthew Blakeslee 的联合著作《The Body Has a Mind of Its
Own》。
我们可以把身体图式看作一种适应力很强的心智模型,随着模型的不断进化,它已经适应了人类使用的各种物理工具。因此,我们相信通过虚拟手段来扩展我们的身体图式是最自然的方式。
对这次的实验来说,方法的核心理念是把我们双臂可触及范围重新映射成等比例放大的投射空间,这样可以有效地把我们的手臂延长到目标物所在的地方。这一次的交互分三部分:选取/悬浮、抓取以及握住。
在选取物体时,我们再次参照前两次实验的逻辑,让射线通过肩膀和手掌击中比目标物更大的代理碰撞器。一旦射线击中该代理碰撞器,我们向物体位置再射出一个新的蓝色手的图像和潜在的交互手(InteractionHand),交互手的物理碰撞器会完成真正的抓取动作。我们采用与前两个执行命令类似的吸附逻辑,当物体悬浮时,蓝色的发射手会吸附到物体前面一点的位置,并准备好抓取物体。
向远处物体的代理碰撞器发射射线,同时射出一只手,让手直接吸附在物体正前方位置,准备好抓取物体。
我们还考虑了另一种替代方式,不需吸附就能让远处物体悬浮并射出一只绿手,同时,使用者可以完全保留对手的操控权。这种想法能让交互引擎(Leap Motion Interaction Engine)对远处物体实现全自由操控,如软接触等。
要完成这一动作,我们将双手可触及区域重新映射出一个预设的投射空间,这个投射空间范围大到足够将最远的物体都包含在内。一旦射线击中了物体的代理碰撞器,我们会将发射手送到空间内的相应位置,只要你的射线仍打在代理碰撞器上,发射手就能自由移动。这一操作会在物体上产生气泡,用发射手就能实现物体的自由悬浮。
让远处物体自由悬浮可以实现对物体的软接触
这一动作听起来很有意思,但我们最后发现控制难度太大。一般情况下,虚拟物体的软接触交互需要一个适应过程,因为对游戏引擎来说,双手是具有不可阻挡力量的固定物体。在放大的投射空间里的进行手部操作会进一步加剧这一现象。发射手射出的距离越远,你真实手部的微小动作也会等比例放大。很多时候我们只想让手靠近远处的物体,却发现力量太大,反而把物体拍走了。经过一系列的测试后,我们放弃了自由悬浮的方式,继续采用吸附悬浮的方式。
对这个执行来说,抓取动作和用交互引擎抓取任何虚拟物体一样容易。我们已经让蓝色发射手直接吸附在远处物体前方的位置上,就只剩下直接抓取这个动作了。一旦握住了物体,我们会进入下一个投射空间抓握行为(projective space held behavior),也是这次执行的核心。
一旦你抓取了远处的物体,你和物体之间的距离就形成一个投射空间,你实际的触及区域也被重新映射放大了。在这个投射空间中,你手部的运动弧线会对应形成发射手的运动弧线。
不过,如果你渐渐把手收回,你的投射空间范围也会进行动态调整。随着你真实手部和参考肩部位置的距离缩小为零,投射空间也会慢慢缩小成你真实手部的可触及区域。
这样一来,随着你的手部慢慢回到离身体最近的位置,投射空间也会缩小至你真实手部的可触及范围,此时,你的发射手和你的真实手部融合,你就能直接握住该物体。
虽然这种能够动态调整的投射空间抓握行为背后的逻辑听起来非常复杂,但在实际操作中,这一动作会让你觉得和伸手一样自然。
只要稍加练习,这对延伸臂用起来和双手一样自然,而且它还能扩大双手的触及范围。有了延伸臂,你可以抛掷物体、接住物体并调换物体位置,同时,这些动作会变得趣味十足!
延伸臂就是这么神奇。你只需花几分钟适应动作的激活模式,就能切实感受到你的近体空间完全覆盖了整个区域。那些之前够不到的物体,你的发射手只要一秒就能够到它。相比之前两种执行方式,这一方法能够真正增强你的能力。随着技术发展把身体图式推向极致并为其注入真正的超能力,我们有理由期待更多新作品问世。
图片来自 Leap Motion、picturesby