传奇图形程序员MichaelAbrash:VR/AR技术的虚拟现实新方法

传奇图形程序员MichaelAbrash:VR/AR技术的虚拟现实新方法

本文来自专业游戏开发者。 它记录了传奇图形程序员 Michael Abrash 去年在 Oculus 开发者大会上描绘的虚拟现实全景图。 对于全面了解虚拟现实有很大的帮助。 作者是来自西山居的顾璐,信奉极简主义,将编程视为园林艺术与建筑工程的结合。 您可以在 My Everyday Day 中了解更多关于他的工具和方法的信息。

这是亚伯拉什演讲的完整视频。 我们建议在仔细品味演讲之前先阅读全文:

去年3月,传奇图形程序员Michael Abrash加入Oculus,再次与John Carmack并肩担任首席科学家(Chief Scientist)。 此时,距离卡申成为Oculus的CTO已经快一年了。

在两周前的 Oculus Connect 2 会议上,Michael Abrash 和 John Carmack 分别进行了精彩的演讲(视频在这里和这里)。 其中,卡神的语音技术和工程细节较多,更适合已经在VR一线的开发者。 在半小时的主题演讲中,Abrash重点介绍了Oculus Research在VR研究和探索中遇到的困难、关键挑战和一些进展。 比起卡神那种一开口就无法停止的意识流,亚伯拉什的话语更为笼统和完整。 非常适合全景式的了解VR/AR技术,对普通开发者也有启发,所以选择记录下来。 检查一下以备将来参考。

Abrash一上来就轰动一时,告诉大家他对VR近几年的进步感到非常惊讶和兴奋。 “就在几年前虚拟现实和游戏开发哪个好,虚拟现实中的这一切都是完全无法想象的。我们对近年来的技术进步感到兴奋。这完全应该是这样的……真正有趣的是,我们只是看到了 VR 的基础知识,而且我们仍将在未来几十年内为VR发现新的方法和体验……”与那些涌入这个行业淘金的人不同的是,对于VR这种可能深刻影响和改变人们生活方式的技术来说,亚伯拉什的话充满了技术人员特有的极大热情。

如何解决现实冷漠虚拟热情的人_虚拟现实和游戏开发哪个好_开发游戏用什么语言好

紧接着,亚伯拉什感慨万千,讲述了一段“美好的旧时光”(Golden Years)的短篇故事。

1992年前后他还在西雅图为微软开发第一代Windows NT时(这个产品后来居上,淘汰了Win95/98/ME的实现,成为后来所有Windows的内核基础),有一次见面,他和业界传奇人物戴夫·卡特勒恰好同行。 两人默默地走了一会儿,没有说话,戴夫突然转向亚伯拉什说:“你知道,这些都是过去的美好时光”吓了他一跳,“我想如果戴夫宣布他是一个火星人。” (就算Dave说他是火星人,我也震惊到不行)当时Abrash很不以为然,兄弟,别开玩笑了,好吧3D道具,我天天加班到吐血,品控这么严格,压力这么大,还好意思说这是“旧日好时光”,该吃药了。

虚拟现实和游戏开发哪个好_开发游戏用什么语言好_如何解决现实冷漠虚拟热情的人

后来,亚伯拉什感慨地说戴夫其实是对的。 多年后回头看,在Windows NT的工作经历中,给他印象最深的是那种亲密的协作氛围(teamwork)。 满满的情谊,以及整体上的伟大成就。 每当他想起在过去的15年里,他参与了一个操作系统核心部分的设计和实现,这个操作系统已经成为数亿人几乎每天都在使用的工具,他觉得这段经历非常宝贵。 没有什么比“过去的美好时光”更好的了,处于这种情况的人往往没有意识到他们正在参与什么以及正在发生什么变化。 Abrash 说他希望来到 Connect 的各种英雄们意识到“我们非常非常幸运有机会成为虚拟现实行业的开拓者。”

