设计虚拟现实前,如何丈量真实世界?

之前在工作中遇到一个需求,是要将一些直播拍摄的场地以三维模型的形式复原至VR环境中去,于是花了一段时间研究了下三维激光扫描与摄影测量等方法。本文就是以VR设计师的视角对于这些技术的理解与整理介绍,可以结合到一些具体的案例场景给出推荐建议。

首先,做虚拟现实设计的前提是把现实世界把握好。现实世界在我们心目中是怎样的存在往往同时取决于外部世界的客观存在与个人主观认知的影响。但落到通俗的感知层面,就是“这个世界看起来怎样?”的问题。(听、触、闻等其他感知在现阶段可供设计的余裕不大,本文暂不涉及)

在传统3D游戏的美术设计中,玩家最终可见的视觉呈现效果一般是以原画/设定为基准,再由模型师进行模型的搭建、塑造(以及之后的渲染计算)。然而在同样需要3D虚拟场景设计的VR产品团队中,也许就不会需要有特定的原画师了——因为目前的VR产品设计一般更倾向于还原真实世界,而非充满艺术风格的虚拟世界。(在一些游戏中也会有类似情况)这种情况下,“逆向建模”成了最佳选择。


逆向建模,顾名思义就是“反过来建模”。传统的建模思路是:概念→建模→模型;而逆向建模可以概括为:实体→扫描(建模)→模型。

两种方法的最终产物都是三维模型,区别则是前者依据模型师/3D美术的想法进行创作、发挥;后者依据现实世界的实体进行扫描、还原。因此,逆向建模可以理解为“3D拍照”——普通拍照是将现实世界的信息输出成一个二维图像,3D拍照即是输出成一个三维模型。三维扫描与二维拍摄的最大区别之处在于三维扫描需要采集空间深度信息。也就是说,测量现实世界的“三围”数据(也就是获取空间深度信息)是三维扫描/逆向建模的关键。

常见的测量手段有TOF、结构光、双目视觉/摄影测量等。(如下图)


ToF:

ToF全称是Time of Flight。简单地概括它的工作原理就是:在传感器记录光线的同时,还会记录光线的“飞行时间”(Time of Flight)以计算物体到传感器的距离(即空间深度信息)。微软Kinect 2代使用的就是这种技术。

相较于结构光及其他几种技术,ToF在测量空间深度信息时受动态变化的光照强度影响较小(因为其数据来源是光线飞行时间而非光线本身),所以更适合进行动态、即时的测量,这也是kinect 2代改用此项技术的原因之一。(其实最重要的原因是kinect1代使用的结构光技术的来源公司被苹果收购了,这后面会提到:P)但ToF的缺点也很明显,在十几米距离外几乎无效(也就无法利用无人机高空飞行进行大范围的自然环境扫描了),而且分辨率也较低,注定难以真实再现现实世界了。

因此ToF更多的应用于即时、动态的人物动作捕捉等领域,对于玩家/用户的体验更加友好;然而对于VR设计而言,生产力则显得不够。


结构光:

顾名思义,结构光就是将特殊形式的光线(如条纹、点状光)投射至物体表面,通过捕捉光线形变量,来计算物体表面结构。(如下图所示)

原理如上图所示,即通过计算机编程产生正弦条纹,将该正弦条纹通过投影设备投影至被测物,利用相机拍摄条纹受物体调制的弯曲程度,解调该弯曲条纹得到相位,再将相位转化为全场的高度。

相较于“玩家友好”的ToF,结构光显然更适合用在精确、大批量的VR场景环境设计中。结构光扫描可以做到整个场景一次性扫描、录入并得到模型。其精度取决于扫描仪性能与扫描对象的距离。(理论上有效扫描的极限距离有数千米),并且扫描所得的点云数据能够存储不同时期同一空间位置的信息。

其实结构光只是一种扫描技术的原理,是一个很广泛的类别。具体的每种技术方案都各有区别(iPhone X前置的3D摄像头用的也是结构光的一种,该技术源自以色列PrimeSense,也就是为Kinect1代提供技术的那家公司),具体到产品形态就更加种类繁多(从小型手持式设备到大型三维坐标/扫描仪)。这些技术、设备在过去更多的被应用在了GIS、RS等地理、工程测绘领域,所以虽然听起来陌生,但已经是相当成熟的技术了,最近也开始被应用在了VR选房等O2O领域中。(如Matterport服务,下图)


双目视觉测距/摄影测量:

双目视觉测距是利用多视角捕捉到的图像信息进行视察计算来测量距离,摄影测量(photogrammetry)也就是应用这一基本原理的一项技术:通过对测量对象多个不同角度的拍摄,分析多张照片关键点,获取照片关键点在三维空间中的坐标,所以将照片输入至程序即可进行计算模拟出对象的3D结构了。

相较于ToF和结构光,摄影测量不需要特定的扫描硬件,数据输入端只需要若干照片(少则十几张,多则几百张),输出3D模型的质量好坏取决于作为输入源的照片的质量高低(清晰度、光线好坏、拍摄对象的特征点多少等因素)与数量多少,理论上输出模型质量的唯一瓶颈是计算机运算性能。在精度不足的情况下,通常采用zbrush等方法添加模型/纹理的细节。优势在于将每个独立物件建立完整的三维模型,因此可以保证输出场景模型后可以供用户/玩具自由移动位置、视角。。工作流程为:拍照——导入图片至项目——对齐——反复调整——输出结果。

摄影测量法的缺点在于需要的照片必须是外部环绕向同一中心拍摄的(即不能在空间内部向外进行三维重建);由于受可见光影响较大,在测量视觉特征较少的对象(如大面积纯色的平面物体)会有一定误差,同时对拍摄对象的材质也有限制,比如不可以是高反光(镜面)或高透明度(玻璃)。尽管有这些诸多的条件限制,但并不妨碍摄影测量技术在游戏设计中的大量应用。

游戏行业内最著名的摄影测量软件可能要属俄罗斯的Agisoft Photoscan了。在摄影测量、逆向建模这些环节应用photoscan的著名案例比比皆是:《星球大战:前线》(延伸阅读:用3D扫描创造出《星球大战:前线》的世界)、《生化危机7》、《合金装备5》、《神秘海域4》、《伊森卡特的消失》……可见此技术之成熟,除此之外还有RealitvCapture(代表案例有攻壳机动队真人电影)等其他的产品也都用过成功商业案例。

上图是生化危机7的三维扫描拍摄现场,同时架设了大量相机,就是为了同时记录下对象物体各个角度的信息数据,这样可以极大地提高photoscan计算生成的三维模型的质量。

有这种“土豪”的办法,自然也有很“经济实惠”的做法——下图是星球大战:前线的三维扫描拍摄现场。

可以看到,拍摄对象是一个身着军服的假人模特,为了获取它各个角度的信息,肯定是像前面生化危机7那样的海量相机完成得简单粗暴,但这个现场显然没有那么多相机,于是就在模特假人的下方安置了一个转盘——这样可以保证相机停在相同的位置规律的拍摄、记录对象的多角度信息。(题外话:我个人印象中,应该是EA这种美帝大厂更加大手笔一些,没想到扫描设备的规模竟然不如日系的卡表,也是有点出乎意料: P)


除开上述提及的,其实逆向建模还有其他一些大同小异的方法,但核心都是“还原这个世界本来的样子”。本文所写的,也都只是停留在一个初涉VR领域的交互设计师的理解,如果继续深入,还是需要有些计算机视觉等专业知识的积累。既然还是初涉VR,那么就暂且止步吧~