深度 | 探索实物与VR间重量转换的方法

◆ ◆ ◆

导读

如果在使用当今的VR的运动控制器时,却无法感受到阻力,我们又怎能让VR用户感觉或行动得就像虚拟物体具有不同的重量呢?B-Reel是一家创意公司,这家于1999年在斯德哥尔摩创立的公司探寻出了一些值得借鉴的方法,并将其开源让其他人能够学习。

过去几年,我们变得很喜爱用VR来工作,不管是公司内部项目还是Google Daydream for IO 2016。我们是VR的坚定信仰者,并且相信VR的未来是光明且充满机遇的。

经过原先在VR的努力,我们已在更好了解VR工作流及产品要求上积攒了充足的经验。但就在最近,我们想要对那些能够影响VR体验的根本的交互准则进行更深入的探究。Google Daydream团队想出了一个创造更加由效用驱动的VR平台的理论,并且发现了能够实现这种理论的交互方式,这让我深受启迪。因此,我们决定先从简单的做起---分离出某一特定的交互方式来研究。

◆ ◆ ◆

选择一个侧重点:视觉交互模型VS物理交互模型

当今,最常见的VR交互方式是通过空间中浮动的2D位面来实现的。但是从游戏的角度出发,这种情况正明显地减少对视觉的依赖、侧重更加物理的交互方式转变。可以参照的是Cosmic Trip这款游戏,其聪明地通过触控按钮在游戏菜单上操纵游戏中的物品;还有Job Simulator,其几乎完全抛弃了“指向-点击”的交互方式,这种曾在行业流行的做法。

我们对这个问题进行了头脑风暴并且发现我们已经爱上了这个创意---通过人工模拟重量来实现人与VR的交互。但具体来看,当VR用户拿起虚拟世界的物体时,我们能否降低用户的行动速度来使物体感觉更加轻或重?重的物体会需要缓慢的拿起,而轻的物体可以被正常地拿起。虽说不是一个新的想法,也可能不适用于实用情况,但是我们却觉得探索它会很有趣味。

我们希望通过这个的实践来找到一种可运用于任何使用运动控制器的平台的办法,不管是Daydream的遥感控制器还是Vive和Rift的先进的空间追踪控制器。定下这个目标,我们决心为最先进的平台做设计(在Oculus Touches发布前的平台,所以是Vive),然后我们会寻找为Daydream、到最后甚至是运用眼球进行操作的Gear VR和Cardboard简化的方法。

至于产品软件,我们在对Unity的熟悉和对Unreal所呈现的潜力间徘徊不定。我们决定先坚持使用Unity,并期望以后能在Unreal的领域有更多探索。

◆ ◆ ◆

明确目标

我们以前的相关项目进行得非常随意,使我们在未来难以再加利用其成果。因此,我们在进行这个项目前就立下了高远的目标。如果不发生意外的话,我们做到如下我们就应该算是成功:

  1. 以Unity为基础建造一个共同协作的工作流,并让更多的团队舒适地来使用它。
  2. 建造一个能让我们在内部使用的基础的“样板文件”环境,让未来的VR试验更加容易和快速进行。

◆ ◆ ◆

流程

当我们明确方向和目标时,我们开始组建我们的团队:3位三维动画师,2位设计师和1位颇具创造力的科学家。我们用Git来实现机器间的资源共享。场景可以被一个人在某个时间打开和编辑,同时其他人可以直接在这个场景上工作,并且这个场景将会整合入主场景内。在一定范围内,这种方法对我们可行,但是我们正积极寻找既适用于更大规模的团队和项目、并且简单易懂的办法。

步骤1:做一个踏实学习的设计师


如果你不首先熟悉下一个物体如何被拿起和移动的基础物理知识,那你就无法对其重量做更多的研究。我们做了这些准备,并且很快发现那些基本概念在VR也是通用的。至今在行业中也没有一个如何处理这种动作的“标准答案”,而不仅这种动作, VR中的方方面面在行业中也都是同样的情况。因此,我们探索出了一些其他办法并分为两类:直接连接(简单的操控,创造一个固定结合点)和松散连接(通过调整速度或使用力来将物体吸引至控制器)。连接的方式同时也决定了我们模拟重量的策略。

