Abrash 是计算机图形界的泰斗,他的《Zen of Graphics Programming》曾影响了整整一代的程序员。18 年前,他与 John Carmack 合力完成了世界上第一个 3D 图像引擎,将真正的 3D 世界带到了计算机上。上个月月底,Abrash 加入了 Oculus 成为首席科学家,与担任 Oculus CTO 的 Carmack 再次双剑合璧。以下是 Abrash 在 2013 年游戏开发者大会(GCD)上的演讲,主要介绍了实现 VR 的一些难点。
为了方便读者,先在这里给出一些名词解释。
VR:虚拟现实 RR:真实现实 VR 的虚像:VR 在现实世界中对应的像,并不存在,具有观察者主观感受上 VR 中的像应该存在与 RR 的位置,大小,和与观察者所成角度等因素。
Abrash 在演讲之初表达了对 VR 的乐观,认为 VR 会像当年的 3D 图像引擎一般给计算机界带来一场革命,然后他提到了现在 VR 主要存在 3 个技术上的难点。
VR 首先要解决的问题是,不论头部怎样移动,VR 给出的画面都要让用户的大脑认为相同的物体出现在了相同的地点。如果 VR 的虚像位置与大脑预计的物体应该出现的位置稍有偏差,大脑便会告诉我们,“这不是现实”。
这说起来容易,实际上却极为困难。首先是角度问题。由于显示屏是平面的,当用户头部转动,那之前的物体则需要出现在屏幕上不同的位置。比如在下图中,三角形代表某 VR 的虚像,当用户转头 20°后,它出现在了屏幕上不同的位置。
其次是景深的问题。在 VR 中,每个物体的虚像与观察者的距离构成了其景深,两个一样大小的物体在景深不同的情况下,如果观察者的头部转动同一角度,在屏幕上的位移是不一样的。也就是说每次头部转动,每个景深上(或者说每个像素点)的物体都要被以代入不同的角度值重新计算。
追踪必须精确
要让 VR 世界中的虚像都出现在相同的位置,首先需要保证设备对观察者的追踪是准确的。也就是说设备要能准确的追踪头部转动的角度,或者发生的位移,才能通过算法改变屏幕上的图像使 VR 中的虚像固定在相同位置。那需要多准确?Abrash 认为要达到 2 米外能辨别一毫米的移动这种级别的追踪才叫“足够精准”,然而这种级别的追踪设备目前并不是消费者可以承受的。
延迟必须降到最低
事实上,VR 设备遇到的最麻烦的问题是延迟,Arash 通过一些空间—时间表来说明延迟所会带来的问题。
在上图中,x 轴是距离,y 轴是时间。我们可以看到,随着时间增长,距离并没有变化。这被用来表示 RR 中一个静止的物体。
在上图中,随着时间的增长,物体作出了位移。这表示 RR 中一个移动的物体。明白?接下来我们要进入 VR 的世界了。
这张图表示 VR 中一个移动的物体。因为屏幕每刷新一次,物体才会产生位移,所以这张时间—空间图出现了折线:VR 的虚像会在相同位置停留一段时间,在下一次刷新后产生位移。不过因为刷新的频率很快,所以我们的大脑还是会认为 VR 世界中的虚像产生的是连续位移。理解?那我们继续。
这是 VR 中更细节的情况,每个像素实际上可以发出三原色的光,在这张图的情况中,三种颜色维持的时间相同,所以最后观察者眼中的场景是一个白色的物体产生位移。(如果背景不是白色)
前几张图中,我们都假设观察者是静止的。现在我们让观察者的头从左向右快速转动,在以观察者为静止点转换坐标系后,结果如上图所示。我们发现一个像素上,单次刷新的三种颜色的光并不会被投射到观察者视网膜上相同的位置。
通过上图我们可以看到,这样的结果是这个像素的左方会是蓝和绿所合成的青色,右方则是红和绿合成的黄色,只有中间是白色。
上图则是无数个像素组合在一起时,观察者快速移动头部所带来的抖动。当然,这并非无法避免的,只要屏幕刷新的够快,那么上图的抖动便会消失。Abrash 认为 1000~2000 次每秒的刷新频率也许能解决这个问题。现在的游戏一般以每秒 60 帧刷新,也就是 VR 屏幕的刷新频率要达到现代游戏的刷新频率提升 17~33 倍才可能解决这个问题。
最后 Abrash 就 VR 在未来的发展提出了一些展望并结束了演讲。
从 Abrash 的博客我们可以看到,他从 2012 年就开始把头戴式 VR 设备作为自己研究的主要领域,Oculus 显然也注意到了 Abrash 的这次演讲,并在 Carmack 的带领下提出了一些对策。现在 Abrash 和 Carmack 再次齐聚一堂,他们还能创造当年的 Quake 3D 引擎那样的奇迹吗?我们拭目以待。