在手机上运行虚拟现实内容是一项技术上的挑战。对于PC端的虚拟现实解决方案,Oculus和Vive都建议使用Intel i5、GTX 970或以上的配置。然而, 手机缺乏桌面级的高端配置,它只能使用移动集成芯片来运行VR内容,同时还要处理所有的动作追踪处理。

问题所在

尽管谷歌并没有明确Daydream VR的规格标准, 但是几乎可以确认的是,这项技术只能应用在最新的高端手机上。不过Google Cardboard却是一个通用的VR解决方案, 那我们可以如何在iPhone 5甚至Galaxy S3上获得沉浸式的虚拟现实体验呢?

我们现在先分析一下挑战的所在。对于虚拟现实内容来说, 60fps通常被认为是实现沉浸式体验的最低标准(理想的要求是90fps, 据说索尼的PSVR可以达到120fps)。如果低于这个标准, 我们会明显注意到动作控制的延迟,有些人甚至还会出现晕动症。如果是在低端手机上运行,画面的像素还会大打折扣。

VR图像校正示意图

镜头成像原理

然后我们来了解一下VR内容观看的基本原理。虚拟现实系统会为两只眼睛分别渲染两幅单独的图像,不过这些图像比较接近于正方形,在头显的镜头和我们的感知的共同影响之下,我们会误以为自己眼前的是具有深度的宽屏画面。镜头的质量跟图像的质量息息相关, 但无论镜头的质量如何,头显的图像都会不可避免地出现失真和变形。

这个问题的解决思路一般放在图像渲染上——为镜头畸变加入相应的逆畸变,并将正确的图像渲染在显示屏上。

简单来说, 透镜会产生图像扭曲, 然后通过人为的再扭曲, 把图像修复过来。 如下图所示:

用摄影技术的术语来说, 这叫做“桶形畸变”或者“枕形畸变”。一般而言,头显的透镜都会产生枕形畸变,图像看上去就好像四面往中间推压一样。这种图像可以通过引入桶形畸变加以矫正,桶形畸变的图像看起来就像是被从中间向四周拉伸的感觉。

但是,这种镜头畸变需要变形和插入每帧图像的像素,这样会大幅增加每帧图像的处理时间和手机的处理负担。这样也会降低图像的有效分辨率,因为图像的中央区域需要往外拉伸, 从而造成大量像素的损失,这就像是放大低分辨率的图片一样。经过拉伸之后,画面的细节将会被压缩到画面的边缘区域,这样会把CPU的性能浪费在用户很少会关注到区域上。

《Arctic Journey》采用的顶点多边形

顶点位移和曲面细分

有一家工作室想出了一个极具创意的解决方法。Brian Kehrer是一位游戏设计师,他最近和ustwo(《纪念碑谷》的开发商)合作制作了一个描绘极地风光的VR体验《Arctic Journey》,现在它已经成为了Google Cardboard的标志性体验之一。为了制作通用的虚拟现实体验,Kehrer团队的目标是让这个软件在开启动态灯光的情况下稳定维持60fps,而且这一切都要在Galaxy S3上实现——一款在2012年上市的手机。

该团队的早期测试表明,这种旧款手机是无法同时做到图像渲染、引入变形和保持60fps帧率的。所以他们采用了一个创新的解决方案:与其先渲染游戏场景再变形,不如一开始就将整个场景变形。这就是所谓的“顶点位移”(Vertex Displacement)——通过扭曲游戏中的多边形来模拟镜头逆畸变的效果,也就是说场景会按照正确的镜头校正进行渲染,然后直接显示在屏幕上,减少中间的处理步骤。

如果你还记得所有的计算机图形都是由光子组成的话,那你就能明白这个原理了。顶点位移是不会扭曲线条的,两个顶点(多边形的角)之间的点会保持笔直。但是通过变换顶点的位置,你可以在场景中模仿镜头校正的效果,这样只需经过一次渲染就能得到最终图像。

但是这里还有一个问题要解决:低多边形物体(例如正方形)是完全不会受顶点位移影响的。如果要达到镜头校正的效果,正方形的四边需要稍微突起。Kehrer指出,曲面的镜头会让曲线在视觉上变成直线。如果不对正方形进行突起处理,经过镜头校正的正方形就会变得像向内凹陷一样。但是因为顶点位移是不会真正扭曲直线,所以它不能校正像正方形这样简单的物体。考虑到大多数的用户界面元素都是由简单多边形(比如正方形和长方形)组成的,这个问题就变得尤其棘手。

上图为曲面细分技术的应用例子

这个问题的解决方法在复杂多边形的渲染中很常用:曲面细分。曲面细分是指通过重复、连锁简单的形状来模拟复杂的物体,也就是将大面积的多边形分解成无数个小三角形,这样可以利用简单的的形状模拟极度复杂的纹理和表面。你可以根据可用的处理性能轻易增加或减少三角形的数量。

在顶点位移中,这意味着你可以对正方形这样简单的多边形细分成多个更小的正方形, 每一个正方形都由两个三角形构成。渲染出如此多的顶点也不会消耗太多的CPU。

Kehrer表示大部分移动设备都能有效渲染10万-40万个顶点,所以把4个顶点组成的方形变成121个顶点组成的物体并不会有太大的影响(121个顶点是10×10网格所需的数字)。采用了曲面细分之后,顶点位移可以变换所有三角形的角,将立方体扭曲成镜头校正所需的曲面体。

这里还有另外一个好处是图像在渲染后是不会被拉伸的。实际上, 图像会以合适的尺寸进行渲染,所以中心区域的细节不会随着拉伸而丢失,可视分辨率也得到了提升。

上图是顶点位移处理与传统的后期畸变处理校正的对比

这项技术让《Arctic Journey》成为了一项技术奇迹,但是这项技术可能不会大量的普及,因为谷歌新推出的虚拟现实平台Daydream不支持顶点位移,而Oculus和Vive更倾向于通过异步时间扭曲技术来解决相关问题, 这种技术对处理器的需求更高。

这不禁让我们思考, 既然Kehrer团队可以在Galaxy S3上运行虚拟现实游戏, 那么为什么Oculus和Vive还需要如此高配置的硬件设备呢?