在直接连接中,物体的行动会与控制器的动作一致。如果操控者因为这个物体质量移动过于迅速,那么这种连接将会被打断,物体掉落于地。

对于间接接触,基于物体的重量,也会有对于控制器不同程度的吸引力。轻的物体反应快,就像在直接接触的感觉一样。重的物体相对操控者的动作会有延迟,需要更多的努力去提起。我们没有预期这个策略会成功,因为其违背了“不同步”这个在VR中的忌讳,但是我们莫名地感觉这种方法很有前景。我们将其细分为二点:

  1.  我们仍然让操控者拿起物体时与物体“同步”,消除操控者无法直接掌控环境的感觉。
  2.  当这个物体接触到控制器时,我们断开松散连接同时形成直接连接。我们增加这个机制的原因是因为我们在之前发现在用“拿起”动作时对物体重量的感觉最有效,后来的过程却让用户分心。

步骤2:探索其他感官线索


除了“举起”和“抓拿”这两种机制,我们觉得探索出能够转换重量的反馈的其他形式很重要。后来证明有2种形式:视觉反馈和触觉反馈。在任何一种情况下,当用户的控制器接近某个物体的拉力阈值时,我们都会刻意使用户对“张力”的感觉更加明显。

视觉反馈取决于连接形式。直接连接中,我们探索出了很多种能够表示控制器速度的计量方法。我们发现方法越简单效果越好---我们决定用一种绿-红进度条,贴近控制器,当速度接近物体的阈值时这个进度条会自动填充。对于间接接触,将控制器与物体的联系可视化成一根“弦”更有效,当张力增加时这根“弦”会从绿色变成红色。

而对于触觉反馈,我们采用和视觉反馈中“进度条”的同样逻辑,并将其运用到控制器的振动效果上。当用户接近拉力阈限时,控制器会以更高的频率振动。虽然这很直接,但是却很有效。

步骤3:测试,修改,再测试


将所有的那些因素都考虑到的话,我们可能会有无尽的排列组合去研究。所以为了测试和比较,我们开始在同样的环境中进行多种试验。我们尝试一些东西,修改后,然后重新尝试。

最终,我们经过层层筛选,我们认为由多种因素作用的的拿起行为的策略才是最佳的。大多数主要影响这种行为的因素甚至不是基于物理的---相反,更侧重物理交互时的次级视觉和触觉反馈的影响。

1.操控

物体与控制器紧密结合,但是当通过静止的碰撞器时会切断联系。这是最简单的拿起物体的方式,无需对重量进行模拟。

2.有触觉反馈的固定连接

物体与控制器紧密结合,遇到碰撞机复位,控制器速度过快时会由于质量掉落。当速度接近其阈值时,控制器会不断振动。

3.有视觉反馈的固定连接

物体与控制器紧密结合,遇到碰撞机复位,控制器速度过快时会由于质量掉落。当速度接近其阈值时,计量表会进行填充。

4.有视觉和触觉反馈的固定连接

物体与控制器紧密结合,遇到碰撞机复位,控制器速度过快时会由于质量掉落。当速度接近其阈值时,计量表会进行填充,控制器会振动。

5.力

物体由于力的作用向控制器吸引而来,因此其速度会随着与控制器距离减短而增加。

6.速度(连接会因为张力断掉)

物体的速度会进行调整,使其能够引向控制器。如果控制器和物体之间的张力超过物体质量的阈值,这个物体就会掉落。

7.速度(连接不会断)

物体的速度会进行调整,使其能够引向控制器。不管张力有多大,物体都不会掉。

在这个关键点,我们需要研究团队之外的人来帮助我们了解到底哪些因素是积极的,哪些是消极的或没有必要的。

我们为了测试创造了2种场景。在每种场景中,我们都会为用户安排7个站点。在第一个场景中每个站点只有有一个物体,所以被测试者可以直接比较每种方式中举起某种物体的感受的不同。当被测试者们在站点轮流试验时,我们会问他们一些问题:哪个物体感觉最重?当你需要拿起一堆物品时,你更偏向哪种策略?哪种策略让你感受最自然?

在第二个场景中我们将会在每个站点引入多种不同重量的物体。通过这种方式,用户可以分辨出一种策略在面对轻重不同物体时传导重量的效果好坏。然后,他们可以在同样的测试环境中与其他策略进行比较。

