为什么VR中的投掷效果差
当你初次体验VR时,往往会尝试“投掷”操作。比如拿起虚拟的咖啡杯,将其“吸”到手中,然后扔出去,这时杯子(或者甜甜圈、球等)可能会在空中疯狂打转,飞向盆栽,这种场景在入门教程中很常见。
投掷效果差的现象
在VR中进行投掷时,你会发现有些投掷物飞得太远,有些则飞得太低,甚至还可能砸中NPC。很多人最初会认为这是自己不擅长玩VR导致的,毕竟大家都觉得掌握VR游戏的控制方式是学习过程的一部分。然而,当相同的投掷动作却产生差异巨大的结果时,比如用力投掷却只让物体落在很近的地方,玩家难免会感到沮丧。
例如,尝试夹住一个水瓶,有时手腕轻轻一弹,物体就飞走了。这表明在VR中,投掷操作的结果难以预测。
Rescuties游戏中的问题
夏天时,我一直在开发一款名为Rescuties的休闲动作VR游戏,该游戏主要围绕投掷和捕捉婴儿(或其他可爱动物)展开。在VR里,如果游戏世界的反馈与玩家的直觉相悖,就难以让玩家沉浸其中,还会给玩家带来挫败感。对于Rescuties这种以投掷为核心玩法的游戏来说,不能依赖稳定的物理规律是很令人沮丧的。
这种挫败感在这类游戏设计中是与生俱来的。简单来说,VR中的投掷操作之所以困难,是因为玩家无法感觉到虚拟对象的重量。大多数游戏会尽量遵循虚拟对象的物理性质,当玩家抓住一个对象时,游戏会赋予其一定的虚拟动量,然后停止相关操作。
但问题在于,玩家在现实生活中的感觉与虚拟世界中的情况存在割裂。拿起虚拟对象时,该对象实际的质心和玩家感觉到的质心往往不一致,这导致玩家的肌肉无法获得正确的物理信息。
当玩家只是简单地向前移动手进行投掷时,这种偏差影响不大。但当尝试弯曲手臂、旋转手腕再投掷时(俗话说“投掷的关键在手腕”),旋转手的动作会让玩家对虚拟对象施加比实际情况更大的动量,就像用勺子将其甩出去一样,这是难以接受的。在很多VR游戏中,虽然可以“拾起”物体,但物体可能离手有一英尺远,按下按钮后物体才附着在手上,但仍保持固定距离,使手变成了弹射器。三英寸和十二英寸的距离差异,会让手腕轻轻一动,就可能使物体飞过房间,或者只是稍稍向前移动一点。
在Rescuties游戏中,玩家需要捕捉快速移动的婴儿并将他们送到安全的地方。旧的操作方式需要过于精细的控制,容易让玩家感到沮丧且操作结果不稳定。玩家会疑惑:为什么不能像在现实中感觉的那样进行投掷呢?
优化投掷效果的策略
物理与虚拟重量
更好的投掷策略关键在于尊重玩家对于控制的感知,按照游戏物理引擎的建议来操作。不是测量虚拟对象的投射速度,而是测量现实生活中玩家所持对象(如HTC Vive或Oculus Touch控制器)的速度。这是玩家手中能感觉到的重量和动量,也是肌肉记忆中的重量和动量,反映了玩家在现实生活中积累的物理技能和本能。
无论拿起何种虚拟物体,玩家感觉到的质心不会改变。将物理重量与虚拟重量联系起来的方法是,使用物理控制器的质心来确定游戏中的速度。首先要找到游戏中真正的质心位置,控制器会告知其在游戏空间的位置,玩家可以通过偷看耳机下方并尝试校准来判断质心所在。然后,在控制器位置改变时,相对于控制器跟踪该点并计算其速度。
我做了这样的改变后,测试人员在Rescuties游戏中的得分有所提高,但仍存在一些不一致的情况。
定时
准确判断玩家打算投掷对象的时间也很重要。在现实生活中,扔东西时手指松开,物体离开手掌,指尖还会朝着目标方向推动物体,甚至在最后瞬间让物体旋转。
大多数VR游戏用食指控制触发器来替代这种触觉反馈。虽然这比单纯的按钮操作要好,但玩家无法通过手指感觉到物体离开手掌和滚动的过程。手指的打开只是触发器(可能是逐渐地)释放的过程。我发现,一旦玩家开始松开手指,就应该检测其投掷信号。当触发压力缓慢下降(不是一直到0%,而是通过实验设置的一个量)时,即可检测到投掷动作。
触发器压力随时间变化的曲线显示,抓取 - 保持 - 抛出周期中,用户通常不会将触发器按到100%,HTC控制器的触发器达到约80%就比较常见,再按到100%会更费力。首先,挤压触发器拾取对象,然后压力基本稳定,玩家抓住物体准备投掷,此时触发传感器会有一些噪音。当物体被抛出或丢弃时,玩家释放触发器。
由于信号噪声和玩家的心跳会使触发强度抖动,所以需要一种阈值方法来检测玩家的动作。具体来说,当触发压力比玩家拾取物体时检测到的峰值触发压力小(例如)20%时,游戏检测到投掷动作。阈值必须设置得足够高,以避免玩家意外丢下物体,这是我通过与测试人员反复试验得出的结论。同样,如果在过低的压力下检测抓取动作,就无法可靠地检测投掷/释放动作。
动量噪声
测量正确的速度和改善时机能在一定程度上缓解投掷不一致的问题,但硬件提供的速度测量数据本身存在较多噪声,尤其是耳机或控制器快速移动时(如进行投掷动作),噪声更为明显。处理噪声需要实现平滑效果。
我尝试用浮动平均值(也称为低通滤波器)来平滑速度,但这会使动作较慢的部分(准备动作)和最快的部分(释放动作)平均化,测试人员感觉就像在水里扔东西一样费力。
我又尝试采用最近测量速度的高峰值,让测试人员看到婴儿飞行速度至少能达到他们的预期,但物体飞行方向往往与预想不一致,因为最后测量的方向仍受噪声影响。
实际上,应该取最后几帧的数值并观察其趋势,即绘制一条趋势线。通过简单的线性回归测量得到的结果看上去更可靠。最终,我可以在想要的时机将物体投放到理想的位置。
改善投掷效果的总结
- 从用户能感觉到的物体(即控制器)的质心位置来测量投掷的冲量。
- 更准确地测量用户打算投掷的时刻(即在触发器的压力发生突变的时刻)。
- 充分利用测量的速度数据(即进行回归,以更好地估计玩家的意图)。