基于视差贴图的伪室内贴图的研究与实现

2023-04-11 12:19孙略
现代电影技术 2023年3期
关键词:视差立方体引擎

张 旻 孙略

北京电影学院影视技术系,北京 100088

1 引言

随着计算机技术的不断发展,虚拟摄制技术已经成为电影制作领域中的一个新兴热点。在虚拟场景中,建筑物门窗内景是一个关键因素,它能够增强观众的视觉体验。然而,使用普通贴图时,在镜头运动的过程中,建筑内景如同玻璃上的贴纸,无法产生透视变化,导致画面真实感有所欠缺。若使用真实三维模型,在场景较为庞大时性能开销较大,会对虚拟摄制的效率造成影响。

许多游戏和虚拟世界都以大城市为特色,在很大程度上,这些图形质量取决于建筑的渲染方式。为了保证足够流畅的交互性,制作者需要在保持一定的实时帧率下尽可能地实现更多细节,于是各种贴图技术应运而生。其中典型的有水平贴图 (Horizon Mapping)、凹凸贴图 (Bump Mapping)、法线贴图(Normal Mapping)、置换贴图(Displacement Mapping)等,这些技术都可以在一定程度上提升虚拟场景的细节,但它们对渲染建筑门窗内景并无帮助。视差贴图 (Parallax Mapping)可以更真实地呈现出物体表面的凹凸感、自我遮挡和运动视差效果,但是对于建筑内景这种视觉上整体内陷且较为“陡峭”的效果并不适用。如图1所示,室内贴图(Interior Mapping)的诞生解决了内景渲染的部分问题,并在业界得到了广泛应用。在游戏《漫威蜘蛛侠》《守望先锋》《黑客帝国觉醒》中都有室内贴图的身影。

图1 室内贴图示意①

游戏制作技术与游戏引擎在影视行业的虚拟摄制中扮演着重要的角色。虚拟摄制是实时拍摄环境中物理资产和数字资产的结合,游戏引擎在实时生成视觉效果方面的性能卓越,因此基于游戏引擎与LED 背景墙的方式是当前最受欢迎的虚拟摄制方式。游戏引擎的普及与发展也对影视行业与游戏行业的技术碰撞产生了有力的影响。游戏制作行业在计算机图形学和游戏引擎应用方面拥有丰富的经验积累,而这些应用于游戏制作的技术也可助力影视行业实现虚拟摄制。例如,游戏制作中常用的三维建模技术和动画制作方法,可以创造出逼真的虚拟环境和场景,而这些虚拟环境和场景也可以用于影视行业的实时拍摄。此外,游戏引擎提供的光线追踪、阴影计算、深度缓存等功能,也能够帮助虚拟场景生成接近真实物理世界的光影效果,满足影视行业对于虚拟场景真实度的需求。游戏制作技术与游戏引擎技术对于影视行业具有极其重要的意义,它们的应用不仅可以为影视行业的虚拟摄制提供强大的技术支持,也可以给影视行业的发展带来巨大的启发。

2 伪室内贴图理论研究

伪室内贴图通常通过室内贴图技术实现,室内贴图技术通过着色器在建筑表面模拟出一个内部空间。由于室内贴图仅仅是在表面模拟出一个内部的“盒子”,室内的家具等陈设依然是没有体积感的贴图,在远景到中景时表现较好,而在中景到近景则会因为室内家具等物品缺乏体积感而表现较差。对此,一种解决思路是,在 “盒子”空间中某些位置通过着色器算法加入一些与建筑外表面平行的虚拟平面,用来显示家具或人物,此种方法缺点明显,只有在接近正面观察角度时有较好的视觉表现;而《黑客帝国觉醒》提出了另一种思路,其制作人员称之为“3D 打印法”,实际是使用视差贴图技术渲染具有体积感家具,同时结合室内贴图技术,实现较为接近真实三维模型的室内场景贴图效果。

视差贴图技术最初于2001 年由Tomomichi Kaneko等人提出,随后为解决该技术的不足,诞生并发展了多种相关贴图技术。本章将介绍并分析与伪室内贴图效果相关的贴图技术。

