在手机上运行VR内容是一个技术挑战。电脑端的VR解决方案包括Oculus和Vive,都建议使用英特尔酷睿i5 CPU和GTX 970作为最低配置。然而,手机缺乏这些高端台式电脑的配置,只能在移动SOC芯片运行VR内容,并同时处理运动追踪系统。
虽然谷歌新推出的“Daydream VR”还没有公布具体的规格,但几乎可以肯定,它只适用于最新的高端手机。而谷歌此前推出的纸质VR头显Cardboard也不能像其宣称的那样,为所有人提供VR。那么,在一部iPhone5或者Galaxy S3上如何获得身临其境的VR体验呢?
先来看看都有哪些需要克服的问题吧。要打造良好的VR体验,至少需要60帧每秒的播放速度(普遍播放速度要求为90帧每秒,索尼的PSVR甚至达到120帧每秒)。如果达不到这个速度,用户就会意识到运动控制和头部追踪的滞后,甚至对某些人而言,还会造成晕眩症等不适感。
另外,VR观看方式有一个特性。VR系统为每一只眼睛单独渲染不同的图像,这些图像略似矩形,再凭借镜片和我们的感知创造出带有景深的宽场景幻象。虽然好的镜头可以保证图像的质量,但不管质量多好,还是会出现图像扭曲变形的失真情况。
普遍的解决方法是通过渲染技术,对失真的图像进行逆向调整,再将调整后的图像传到屏幕缓冲区,输出到显示屏上。经过这一轮调整后,我们在显示器看到的图像就是正常的效果了。
总之,失真图像进行逆向调整后就能得到不失真的图像。
在摄影术语中,这些叫做“桶形畸变”和“枕形畸变”。头显的镜片普遍会造成枕形畸变,引起图像向中间“收缩”,调整的方式是进行“桶形”调整,在曲面拉伸图像。
然而,要对所有图像像素进行调整,抵消镜头的失真效果,会给每一帧增加非常多的处理任务,同时也增加了手机创建帧的工作量,同时还会降低有效的分辨率,因为图像中心区域被向外拉伸了,覆盖了很多像素,类似于放大后分辨率降低的图片。拉伸扩展后,过多的细节挤压在每一帧的边缘,还把CPU处理时间浪费在了用户不太可能看的细节上。
一百万个小碎片:顶点位移与曲面细分
对此有一个工作室想到了一种创新性的解决方法。Brian Kehrer是一名游戏设计师,曾与ustwo合作(《纪念碑谷》的开发者)一起创作了一款极地荒野VR游戏《北极之旅》,目前已经被谷歌Cardboard收录为内置游戏。为了提升移动VR体验的适用性,Kehrer的团队希望能在2012年发布的Galaxy S3手机上以60帧每秒的速度稳定地运行VR应用。
该团队的初步测试表示,以前的手机不可以在渲染图像,调整失真的同时还保证60帧每秒的稳定输出。所以Kehrer和他的团队想到了一个新方法:与其渲染游戏后再调整,不如先调整整个游戏? 他们采取的做法是顶点位移,从字面上理解就是移动图像的顶点来调整失真。 这意味着场景通过相应的渲染,就能直接被传送到屏幕上,省略了中间步骤。
如果你还记得计算机图形是多边形的集合,那就能很好的理解这种做法了。 顶点位移不会改变线条; 两个顶点之间的点始终保持笔直。 然而,通过移动顶点,就可以实现场景失真调整,一次性呈现最终图像。
不过,该方案还面临一项挑战:低多边形对象(例如,正方形)不适用于顶点位移。 为了调整失真,正方形的轮廓需要弯曲成弧线。 Kehrer表示,曲面镜头会使曲线看起来像直线。 如果不这么调整,镜头里的正方形看起来就像向内塌陷了。 然而,由于顶点位移并不调整线条,它不能纠正像正方形一样的简单对象。 而大多数用户界面元素融入了许多简单的多边形,如正方形和长方形,这成为了一个大难题。
最终这个难题的解决方案叫做曲面细分,通常用于渲染复杂的几何形状。曲面细分是指,通过重复地联锁简单的形状,从而形成一个复杂对象的过程。 通常是把大的多边形分解成数十个或数百个小型的三角形,再以简单的形状形成更复杂的纹理和表面。 你可以根据处理能力的多少决定增加或减少三角形的数量。
结合顶点位移,这意味着要细分简单的多边形,如正方形,可以形成上百个较小的正方形,每个正方形由两个相连的三角形组成。而渲染这些顶点并不会为CPU增加大量的负担。
Kehrer说,大多数的移动设备可以渲染100,000至400,000顶点,所以把4个顶点的正方形变成121个顶点的对象不会产生带来很大的负担(把一个正方形分裂成理论上的10×10网格所配对三角形需要121顶点)。最后通过移动这些三角形的角,形成调整失真所需的弯曲边缘即可。
此外,这种方法还有一个优势:图像省去了渲染再拉伸的步骤。实际操作只是通过适当比例来渲染,因此没有丢失每一帧中间区域的细节,改善了分辨率。
这种技术使得《北极之旅 》创造了技术奇迹,只是该技术可能难以得到广泛应用。因为据了解,谷歌新推出的VR平台Daydream ,似乎不支持顶点位移功能,而Oculus和Vive则需要额外配备一个名为Timewarp的处理器装置。
Kehrer在博客中提出一个严肃的问题:如果他的团队可以在Galaxy S3运行VR游戏,那么为什么Oculus和Vive还需要不断研发更强大的硬件呢?我们将会继续深入研究。