跳转到主要内容
editor Chen 提交于

手势跟踪和VR都是目前最新、最火的创新技术,如何将二者很好地融合在一起是目前技术需要应对的一大挑战。 不论是哪种技术,都需要开发者摆脱传统PC用户体验的思维定势,思考新技术应带来怎样的体验。在带来挑战的同时,它们还带来了很大的机会——开发者可以尝试去将曾经在科幻电影里才能见到的效果在虚拟现实中实现。

这篇文章结合了大量的开发和用户测试的经验,以Leap Motion Controller手势跟踪设备结合VR头盔的操作方式为例,总结了一些手势跟踪技术在VR中用户体验的设计原则和对VR技术的思考。

<center><img src="http://intel.eetrend.com/files/2016-12/wen_zhang_/100004252-14063-1.gif…; alt=“” width="600"></center>

在开始详细讲解之前,需要特别强调一点:不同人对感官刺激(如听觉和视觉)和物体变形(由瞳孔间距的差异导致)的体验是有很大区别的。你看着合适不代表其他人看着都很合适。因此用户测试是非常非常重要的。

第一部分·UI设计
1、VR中的可交互元素的设计必须以功能为导向

2、每一个可交互物体都需要响应用户的行为

3、用简明的文字解释清楚手势的功能

4、可交互元素的个数要适度,不要太多

5、将文字和图片放在轻微凹下去的表面上

不要轻信你的直觉
直觉对于设计来说是大忌,个人的主观感觉不能代表多数人。不同人的感受是不一样的,但是不同的人在受到相同引导的情况下会做出相似的反应。通过对可供性(Affordance)的设计来引导用户做出特定的手势是最可靠的做法。 对于可供性的概念后文会提到。

在现实世界中,我们用手来拿东西都是凭本能来完成。通过思考现实世界中我们认识事物的方式,我们可以利用手的动作来增强用户体验。这种对现实世界的模仿可以帮助用户理解。

语义手势和响应手势
手势分为两类:语义手势和响应手势。语义手势是传达了某种语言信息的手势,被老外又称为“body language”。它是因人而异的,不同的人为了描述相同的内容会做出不同的语义手势,因此很难去追踪。但是了解语义手势对用户的影响是非常重要的。

响应手势是结合了人体工学和可供性设计的手势,通常是由特定事件触发的且易于辨识的,因此也易于追踪。人们的反应通常是相似的,不同的用户很可能会做出非常相近的响应手势。

利用用户对现实世界的理解,同时避免使用没有语义的手势,我们就可以引导用户去理解并使用虚拟世界里的东西。

可供性(Affordance)设计
在工业设计领域,可供性是指物体的外观等物理特征可以提示用户其用途的特性。好的可供性设计可以引导用户正确地使用物品,而不好的设计会导致用户的误操作。

良好的可供性设计有利于控制用户的动作,让用户可以按照我们预期的那样与物体互动。对于二维的设计,良好的可供性符合传统键鼠操作的用户体验原则。VR则扩展了用户交互的手段,不再局限于键鼠的操作,因此需要做的可供性设计就要更加复杂。下面是VR交互设计的一些最佳实践经验:

1、物体的反馈越直观,能提供的交互就越丰富。比如,给一个按钮添加一些立体感,让用户一看就能明白它是“可以点击”的;

2、可供性越明确,交互的方式就越明确。换句话讲,不同的交互方式对应着不同的可供性设计。如果你的可供性设计有着明确的指向性,那么用户就很可能会按照你的指引去完成规定的操作。良好的可供性设计可以让你的UI更加高效,同时还能减少误操作;

3、参考现实世界的可供性设计。环顾你的四周,随处都能见到可供性的设计。下面这几种就是非常典型的现实世界的可供性设计:

(1)门把手。门把手和你的手掌非常贴合,你看一眼就知道可以用手来转动它。

(2)鼠标按钮和触摸按钮。针对鼠标设计的按钮一般都非常小,正好和屏幕上的鼠标指针大小相似,而触摸按钮则做的足够大,方便用户用手指去点触。

充足的响应设计
所有可交互的物体都要充分响应用户的操作。比如一个触摸按钮只要被用户点了就要发生变化,即便用户没有在这个按钮抬起手指(如iOS主界面上的App icon,只要用户按住就会变暗,即便用户之后把手指滑到别处抬起)。这种效果可以给用户一个心理暗示,引导用户去点击这个按钮。

像Leap Motion Controller这样的手势响应控制器不会提供触摸反馈,因此必须用其他提示来告诉用户他们正在和某个东西互动。以设计一个按钮为例:

1、用阴影来表示用户的手放在了按钮上面;