2.1 视差贴图

视差贴图 (Parallax Mapping)可通过存储物体表面高度的高度图 (Height Map)模拟平面上的高度,能够极大地提升表面细节,使简单的平面具有高度感。由于视差贴图并不实际改变平面的几何形状,高出平面的部分会被平面边缘 “切断”产生视觉错误,通常使用表示表面深度的深度图(Depth Map)模拟其表面深度,使平面产生视觉上凹陷的效果。

视差贴图技术的基本原理如图2所示,不规则曲线代表相应位置高度贴图的数值,同时也可作为立体表面的几何表示。通过观察向量v观察平面时,若平面有实际的高度变形,观察者将看到交点B,然而平面并没有实际的高度变形,观察者真正看到的是点A。视差贴图的目的是在点A 处使用虚拟交点B在平面上的投影点C的纹理坐标,即将平面上的点A 的纹理坐标偏移至点C,观察者就如同在点A 处看到了点B。

图2 在点A 处使用点C的纹理采样

因此,视差贴图的核心思路就是:如何通过高度贴图、观察向量与平面上的点A 的位置找到虚拟交点B在平面上的投影点C的纹理坐标。

一种近似方法如图3所示:取得点A 的高度值H (A),通过高度值将观察向量v缩放为向量P,取向量P在平面上的投影向量,并乘上一定的修正系数,作为纹理坐标偏移向量。

这种方法在部分情况下结果较好,但它仍然是一个粗糙的近似值,一方面因为修正系数的适应范围有限,但绝大部分向量P 最终不会到达点C,这会使结果产生误差;另一方面,当表面高度较为“陡峭”,即高度变化较为剧烈时,或通过与平面夹角更小的角度去观察平面时,结果会更加偏离实际,在视觉上产生失真。如图4 所示,H (P)与H(C)相差较大。

图4 高度剧烈变化时近似结果偏差较大

2.2 陡峭视差贴图

陡峭视差贴图 (Steep Parallax Mapping)是视差贴图的扩展,两者基本原理相同,但陡峭视差贴图使用多次采样来确定偏移向量P,提高了精确性,在面临高度陡峭变化或较小观察角的情况时,结果相对更好,其采样结果更接近虚拟交点B。

陡峭视差贴图的核心思路是:通过多次采样对比深度值,判断观察向量v是否“穿过”物体表面,从而近似得到虚拟交点B。其具体实现方法是:将总深度范围平均划分为n层,从上到下遍历深度层,并沿观察向量v在平面上的投影向量P 方向按P/n距离逐步移动采样纹理坐标,逐次与当前层深度D(Ln)进行比较,直到采样深度值小于当前采样深度层的深度值。

以图5所示为例,使用归一化的深度值,将深度分为5层,从点T0出发沿偏移向量P 的1/5前进,依次采样深度值并与当前层的深度值对比:从采样点T0出发开始进行采样,点T0的深度值D(T0)大于当前层深度值0,前进至采样点T1,点T1的深度值D (T1)大于当前层深度值0.2,继续前进至下一采样点,以此类推直至采样至点T4,此时发现采样点T4的深度值D (T4)小于当前层深度值0.8,即可判断交点B在第3层与第4层之间,以当前层深度0.8作为点T0的深度。

图5 陡峭视差贴图的多次采样

可以看出,由于陡峭视差贴图以每个分层深度作为最终采样深度,在视觉上会呈现出断层与明显的锯齿效果,采样精度直接取决于有限的分层数量:分层数较低时,性能开销较低,采样精度较低,视觉效果较差;分层数较高时,视觉效果较好,但性能开销随分层数线性上升。为解决这个问题,有两种思路,一种是在包含虚拟交点的两个深度层之间对深度进一步做分层采样以继续逼近交点,此种方法称为浮雕视差贴图 (Relief Parallax Mapping),另一种是在两个深度层之间进行插值计算得到更好的近似结果,此种方法称为视差遮蔽贴图(Parallax Occlusion Mapping)。对比两种思路,视差遮蔽贴图只需在陡峭视差贴图的基础上进行一次计算,额外性能开销较低。

2.3 视差遮蔽贴图