◆ ◆ ◆

收获

尽管我们在测试中发现了少许明显倾向,但是没有一种手段成为被测试者们一致认为的第一选择。当然,这也在我们的预期之内;在做这种尝试时,我们就没有认为这会有一个“正确”答案。但是,我们仍然能够得到许多结论。

1.如果连接能够被打断,那么松散连接是最可行的办法

我们的被测试者反应出这种机制能够最自然地传递重量的感觉。没有严格的对拉力的切断反应的话,物体总会感觉轻飘飘地,无法对用户的动作做出有效的反应。打破松散连接使物体落地,促使用户意识到自己需要改变自己的行为,使他们无法忽略物体的感知“重量”。

2.除非对交互很重要,要么重量这种东西就一文不值

我们的被测试者非常享受通过松散连接进行交互,很多人认为这种机制能让人感受到乐趣。尽管这种机制仅被少数人使用,但是如果想要用户能够注意到物体的重量,我们认为松散连接可能会成为一个值得被更多探索的有用的系统。

但是当我们问被测试者当他们需要拿起许多物品时他们会选择哪种策略,他们都会一致地选择直接连接。现在是效率优先的时代,人们不想被反复提醒自己具有人类的天生不足。

我们未来的许多项目在各个方面都深受此启发。如果分毫不差地模仿现实是重要的,那么我们就需要避免让用户拿起过于重或大的物体。当然我们也可与选择去接受它。不过虚拟现实最激动人心的一面,就是它能够让我们看见、做到一些现实生活中不可能的事。

3.我们欢迎更多的反馈---但别忘了声音!

被测试者会为更多的而不是更少的反馈所吸引,但又一个例外:如果他们不能彻底理解反馈和他们动作直接的关系,他们会认为这种视觉反馈对注意力是扰乱。否则,视觉和触觉的加入是有用的。

再提醒一下,想想声音是如何强化环境的物理面的。当我们选择将声音作为一个变量加入我们的试验中时,我们并没有认为它能有多大效果。但结果是它对被测试者对重量的感知有着非常关键的作用。重物落地的碰撞声或者是物体之间的摩擦声会强化用户对物体质量差异的感知。

4.VR中“基本的”交互要比它们看上去要复杂许多

设计基于物理的交互模型要比传统的基于显示器的用户体验要更具挑战,因为有太多的因素会影响最后的结果。一直以来,设计一个交互作用下的框架总是会让人不知所措,但是设计交互本身却来的很容易。游戏行业早些年就已经开始着手这些问题了,之后我们其他人才渐渐赶上。

原文发布时间为:2016-10-26

时间: 2024-11-10 10:52:59

深度 | 探索实物与VR间重量转换的方法的相关文章

深度探索C++对象模型(7)

关于<深度探索C++对象模型>停顿了半个月,今天继续啃这个骨头,我的学习进入了第四章,函数的语意学.先做个复习C++支持三种成员函数:静态.虚.和非静态.每一种函数的调用方式都不同,当然他们的作用也会有区别,一般来说我们只要掌握根据我们的需要正确的使用这三种类型的成员函数便可以了,至于内部是如何运做的我们可以不知.但是<深度探索C++对象模型>正是让我们对这些不知道的东西进行深度探索的一本书.通过前面的学习,我想我知道了一些以前不知道的东西,但是感觉并没有提高多少,也许是我对此书的

《点睛:ActionScript3.0游戏互动编程》——1.3 HSB模式及其与RGB间的转换

1.3 HSB模式及其与RGB间的转换 从前面的讨论可知,RGB模式是一个数理性质较强的概念,对于大部分色彩来说,我们很难通过RGB的数值得知它代表什么颜色以及它的明暗和鲜艳程度如何. <忆江南>中的景观之所以能直接用最简单的三原色来渲染,完全是因为它所描绘的江南美景足够的清澈纯净而且颜色的种类较少. 实际上,大多数情况下,颜色的种类远不止红绿蓝三种,例如北宋的苏东坡在以歌咏残秋季节景物为主题的<赠刘景文>一诗中就有这样的一句:"一年好景君须记,最是橙黄桔绿时."

《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记