2、用光线的变化来告诉用户按钮的深度;

3、确保按钮被按下的程度要和用户按下的程度相关;

4、用声音来提示按钮被触发。

当你实现上面这些效果之后,人们会间接感受到触摸的反馈并清楚地知道自己在和哪个东西互动。如果不提供反馈,用户就意识不到这些东西是可交互的,和它们交互的可能性会大大降低。

手势的讲解
除了可供性设计以外,文字说明和声音提示对第一次使用的用户来说也很有必要。

务必对必要的交互手势做出详细的说明,这对之后用户的操作很有帮助。比如,如果你说“打一拳”,不同的用户对这句话会有不同的理解。然而,如果你说“张开你的手,然后打出一拳,重复这个动作。”那么用户就会张开手,然后再攥成一个拳头打出去。描述一个动作的时候尽可能详细一些,这样才能让用户做出你想要的动作。

可交互元素的设计原则
1、大小要合适。可交互元素的大小要符合用户的输入方式(整个手掌还是一跟手指)。在现实世界中一根手指点击的范围不得小于20mm,否则用户可能会不小心点到范围以外的东西。

2、布局要合理。不要把可以交互的元素排布得太过密集。

3、限制手的交互方式。建议尽量将可交互元素用按钮或其他较常见的元素来呈现。通常情况下让用户用食指去点击是最理想的。同时保证紧挨着这个元素的其他东西是不可交互的,从而防止误触。

文本和图片要清晰
尽管VR技术很强大,但是在渲染文本的时候还是有些小问题。受分辨率的限制,只有在视场角正中央的文字看起来很清晰。在边缘的文字看起来就有一点模糊,用户要想看清楚就得转过头去正对着它。因此,尽量避免出现一行太长的文字,而是将其排成一个竖着的长条,搭配滚动条来供用户浏览。

另一个问题是镜头失真。当用户快速浏览几行文字时,由于用户的眼球的位置一直在变化,因此可能会产生画面失真和模糊的现象。而且如果文字到用户之间的距离在变化,也会引起失真。

解决这些问题的最简洁的方法就是限制文字出现的范围。尽量将文字放在靠近视场角中心的范围来提高可读性。

第二部分·交互设计
1、所有动画均由用户行为触发;
2、人的手是沿弧线运动的而不是直线;
3、限制用户学习的手势的个数;
4、所有交互都需要有明确的开始和结束状态;
5、保证用户可以与被手挡住的东西交互。

限制交互动作的个数
VR技术发展的最大障碍便是晕眩感。产生晕眩感的原因主要是不同感官(听觉、视觉和空间感等)之间的冲突。Oculus的最佳实践指南中详细描述了这个问题。通常情况下,不受用户控制的空间转移动画会让用户产生晕眩感。相反,让用户来控制动画的触发则会大大降低晕眩感。

基本原则:

1、屏幕必须始终响应用户的行为。不论当前显示的是菜单、暂停画面还是过场动画,用户都应可以环顾四周;

2、在用户未做任何输入的情况下不要触发任何动作,不论是改变头部朝向还是切换场景;

3、不要移动或旋转地平线和场景中的大型物体,除非这是由用户触发的;

4、减少需要用户需要大幅度转动头部的操作;

5、确保VR中的镜头变化和用户头部与身体的变化一致

人体工学
务必根据人体活动的特征来设计界面。人体倾向于沿弧线运动而不是直线,因此让VR世界里的操作沿弧线完成。比如,人们在抬起手臂的时候,手的位置不仅沿Z轴运动,还会沿着Y轴运动。同理,人们在横向移动手臂的时候手也会沿着Z轴运动一段距离。

手的移动也会因姿势的不同而不同。比如,当跟踪食指的移动时,

1、肩膀固定手肘抬起的时候:手会沿着X轴和Y轴运动

2、手肘放在桌面上的时候:沿着Y轴运动

3、以手腕为轴,手处于放松状态的时候:沿Z轴小范围运动

限制用户学习的手势个数
用户能记住的手势个数非常有限。在设计动作的时候,尽量使用户用一些最基本的动作来进行操作,或者通过基本操作的简单组合来完成复杂操作。最理想的情况是通过可供性设计让用户自然而然地学会手势,而不是通过文字说明来让用户学习。

消除歧义
所有的交互都必须有明确的起始和完成的状态。如果起始和完成的界限太模糊,用户就很可能会误操作。

1、清晰地描述一个姿势,并告诉用户如何用手做出这个姿势;

2、 如果交互需要通过动作来完成,那么就要明确地告诉用户怎么开始怎么结束;

3、如果一个交互是由一个物体触发的,那么这个物体的大小和形状要提示用户交互动作的开始和结束状态。