视差遮蔽贴图是陡峭视差贴图的拓展,在最后加入了额外的步骤:在得到虚拟交点B前后相邻两个深度层之后进行插值计算,得出更接近于点B 的结果。

基于上一节中陡峭视差贴图的采样结果,如图6所示,虚拟交点B 的前后相邻两次深度采样点的连线与观察向量v交于点P,P 点的深度值D (P)相比于陡峭视差贴图的最终结果D (T4),更为逼近理想的采样结果D (B)。在实际计算过程中,利用相似三角形原理,通过两次深度采样值与对应的层深度分别计算深度差,以此为权重进行插值计算,再进行一次纹理坐标偏移,即可得到最终结果。由此可见,视差遮蔽贴图技术可以用较小的额外性能代价获得更精确的视觉效果。

2.4 室内贴图

室内贴图与视差贴图思路相似,也是通过纹理坐标的偏移在平面上产生虚假的三维影像。如图7所示,首先使用贴图在真实平面后方伪造一个立方体空间,而后当通过摄像机观察内部空间时,对于平面上的点P,观察向量v首先穿过点P后经点Q穿出立方体,此时将点Q 处的纹理采样至点P 处,便可“伪造”一种看到Q 点的假象。对整个平面进行采样后,就可以在二维平面上实现虚假的内部空间。由此可见,室内贴图实现的关键点是:如何通过观察向量v与入射点P的位置找到出射点Q的位置。

图7 将点Q的纹理采样至点P

首先,将点P坐标减去摄像机坐标得到观察向量v,由于立方体贴图空间是一个轴对齐立方体,问题可等价于寻找从点P出发的向量v在三个轴向上最先“击中”的立方体边界。

如图8所示,可将向量v按坐标轴分解为x、y、z三个方向的“速度”,分别求得每个方向上击中边界所需要的“时间”,于是有:

图8 分解观察向量v

分别计算出三个轴向上的击中时间t,其中用最短时间击中的边界就是向量v最先击中的边界,将从点P 出发的观察向量v乘上最短时间tmin就可以得到出射点Q 的坐标:

成功计算出出射点Q 的坐标后,通过坐标可以在对应的纹理贴图中获取表面颜色等信息,于是可实现将立方体贴图采样到平面上,获得最终的视觉效果。

3 相关贴图制作

3.1 视差贴图

视差贴图需要至少两张贴图:纹理贴图和高度贴图。在3ds MAX 中搭建测试场景,创建一个正方体作为房间范围参考,并将测试物体放置在立方体范围内。

使用正交摄像机 (Orthographic Camera)分别渲染正向视图、正向深度图与反向深度图,摄像机摆放如图9所示,设置摄像机的目标距离与立方体边长相等,可计算出摄像机水平视角为2arctan0.5,约等于53.13°。

图9 正交摄像机摆放示意

之后分别提取正向深度图的红色通道与反向深度图的绿色通道,将反向深度图水平翻转并与正向深度图相加,即可得到同时包含正反深度信息的合成深度图,如图10所示。

图10 渲染图与深度图

3.2 立方体贴图

立方体贴图可通过多种方法获取或制作,本文介绍其中一种制作方法:通过全景环境贴图制作立方体贴图。

首先获取一张室内环境的全景贴图,如图11所示。

图11 室内环境全景贴图②

在3ds MAX 中,将HDRI贴图赋于一个较大的球体内侧,通过一个较小的立方体的反射将其对应的六个方向的环境贴图渲染至图像文件,如图12所示。

图12 六个方向的独立贴图文件

之后,将这六张贴图拼接在一起,不同软件平台对拼接方式要求不同,本文以虚幻引擎为例,依据EPIC官方文档,排列顺序如图13所示。

图13 六个方向的贴图排列顺序

将3ds MAX 制作的六张贴图按排列顺序排列,最后通过Photoshop的DDS插件③将其输出为DDS格式的立方体贴图文件,选择格式为8.8.8.8 BGRA 32 bpp|unsigned,立方体贴图制作完成。

4 在虚幻引擎(UE) 中的实现与测试

4.1 基于虚幻引擎(UE)的实现