如何解决现实冷漠虚拟热情的人_开发游戏用什么语言好_虚拟现实和游戏开发哪个好

“我们正在为人们创造一种与机器互动的新方式,这项新技术有可能重新定义我们工作、娱乐和互动的几乎所有方式。 这种人生,一生最多遇到一两次……”满怀使命感,还有一种幸运感,终于有机会在有生之年推动这场深刻的变革,迈克尔·亚伯拉什看起来不像一个人一辈子写代码,快到退休年龄的程序员,在他和卡马克的眼里,你总能看到一种铺天盖地的纯粹热情,这是他们最大的共性。

如何解决现实冷漠虚拟热情的人_开发游戏用什么语言好_虚拟现实和游戏开发哪个好

VR技术让每个人都能在虚拟空间中真实感受和创造。 这种创作者般的感觉,不再是程序和艺术的专属。 每个人都有机会创造和使用自己独特的虚拟世界(如《星际迷航》中著名的全息甲板(Holodeck)和《黑客帝国》中的矩阵)。

开发游戏用什么语言好_如何解决现实冷漠虚拟热情的人_虚拟现实和游戏开发哪个好

在设想了 VR 将给日常生活带来的巨大变化后,Abrash 切入正题,“虚拟现实的未来将建立在以下三个基础上”,即(人类)生理感知系统的驱动,以及(真实或虚拟世界的重建和交互(主体和客体之间)。

虚拟现实和游戏开发哪个好_如何解决现实冷漠虚拟热情的人_开发游戏用什么语言好

让我们从感知系统开始。 Abrash 举了一个例子,向我们解释了人类的感知系统是如何在经历了数百万年的进化之后,获取极其有限的外部信息,再加上无数先前的经验假设。 在你的脑海中重建世界的状态。 在这个过程中,经验假设往往比我们意识到的更重要。

开发游戏用什么语言好_如何解决现实冷漠虚拟热情的人_虚拟现实和游戏开发哪个好

请注意,这看起来像一个有两个平行屋脊的屋顶。

但是,当布从后视镜上取下时,您可以看到镜子中的反射:

虚拟现实和游戏开发哪个好_如何解决现实冷漠虚拟热情的人_开发游戏用什么语言好

原来是个金库。 (有关旋转视频,请参见 6'40")以下是不同角度的外观:

如何解决现实冷漠虚拟热情的人_开发游戏用什么语言好_虚拟现实和游戏开发哪个好

这里的要点是,理解视觉系统如何让你的感知系统下意识地做出经验判断,让你玩把戏,让你“看到”并不存在的东西。 这个例子形象地说明了“我们经历的现实就是我们经历的现实就是我们经历的现实就是我们经历的现实就是我们经历的现实就是我们经历的现实就是感知系统和大脑说的就是现实”(所谓“看到”不一定是“真实”)

这为 VR 提供了一个独特的机会(以正确的方式)来驱动我们的感知系统来欺骗我们“感觉真实”。 对感知系统的控制越好,VR体验就会越好。

如何解决现实冷漠虚拟热情的人_虚拟现实和游戏开发哪个好_开发游戏用什么语言好

如上图,感知系统主要是常说的五种感觉:视觉、听觉、触觉、嗅觉和味觉,加上前庭系统(感知速度、加速度、空间位置和平衡的控制)。 接着Abrash谈到了这五个方面的研究阶段。

开发游戏用什么语言好_虚拟现实和游戏开发哪个好_如何解决现实冷漠虚拟热情的人

先说味觉吧。 Abrash 开玩笑说,即使有一个系统可以做出合适的口味,也很难想象 14 个人使用时的感受(一个手柄可以让大家轮流玩,一个冰淇淋可以轮流吃。 ..)。 而且,咀嚼和吞咽也是味觉的一部分,短期内这方面的研究还没有看到任何改善。 考虑到味觉对整体虚拟体验的影响不大,就留给未来的研究者吧。

开发游戏用什么语言好_虚拟现实和游戏开发哪个好_如何解决现实冷漠虚拟热情的人

其次是嗅觉(Smell)。 嗅觉通常与记忆和情感密切相关(具有强大的记忆和情感联想),但异常复杂。 你可能认为在鼻子附近以一定的预设顺序和剂量释放一些气体分子可以很好地模拟,但实际上气味传播的方式非常不同(不是均匀扩散),我们的鼻子非常敏感; 并且与三原色不同,不存在可以混合成我们可以感知的各种气味的原味(因此适当的模拟可能需要数千种不同的分子); 由于液体分子的持久性和粘性,用于结束当前气味的中央橡皮擦本身可能会产生多种气味。 所以总的来说,气味的模拟具有很大的潜力,但还需要进一步的突破。

开发游戏用什么语言好_虚拟现实和游戏开发哪个好_如何解决现实冷漠虚拟热情的人

然后是前庭系统(Vestibular System)。 前庭系统相当于我们人体内置的加速度传感器(accelerometer)和陀螺仪(gyroscope)。 通过感知人体运动速度和方位的变化,辅助大脑不断判断空间位置,保持平衡感。 前庭对于VR来说尤为重要,因为前庭感知与视觉感知的冲突是VR带来不适感的关键因素(比如你看到自己从空中冲向地面,但前庭缺乏相应的感知,这会引起不适。不适)。

开发游戏用什么语言好_虚拟现实和游戏开发哪个好_如何解决现实冷漠虚拟热情的人

很多人在玩第一人称视角射击(FPS)时头晕的原因是一样的:视觉旋转和加减速缺乏前庭的协同反馈。 此时,亚伯拉什不情愿地拿出一张卡马克的照片,“……但有些人根本不受影响,令人讨厌”(笑声)。

开发游戏用什么语言好_虚拟现实和游戏开发哪个好_如何解决现实冷漠虚拟热情的人

可以用表面电极刺激前庭,但由于颅骨隔离,实际体验有点粗糙。 如果要实现精细控制,只能通过颅骨植入电极。 亚伯拉什表示,如果这是真的,就算是最骨灰级的玩家,双手也未必能撑得住。 哎,又是后脑插管的节奏。

开发游戏用什么语言好_虚拟现实和游戏开发哪个好_如何解决现实冷漠虚拟热情的人

虚拟现实和游戏开发哪个好_如何解决现实冷漠虚拟热情的人_开发游戏用什么语言好

然后是听力。 Abrash 和 Carmack 都觉得听觉对于良好的 VR 体验非常重要(Carmack 在随后的主题演讲中也强调了这一点),现有的技术也相对成熟。 但这并不意味着要获得好的视听效果就很容易。 听觉模拟具有三个基本要素:合成、传播和空间化。

开发游戏用什么语言好_虚拟现实和游戏开发哪个好_如何解决现实冷漠虚拟热情的人

合成是源声音的创建。 目前的做法是使用预先录制的波形进行混音播放,但最终声音应该是通过正确模拟物理过程(如表面振动)产生的。 可以想象,这种计算将是令人难以置信的计算密集型。

开发游戏用什么语言好_如何解决现实冷漠虚拟热情的人_虚拟现实和游戏开发哪个好

Propagation(传播)是声音效果在空间中的传播过程(声音如何在空间中移动)。 Abrash本来以为传播的处理比较容易,计算量也会小一些,后来发现并不是这样的。 两个原因,第一,与光不同,不同频率的声波相互折射、反射和干涉的方式非常不同; 其次,(再次)与光波不同,声音传播的速度如此之慢,以至于人们可以明显感受到这种延迟(闪电和雷声)。 “......这意味着必须将声音建模为多个频段的 3D 时间序列,这比当前为每一帧及时生成全局声音的全局声音方案要昂贵得多。” 总的来说是一个操作,但是考虑到空间的复杂性,找到一个通用的方案仍然是一个没有解决的问题。

虚拟现实和游戏开发哪个好_如何解决现实冷漠虚拟热情的人_开发游戏用什么语言好

空间化是空间中传入声音(相对于接收器)的方向。 理想情况下,这应该是声音传播的一部分,但现在可以使用 HRTF(头部相关传递函数 (HRTF))来更好地模拟声音如何到达空间中的特定接收器并转换成声波穿过耳道到达鼓膜。 但是,HRTF所需的硬件还是非常大的,目前消费级设备还无法配备。

开发游戏用什么语言好_如何解决现实冷漠虚拟热情的人_虚拟现实和游戏开发哪个好

总的来说,我们对声音的原理和公式都非常熟悉,但是当涉及到真实和实时的模拟时,即使是小房间里几个移动的发声器也仍然相距甚远(几个计算数量级的差异)。 成熟的真声模拟还需要几年的技术积累。

(听到这里,我明白了虚拟现实和游戏开发哪个好,目前音效的技术能力如果与图形相比,几乎相当于2D图像处理,逼真的声音模拟对应3D图形)

虚拟现实和游戏开发哪个好_开发游戏用什么语言好_如何解决现实冷漠虚拟热情的人

接下来是 VR 最重要的视觉,这是最熟悉和研究最充分的物理现象。 在VR的体验中,主要关注的是以下五个属性的组合:

虚拟现实和游戏开发哪个好_如何解决现实冷漠虚拟热情的人_开发游戏用什么语言好

视野够宽,画质够好,任意变焦,HDR,更好的人体工学。 这些因素都需要改进游戏素材,但在很多情况下它们是相互冲突的,现在在实践中采用各种权衡(compromise)来平衡它们。

如何解决现实冷漠虚拟热情的人_虚拟现实和游戏开发哪个好_开发游戏用什么语言好

在此图表中列出了一些期望以供比较。 细节可以在图片中看到。

虚拟现实和游戏开发哪个好_开发游戏用什么语言好_如何解决现实冷漠虚拟热情的人

最后是触觉。 目前,还没有技术能够有效模拟现实世界中的触摸体验。

在感知系统部分的最后,Abrash 做了一个两个小球相交的小实验(你需要看视频 20'20")来说明我们在认知心理学上的巨大挑战。

开发游戏用什么语言好_如何解决现实冷漠虚拟热情的人_虚拟现实和游戏开发哪个好

说完感知系统,接下来就是Sense & Reconstructing Reality(真实环境的感知与重构)

开发游戏用什么语言好_虚拟现实和游戏开发哪个好_如何解决现实冷漠虚拟热情的人

Abrash 上传了一段视频,这是他们超现实视觉团队的新同事 Richard NewComb 的作品。

如何解决现实冷漠虚拟热情的人_开发游戏用什么语言好_虚拟现实和游戏开发哪个好

这对 VR 来说还不够好,“要让这一切发挥作用,需要从重建过程中重新思考整个感知过程,从硬件和软件的底层开始。”

这是来自同一个超现实视觉团队的另一个视频。 现实世界重建的整个过程是实时自动化和无缝的。 注意材质、光照和阴影的模拟。 (推荐观看)

如何解决现实冷漠虚拟热情的人_开发游戏用什么语言好_虚拟现实和游戏开发哪个好

最后是第三部分Interaction(交互)

如何解决现实冷漠虚拟热情的人_虚拟现实和游戏开发哪个好_开发游戏用什么语言好

这里的研究要点是“让手充当灵巧的虚拟机械手”。 出于某种原因,看到这个让我想起了 Quake III 中的电锯。 这里的难点在于“完全再现真实的运动学”。

开发游戏用什么语言好_如何解决现实冷漠虚拟热情的人_虚拟现实和游戏开发哪个好

就像上面的表格,目前没有有效的方法让你的(在虚拟世界中)手被(虚拟)表格挡住。 这需要新的触觉技术和伴随的交互语言(就像第一次发明鼠标时一样)。

列出以上三个方面的挑战,得到这张表(可以看作是Oculus Research目前的研究课题列表)。

开发游戏用什么语言好_如何解决现实冷漠虚拟热情的人_虚拟现实和游戏开发哪个好

Abrash 发布了一段视频,耳机中的面部表情感知(与南加州大学合作),这是跨学科研究的一个例子。

如何解决现实冷漠虚拟热情的人_虚拟现实和游戏开发哪个好_开发游戏用什么语言好

虚拟现实和游戏开发哪个好_如何解决现实冷漠虚拟热情的人_开发游戏用什么语言好

面对这些世界级的课题,尤其是一些交叉合作的课题,需要有迎难而上的勇气。 说到这里,亚伯拉什提起了自己在id software和卡神一起工作的经历,又开始讲小故事了。

如何解决现实冷漠虚拟热情的人_虚拟现实和游戏开发哪个好_开发游戏用什么语言好

当时卡神只是让Quake实时运行。 那时候在地图里来回跑还是比较顺畅的,但是偶尔会很卡。 问题是透支了。 当时,Quake 绘制了视锥体中的所有多边形。 在看一个很复杂的角度的时候,很多被挡住的物体一层一层刷在framebuffer上,当时没有有效的可见性。 性别检测算法。 那个时候,卡神一直在想各种办法,把那些看不见的东西去掉。

他尝试了多种不同的算法(见下图左半部分),这些算法看似都有潜力,但各有不足。

开发游戏用什么语言好_虚拟现实和游戏开发哪个好_如何解决现实冷漠虚拟热情的人

后来,他尝试直接从场景BSP(右半部分)中提取可见信息。 经过一个忙碌的周末,周一凌晨3点30分,John整理了PVS的蛛丝马迹,彻底解决了这个问题。

这里Abrash讲述了他在著名的黑皮书(Michael Abrash's Graphics Programming Black Book)中提到的一段话,值得记录:

开发游戏用什么语言好_虚拟现实和游戏开发哪个好_如何解决现实冷漠虚拟热情的人

约翰(指卡马克)说,预计算 PVS 是他一直在考虑的方法的逻辑演变,他还没有看到传说中的“尤里卡!” 过程中的时刻。 不过,这显然是一个突破,一个全新的、非凡的设计。 这个方案加上不断进化的内存光栅程序,完全杜绝了重绘,非常接近我们开头所列的“完美世界”细节。

...

所有真正伟大的设计,一旦设计出来,看起来就很简单,甚至显而易见。 但是实现伟大设计的过程需要难以置信的耐心和意愿去尝试很多不同的方法,直到你最终找到正确的方法,就像本文中发生的那样。

...

我的朋友 Terje Mathisen 喜欢说,“几乎所有的编程都可以看作是使用缓存的练习”。 约翰就是这样做的。 他的VSD计算再快,也赶不上预计算和查找可见性,而他最有灵性的一步就是跳出及时寻求“更快代码”的误区,实现预计算(具体在使用方面) cache) 并查找 PVS 确实是可行的。

...

世界上最困难的事情就是在面对问题时,寻找一个与熟悉的、相对可靠的解决方案不同的、更好的解决方案。 做到这一点的最好方法是不断尝试新事物,同时始终争取尽可能简单。 John 的目标正是让每款 3D 游戏的代码行数都比上一代少。 他的理由是,当他掌握的越多,他应该能够使用更少的代码来使问题得到更好的处理。

如何解决现实冷漠虚拟热情的人_开发游戏用什么语言好_虚拟现实和游戏开发哪个好

最后,亚伯拉什提到了这本影响和启发了无数人(包括他和卡马克)的传奇著作。

如何解决现实冷漠虚拟热情的人_开发游戏用什么语言好_虚拟现实和游戏开发哪个好

是的,“这些都是过去的美好时光”。

开发游戏用什么语言好_如何解决现实冷漠虚拟热情的人_虚拟现实和游戏开发哪个好