被手遮住的物体
现实世界中,人们会习惯性地和被手遮住的东西交互。通常这种交互会有触发反馈。而在VR的世界里则没有触摸反馈,因此你需要参考下面这些技巧来设计交互:

1、提供声音线索来暗示交互的产生;

2、当用户的手靠近可交互的物体时变为半透明的;

3、让物体尽可能的大,避免被用户的手完全遮住;

4、避免把物体放得太高,否则用户会去伸手够它,从而挡住了视线;

5、设计交互的时候一定要戴上头盔,亲自去VR世界里从用户的视角来看手的位置变化

位置移动
位置移动是目前VR最大的挑战之一,除了在VR中创建一个像全息投影一样的空间让用户来走以外还没有体验更好的解决方案。最好的方法其实是让用户在不同的场景之间切换而不是让用户走过去。

声音效果
声音在VR里非常重要。结合声音、手势跟踪和视觉反馈可以给用提供虚拟的“触感”。同时声音还非常适合用于告诉用户交互是否成功。

第三部分 VR跟踪的优化
1、千万不要让所有东西都可交互;
2、让用户保持手掌张开;
3、把可交互的物体放在课桌高度到视线高度之间;
4、过滤掉不真实的手势跟踪数据;
5、通过视觉反馈让用户把手始终放在可跟踪的区域里;
6、不要把可交互物体放在跟踪区域以外。

手势跟踪传感器一直在工作
像Leap Motion Controller这样的手势跟踪设备的传感器是一直在工作的,因此在设计的时候需要你预留一些“安全姿势”,这些姿势是绝对不会产生任何交互的。这样你就可以让用户有一个停下来看一看的机会,而不会被接二连三的交互效果折腾得目不暇接,同时这还有助于用户区分出哪些是可交互的手势与物体。复杂的交互手势必须由一些非常简单的手势构成,比如“先出拳,然后张开手掌”。

当然,设计出一些“安全姿势”不代表减缓体验的速度。在开始交互之前没必要非得停顿一下,要不然用户可能觉得很不爽。

张开双手
尽可能让用户张开双手并让手和画面保持垂直。这是最利于跟踪的姿势。你可以通过一些简单的交互来让用户做出这个姿势,并在检测到这个姿势的时候给用户一个反馈让他保持这个姿势。

理想的高度范围
课桌高度到视线高度之间是放置可交互物体的理想范围。为了把它们放在这个理想范围里,你需要考虑:

1、课桌的高度。不要把可交互的物体放在课桌高度及以下的位置。因为那里通常会有很多反射红外线的物体,它们会干扰手势跟踪的效果;

2、视线高度。用户看高于视线高度的东西久了会觉得脖子疼,而且把可交互的物体放在那个位置会让用户觉得够着费劲。

不真实的手势跟踪数据
在某些情况下,Leap Motion API返回的某些跟踪数据是可以被丢弃的。有时候跟踪设备获得的跟踪数据所表示的手势不真实的。这时候就需要用Confidence API来过滤掉可信度低的数据。

FOV的边缘
避免让用户把手停在FOV(视场角)的边缘,这样对跟踪效果会有影响。为了达到自然的效果,你需要使用Confidence API来过滤掉一些效果不好的数据。

让用户把手放在可跟踪的区域
在VR世界里,如果用户看不到他们的“手”,他们就不能使用它。开发者很清楚这一点,但是用户就不一定了。大部分情况下用户会专注于要操作的物体而不是看着他们的手。为了防止他们看不到,设计者就需要做一些调整来让用户始终可以看到:

1、给手换个“皮肤”。用机器人的手、宇航服的手或者外星人的手的样子来替代人的手。当用户的手离开可跟踪的区域时,VR中的手会变得透明。当Confidence API的值被丢弃了,让手变得完全透明或者干脆消失。这种设计可以突出手的重要性,并暗示用户什么时候他们的手可以被跟踪,什么时候不能。

2、划定一个范围。告诉用户手放在什么范围里面可以被跟踪到。可以通过改变VR中手的颜色和透明度来提示用户。

3、根据情境来调整物体状态。如果用户抓着一个东西,并且那个东西需要在用户松手之前一直在用户的手里。那么如果用户的手跑到视场角以外的区域后,那个物体应该也从画面中消失。

4、对跟踪失败的处理。在交互过程中,用户的手很可能会跑到可跟踪区域之外,这时候就会出现跟踪失败的情况。你的应用需要能够在出现这种情况时提供一个自然的反馈,而不会误触发其他交互。