基于以上的技术分析与制作的贴图,将室内贴图技术与视差遮蔽贴图技术相结合,梳理并总结伪室内贴图实现流程如图14所示。在虚幻引擎中对伪室内贴图的实现如图15所示。

图14 伪室内贴图流程图

图15 UE5中伪室内贴图的实现

值得一提的是,由于各软件的三维轴向定义不同,立方体贴图的Z轴方向(即“地板”与“天花板”)的贴图朝向有可能会产生错误。依据实际情况对立方体贴图进行调整,最终实现效果如图16所示。

图16 实现效果与立方体贴图调整后的结果

4.2 性能对比测试

如图17所示,在虚幻引擎中搭建与伪室内贴图相似的真实三维模型内景进行测试。测试平台配置如 下:CPU 为Intel Core i7-10875H,GPU 为NVIDIA GeForce RTX 2060 6G,内存为64GB DDR4 3200MHz;使用虚幻引擎5.0.3版本,渲染分辨率为3840×2160;使用伪室内贴图的单个平面含有2个三角面,单个真实三维模型内景则包含5220个三角面。伪室内贴图测试分为3次,分别设置视差遮蔽贴图分层数为50、100、200,通过调整场景中的实例数量,测试其实时渲染帧速率,结果如图18所示。

图17 测试场景搭建

图18 伪室内贴图与真实三维模型内景实时渲染性能对比

由此可见,在视差遮蔽贴图使用较低分层数时,伪室内贴图在性能上有一定优势。若应用在虚拟摄制中,可根据拍摄的景别大小动态调整,画面中建筑较多时适当调低分层数,画面中建筑较少时则可以适当调高分层数,在保证实时渲染帧率的前提下尽可能提升画面质量。

5 总结

虚拟摄制技术的出现标志着电影制作进入了一个新的时代,使得制作者能够在无需真实拍摄的情况下创作出高质量的虚拟场景。这种技术与游戏行业有着密切的关系,因为游戏引擎是虚拟摄制技术的重要工具之一,随着技术的不断发展,游戏引擎的身影越来越多地出现在电影制作过程中,使得游戏与电影之间的界线变得越来越模糊。与此同时,许多应用于游戏制作行业的技术也适用于电影制作,这些技术可以在电影制作中使用,以增强观众的视觉体验,缩短制作周期并降低制作成本。

本文分析并实现了伪室内贴图技术,伪室内贴图技术可以在较低资源开销下实现建筑门窗内景空间渲染。当虚拟场景中有大量建筑时,若使用真实三维室内场景,在制作、存储、渲染等方面都需要耗费大量资源。使用伪室内贴图技术可以在保证一定视觉效果的前提下简化制作流程、节约存储空间、降低渲染压力。制作流程方面,在虚拟场景中使用贴图替代三维模型可以省去多细节层次 (LOD)的制作,替换贴图相较于替换模型也更节约存储空间,立方体贴图、深度贴图、材质贴图与三维模型场景相比,所需的存储空间较低。实时渲染方面,本文已通过实验验证了伪室内贴图技术的性能优势。

此技术也有一定不足,如:视差遮蔽贴图的分层较为明显,导致近景的视觉精度下降;深度贴图只能在一个轴向上实现深度效果,缺乏对复杂模型的表现力;与场景中灯光、阴影、动力学等交互效果欠缺。以上不足需要进一步优化,在后续研究中加以解决。

注释

①图片源自会议论文Interior Mapping:A new technique for rendering realistic buildings,作者Joost van Dongen。

②图片源自网站polyhaven.com。

③此处使用英伟达纹理工具导出器的Adobe Photoshop插件版本,简介及下载地址:https://developer.nvidia.com/nvidia-texture-tools-exporter。

猜你喜欢
视差立方体引擎
叠出一个立方体
基于自适应窗的立体相机视差图优化方法研究
基于梯度域引导滤波的视差精炼迭代算法
蓝谷: “涉蓝”新引擎
图形前线
基于分割树的视差图修复算法研究
立方体星交会对接和空间飞行演示
折纸
立体视差对瞳孔直径影响的研究
无形的引擎