来源:http://dsqiu.iteye.com/blog/1669614 之前一直对C++内部的原理的完全空白,然后找到<Inside The C++ Object Model>这本书看了下, 感觉收获很大,因为书写得比较早,有些知识应该要更新,但是还是值得好好研读,由于该书的内容给人比较散的感觉,所以一直想找个时间整理一下,遂成此文,虽然都是抄书上的,但是却让我有了温故而知新的觉悟,附近里有三个好资料,一并共享了!2012年9月2日凌晨 4:31 谢谢 张雨生的歌声的相伴!   <

《Android深度探索(卷1):HAL与驱动开发》——6.4节使用多种方式测试Linux驱动

6.4 使用多种方式测试Linux驱动 Android深度探索(卷1):HAL与驱动开发 在上一节已经实现了一个简单的Linux驱动程序,该驱动的功能是统计给定字符串中的单词数,并且在最后已经将该Linux驱动的源代码成功编译成动态Linux驱动模块word_count.ko.下一步就是测试该模块.测试的方法很多,最常用的就是直接在Ubuntu Linux中测试.当然,这对于本章实现的Linux驱动是没问题的,但是对于需要直接访问硬件的驱动在Ubuntu Linux上测试就不太方便.在这种情况下

c++-深度探索C++对象模型 虚函数表指针问题

问题描述 深度探索C++对象模型 虚函数表指针问题 <深度探索C++对象模型>中文版116页, "某些编译器设计了一种优化技术,只要第二个(或后继)base class声明了一个virtual function,而第一个base class没有,就把多个base classes的顺序调换.这样可以在derived class object中少产生一个vptr" vptr是如何减少的,想不明白,跪求解答 解决方案 没有虚函数的基类就不需要vptr了 解决方案二: 这个涉及虚表

ADO数据与XML数据间的转换的类

当对现有数据库的数据进行分析时,经常需要对某一部分的数据进行分析.此时,使用1.SQL查询分析器? 但其往往不直观,查找某个关键字又需要重新执行新的SQL.2.SQLXML模板? 但又不一定有权限建立新的虚拟目录,且某些SQL语句SQLXML模板不支持 数据拆离时也有相似问题.尤其当不同网络,不同环境,需要重新导入数据,进行分析或拆离,困难尤为明显.能不能有一种方法,可以将数据脱离于数据库进行分析,需要时再导入到数据库中?XML是个很好的选择!ADO本身支持数据到XML的转换,只需要对其格式进行

C++类型数据间的转换

1.标准类型数据间的转换 1.1隐式类型转换 int i=6; i=4.5+i; [Warning] converting to `int' from `double' cout<<i<<endl; 结果: 10 这里编译器会给 出警告,因为编译器会对4.5做double类型处理,在求解表达式时,6转换成double,然后 与4.5相加,得到10.5,在向整型变量赋值时,将10.5转为为整数10,然后赋给i.整个过 程由C++编译器自动完成,因此此类转换称为隐式类型转换. 1.2显

深度探索C++对象模型(4)

雷神跌跌撞撞的读完了<深度探索C++对象模型>的第一章,虽然还是有些疑惑,但是已经感到收获很大.按照朋友的说法,第一章是一个概括的介绍,具体的细节会在以后的章节阐述,如果没有通读本书,第一章还是比较不容易理解的.雷神听过之后信心倍增,也不在有初看此书时的"世界末日"的感觉了(在第2篇雷神感到学了近一年的C++,居然水平如此之差),并且通过自己的努力,还是摸到了些门道,所以让我们继续快乐的出发,踏上深度探索C++对象模型的旅程.记住我们在第一篇的小文<坚持不懈,直到成功

深度探索C++对象模型(3)

介绍 多态是一种威力强大的设计机制,允许你继承一个抽象的public接口之后,封装相关的类型,需要付出的代价就是额外的间接性--不论是在内存的获得,或是在类的决断上,C++通过class的pointer和references来支持多态,这种程序风格就称为"面向对象". 大家好,雷神关于<深度探索C++对象模型>笔记终于又和大家见面了,速度慢的真是可以.好了不浪费时间了,直接进入主题. 这篇笔记主要解决了几个常常被人问到的问题. 1.C++支持多重继承吗? 2.结构和类的区别