第四部分 手和身体
1、VR中虚拟手的大小要合适;
2、VR中虚拟手的位置要尽量和现实的手一致;
3、需要渲染出用户身体的时候尽量和用户现实中的身体位置保持一致。

给用户的手选择一个“皮肤”
我们非常推荐用Unity进行开发的设计者参考Image Hands库来设计VR中手的样子。这个库包含了很多从真实影像中提取出来的手的3D图形,这些图形可以模拟现实中手的各种动作。这些3D图形是支持VR预览的,你可以看到VR中的真实效果。
<center><img src="http://intel.eetrend.com/files/2016-12/wen_zhang_/100004252-14064-2.gif…; alt=“” width="600"></center>

这些图形在VR里会产生非常棒的视觉效果,因为它们看上去就像真的在和VR中的虚拟物品进行交互。同时它们还能减少抖动,因为它们是根据用户手的变化来发生变化的,而不是由电脑来安排的。

手的位置
头部跟踪技术可以让你置身于虚拟世界,而手势跟踪技术则能让你更加直观地探索这个虚拟世界。但是若手的位置有问题,就会让用户觉得奇怪,从而降低用户体验。为了帮助用户以他们最熟悉的方式去做出各种手势、帮助他们获得VR世界中的立体感,我们有必要让VR中手的位置尽量和现实中手的位置一致。

身体位置
通过虚拟出用户在VR场景中的样子可以提高沉浸体验并让用户感到自己是站在地上的。只有在用户配合的情况下,你才可以创建用户的虚拟形象。比如,如果用户在VR里是坐在一个椅子上,那么在现实中他们肯定会乐意和VR中的形象一样坐在椅子上。但如果用户在VR中是在来回走动,那么现实中他们可能不太会愿意不停地走来走去。人们更乐意以放松的状态来用VR娱乐,就像他们看电影时一样。

第五部分:空间与视角
1、根据游戏环境来调整手的大小;
2、优化VR镜头的位置来增强用户体验;
3、利用3D效果来提升立体感;
4、任何距离用户75cm以内的东西都会让用户觉得不舒服;
5、给虚拟物品和UI元素设置合适的大小;
6、利用视差、光照和纹理等效果来提升空间立体感。

控制器的位置
在使用像Leap Motion这样的手势跟踪设备时,你需要在VR场景中创建一个虚拟的控制器。我接下来会以Oculus Rift Unity插件和Leap Motion Controller为例进行说明,但是其他的开发工具也可以参考。

Oculus的两个摄像头默认相隔0.064m,这正好是人眼间距的平均值。以前为了将视角居中你可能需要在x轴上偏移0.032m。但是加上Leap Motion Controller之后,由于它和人眼在竖直方向上相差8cm,因此你需要在之前位置的基础上在z轴上再偏移0.08m。

然而,Oculus 0.4.3.1B+里添加了一个位于左眼锚点和右眼锚点之间的“中心锚点”。这意味着你可以利用这个中心锚点来进行定位而不再需要通过x轴的偏移来完成,你只需要在z轴上调整即可。

适度缩放
<center><img src="http://intel.eetrend.com/files/2016-12/wen_zhang_/100004252-14065-3.png…; alt=“” width="600"></center>

为了提供更好的VR体验,我们建议以1:1的比例来设计虚拟世界中的手和物体。当你需要进行缩放的时候,建议缩放到适合于人眼观看的大小。你可以通过移动镜头来将画面缩放到合适的大小。

立体感的暗示
不论你是用普通的显示器还是VR头盔都很难判断屏幕里的物体是立体的还是平面的。因为在现实世界里人们利用物体到眼睛的距离来判断物体是不是立体的,在VR中则无法这么做。因此,在设计VR体验的时候,你需要加上一些3D效果来增强物体的立体感:

1、降低远处物体的对比度;

2、让远处的物体看起来模糊一些,并增大蓝色和灰色的色值;

3、让近处的物体看起来更清楚,同时提高其对比度;

4、在物体上显示手的投影;

5、在物体上反射出手的样子;

6、利用声音进行暗示。

不要离眼睛太近
人们会本能地避开离眼睛太近的东西。因此在设计VR场景的时候不要让物体离用户太近,尤其是那些在移动的物体。特别要避免设计出以较快速度靠近用户的物体。

视差、光线与纹理
现实世界中的视觉提示会帮助用户找到方向。光线、纹理和视差(随着用户靠近物体会放大的现象)以及其他很多信息都可以帮助用户适应VR的立体环境。

结语
手势跟踪是目前VR技术中的一大难点,建议大家多结合现实情景来思考如何利用手势跟踪技术提供更好的VR体验。希望这篇文章可以启发大家。

VR手势跟踪设计最佳实践