TGDC | 腾讯互娱金力,李奇:如何重建室外3D大场景?

GameLook报道/2020年12月7日- 10日,由腾讯游戏学院举办的第四届腾讯游戏开发者大会(Tencent Game Developers Conference,简称TGDC)在线上举行。

TGDC自 2017年创办以来,一直坚持以开发者视角与需求为出发点,结合行业发展趋势,对大会内容进行不断升级和扩充,旨在为国内外游戏专业人士打造开放的交流分享平台,推动游戏行业良性发展、探索游戏更多可能。

在第三日(12月9日)的活动中,来自腾讯互动娱乐NExT Studios高级技术美术师金力和高级工程师李奇,他们从Photogrammetry制作流程,在实际运用中出现的问题,以及Delight工具的介绍三个方面出发,向我们分享了在游戏领域中的如何重建室外3D大场景。

以下是演讲具体内容:

金力:大家好,我叫金力,我是一名技术美术,来自腾讯NExT工作室。今天我要分享的题目是Photogrammetry在游戏领域中的应用。

这次分享主要由三部分组成:一,介绍Photogrammetry的美术制作流程;二,我们在实际应用中遇到的问题;第三部分,Delight工具的介绍,将由我的同事李奇做详细的介绍。

Photogrammetry近年来这个词在游戏领域里越来越多的被提及,什么是Photogrammetry?

它是一种通过对一系列照片里的图像信息进行对比、测量,并把这些信息翻译成模型、贴图等有用信息的技术。它的输入是一系列照片,输出是点云信息、3D模型信息以及贴图信息。简而言之使用这个技术,我们可以通过对物体拍摄各个角度的照片,并把这些照片导入软件,快速生成还原模型的外貌和颜色,让我们来更清楚地认识它。

首先我们看一下这两张照片,你能告诉我哪张是真实拍摄的照片,而哪张是我在3D软件里的截图吗?是右边这张,你猜对了吗?的确从肉眼上很难分清,这也是Photogrammetry的优点,还原真实性,接下来让我们更仔细地认识它。

首先它是一组点云数据并且通过点云数据生成模型,最后再把照片的颜色投射到模型上。

大家看这个模型,是我用这部手机在我的办公桌前拍摄的,一共拍摄了27张照片,并且把它导入软件生成,这整个过程不超过15分钟。

看一下它在3D空间里的样子。

它有什么优缺点呢?

它的优点就像我刚才介绍的,它能快速地生成高模,拥有更精准的外形和更真实的颜色还原。就好比这个照片里的头骨,可能美术需要一周或者更久的时间对它进行高模的雕琢,以及颜色贴图的制作,而使用Photogrammetry,我们可以在短短数小时完成上述工作。

但是它的前提就如它的缺点,一定要有可拍摄的物体,就好比对那些天马行空的设计,一些非写实类的设计是没有办法制作的。第二,拍摄的时候需要依赖良好的光照环境,比如棚拍的时候,我们需要对它进行打光,确保每个面都有良好的照明,在外拍的时候,我们尽量要选择阴天,用来避免比较强烈的光影对比,以及比较强烈的阴影。第三,对于表面光泽度比较高的物体,比如金属、玻璃,我们是没有办法完成的。

Photogrammetry已经在大量写实类游戏里有广泛的应用。例如《战地》、《星战》系列、《FIFA》系列、《刺客信条》等游戏都使用Photogrammetry技术,对人脸扫描、物件扫描、地形扫描。在极大了提高了真实度的同时,也极大缩短了一些物体的制作周期。

另外Photogrammetry在其他领域也有广泛的用武之地,比如对古生物化石和古文物的数字化保存,对地貌的三维重建,甚至可以通过显微镜制作微生物的三维模型,可以说只要有照片能拍摄到的它都能使用。

那这样一个技术,我们如何把它引入到游戏的制作过程中呢?

我们梳理了一下美术的制作流程,分别为拍摄照片、校色生成、3D模型、模型优化、贴图烘焙,最后导入引擎。而和普通美术管线相比,我们可以看出Photogrammetry的另一个优势在于,高模的制作周期极大的缩短。

下面分享一下我们总结的Photogrammetry制作流程。

首先是设备的选择,推荐采用单反相机,可以输出Raw格式,方便后期的校色,以及拥有更好的EV控制和更高的成像质量,镜头我们采用可变焦镜头,外拍的时候,我们要备足记忆卡和电池,同时一定要准备好色卡。

在拍摄之前,我们首先把相机调整到M档,固定白平衡,然后输出格式为Raw格式。

选定拍摄目标后我们使用色卡的18灰卡面确定相机在当前环境下的曝光,分别调整ISO、快门速度以及光圈,让相机在当前的环境下,拥有一个合理的曝光范围。在拍摄物体前,我们需要先拍摄色卡。

对物体进行拍摄时,我们要保持刚才调整好的相机参数,中途不能有任何变化,每一张照片需要保持与前一张照片有20%到30%的重叠区域。对焦方式我们采用单点对焦、自动对焦,以拍摄物为中心,大约每15度我们需要拍摄一组照片。拍摄的时候,我们可以采取蹲姿、立姿、俯拍,确保每个角度的照片都有覆盖到。最后我们检查一下有没有跑焦或者模糊的照片,进行补拍。

像右图这张,是我们在三维软件里的截图。它每个小点,就代表了一个相机的机位,可以看出我们对它进行360度的拍摄,每个角度都有覆盖到。

而对于一些比较高大的建筑,像这样一个在佘山上的教堂,我们用无人机对它拍摄了将近2000多张各个角度的照片,来对它进行三维的重建。

色卡校色,为什么要进行校色呢?

因为我们的相机都是不一样的,生产厂商不一样,硬件也不一样,所以拍出来的照片多少会有一点偏色。我们前面说到了要还原真实性,所以我们就要对它进行校色,我们要把之前拍摄的色卡的照片,分别对齐颜色、白平衡、曝光三项进行校准,生成颜色配置文件,并使用这个文件对一系列照片进行批量地校色。

3D模型生成,我们主要使用的软件是Reality capture和Photoscan,它们的输入是刚才校色完的照片,输出是高模、顶点色和颜色贴图。对高模我们有一个多边形数量的限制,大约不能超过3000万,如果太高的话,我们可能在之后的制作中会遇到麻烦。

高模生成结束后,由于它的面数非常之高,它的复杂度可能从数百万到上千万面,可以看出左边这张图,它的多边形已经密到看不清了。我们需要首先对它进行面数的优化,我们可以在Zbrush里对这个石雕进行优化,从800万面大约减到了1.4万面,然后同时可以用zRemesher对拓扑进行一次优化。

优化完这个模型,我们把它导入Maya或者Max进行拓扑的修正和UV的展开,为之后的贴纸烘焙做好工作。

之前我们导出的高模包含了其模型本身的信息和颜色贴图信息,我们需要把这些信息烘焙到我们刚才制作好的低模上,我们一般的烘焙的贴图有:Basecolor 、Tangent Space Normal和AO贴图。这三张贴图,我们在平时的PBR游戏贴图制作的流程中是经常用到的,同时我们也可以选取烘焙Heightmap,像bent normal和w normal。

这些贴图在之后Delight的流程里也会有用到,推荐烘焙的软件有Xnormal和substance。

除此之外,我们PBR管线还需要Roughness和metallic这两张至关重要的贴图。由于我们拍摄的模型都是相对粗糙的非金属模型,那我们可以用basecolor和normalmap大致推算出它的roughness。

并且把metallic和Roughness以及AO贴图,分别存到一张贴图的RGB三个通道中,这样可以有效地减少之后在材质里对贴图数量的应用。

最后把低模和烘焙好的贴图一起导入引擎,并把贴图连到相应的材质通道里赋予模型。这个模型就是我们在UE4里的截图。

这是一些我们用3D扫描还原到引擎的模型,它们包含了像航拍建筑、古建筑、石雕、树木、石头、砖墙,甚至一些人为去除高光的车辆模型。

没有时间?没有预算?但是没有问题!这是我们的一次拍摄和制作经历,实际上我们碰到了非常多的问题。

我们的目标是拍摄这样一个废弃的工厂,事先我们在网上寻找合适的目标,并最终选取了一个即将要拆除的工厂,我们在地图上大致找了一些参考,并制定了一些简单的拍摄计划,但是由于这个工厂平时进不去的,所以我们也不知道进去到底能不能取到我们想要的素材,最终在有限的经费和协商下,我们可以进去拍摄一天。

按照事先的分配,我们对工厂的各个角落进行取材,并且收集到了大约5000多张照片,并从中筛选出69个可以还原的模型。但是让我们看看其他数字,我们只有四个美术,但由于年底每人每周大概只能工作三到五个小时,而我们的deadline是2个月后。

困扰我们的另一个问题是,由于事先没有实地考察,有一些要规划拍摄的东西和实际上看到的有比较大的出入,有些可能因为人走不上去,没办法取景。这就让我们反思了一下关卡的制作流程

普通来说,一个关卡制作周期可以分为从原画设计,然后白模制作、制作游戏模型,到把这些游戏模型替换白盒,基本上要做的东西都是事先可以规划好,然后模型也是人工制作的。

对我们来说即使制作了白盒模型,实地拍摄时,我们不一定可以取材到合适的模型去替换。我们所拥有的是大量扫描数据,就这让我们重新制定了计划,从现有的模型中选择合适的来拼接关卡。

这就是从5000张照片里我们筛选出的69个物件,以我们的预算和人力,根本不可能把这些物件用我刚才介绍的流程一一做好,并且导入引擎,交给关卡设计师。怎么办呢?

我们重新定义了美术制作管线,我们必须要用自动化处理大部分的模型,我把这部分模型定义为Placeholder,就是可以作为预览或者远景。首先交给关卡设计师进行关卡的摆放,并且在有限的人力下,合理地选择进出的模型进行人工优化。

如何处理模型?这里我们引入了Houdini的自动管线,对生产高模进行自动减面检面、自动拓扑、自动UV展开,并且烘焙贴图,甚至自动Lod的制作。

不得不说自动处理的模型和人工制作的模型还是有比较大的差距的。它缺陷主要是,它的拓扑和UV比较不是很理想,但是也有一部分模型,由于模型比较简单,它自动生成的UV和拓扑还是可以的,就好比这个时装。

之前说的roughness贴图和合并贴图,我们使用了substance designer对它们进行了批量化处理。

但是这样就可以了吗?不,由于外拍的时候天气原因的影响,照片上多少会有一些阴影,或者说在一些背光的面会比较暗,我们的base color不可以包含阴影,所以我们同时开发了Delight工具。

Delight在自动化管线里加入了对base color的去阴影处理。左边这张图就是在我们去阴影之前,可以看到它有非常强烈的阴影,右边这张是去完阴影后。

最终我们在三天时间内,使用自动化生产流程完成了所有的place holder模型制作,并且交给美术关卡进行摆放,然后我们把足够的时间,留给后续人工处理一些近处的模型。以下是我在引擎里截的一些截图。

由于我们对base color进行Delight的处理,我们就可以给它加入一些时间上的变化,也就是光照的变化,下面我播放一个我们的demo视频。


好,我的部分到此结束,接下来由李奇同学介绍Delight工具。

李奇:大家好,我叫李奇,是Next的程序(员)。刚才金力已经大致介绍了一下我们工作室Photogrammetry的内容生产管线,接下来由我介绍一下,我们在去光照上做的工作。

那为什么要去光照呢?我们现在的模型,其实是在现实中拍摄的照片,然后以照片来还原的模型,那它必然带有拍摄的时候环境中的那些光照信息,而且都是在不同的环境下拍摄的,每次的光线都不一样,那它生成的三维模型的贴图也是一样是由多张照片采集来的平均色,所以一样会带有这些信息,我们有时候无法选择在什么条件下完成模型的拍摄任务。

就像这个模型一样,很明显是带光照的,然后它生成的漫反射贴图也是带光照、带影子的,这样的模型导入引擎使用的话,你必须要把光照给去掉,你才可以在引擎里面重新给它打上游戏关卡的光照。

我们提出了一个可以去掉太阳光影子的方案,接下来我跟大家介绍一下。

首先我们需要准备一些贴图数据,因为我们在去光照工具中不会直接使用模型数据,我们需要生成左边那个位置贴图跟右边那个法线贴图,我们才可以在工具里面完成剩下的Delight工作。这两张贴图呢我们可以用高模来进行烘焙,也可以用简单的Shader来进行转写,只是这样子转写的话是模型,低模的数据,但是其实没有太大关系。

之后我们需要在模型上面,指定两个点,就像这个一样,我们需要指定影子投影的原点,还有影子投出去以后的位置点,然后指定完以后呢,我们得到了一个直射光的方向信息。

有了直射光方向,我们便可以渲染模型自身的Shadow Map,然后可以把它直接转写成UV空间的Mask,用来标记哪个部分是在影子里,哪个部分不在影子里。

然后采集LUT,我们实际上用了两张五维的LUT,以贴图读取的位置和法线经纬度为坐标,对漫反射贴图的每一个像素进行采集,然后将亮面和暗面的颜色累计到两张LUT上,得到亮面和暗面的平均色信息。

为LUT生成Mips,将相邻的像素和颜色权重加起来获得平均的颜色信息,这样就可以保证每一个坐标都有采样值可用,而且其也拿到了更平均化的信息,然后我们就完成了前面的数据准备,可以进行去光照了。

对漫反射贴图的每一个像素,我们使用它的位置还有法线方向信息,对两个LUT分别进行查询,查询的结果可以上传亮度差,然后再用亮度差对阴影的部分进行Delight,就能得到去光照后的结果。

我们实际上还为LUT采样,实现了线性插值,以改善结果。左边是没有插值的结果,右边是插值后的结果,可以看到有明显的改善。

完成去光照以后,我们得到了右图的结果,然后左图的话是没有经过去光照的结果。

这个方法处理大多数模型没什么问题,但是有些颜色比较复杂的模型,用这个方法可能会有颜色溢出的情况,导致结果不够理想,所以我们还提出了第二个方法。

首先先对影子的Mask做边缘提取,只保留位置和法线都连续的地方,这样可以避免UV接缝的地方影响结果,以找到边缘为中心,采集一定区域的像素的平均色,这个大小是可以配置的,比如64×64,分成亮暗两个部分的平均色,其中亮部分在采集的时候是要考虑法线方向的影响。

然后以位置为坐标,将刚才计算出来的光源亮度采集到一张LUT里面,这样LUT就保存着区域的光照信息,再对阴影中的像素,进行LUT的查询,既可拿到亮度信息,然后就可以去光照。

这是去光照以后的结果,左边为原始模型,右边为去光照以后的模型。作为对比,左边是Agisoft去光照工具生成的结果,右边是我们的工具生成的结果。

我们还实现了去环境光遮蔽的功能,算法主要来自于Unity的工具,主要原理是采集平均色,然后通过多次的LUT采集和采样,让整体颜色和亮度都更接近平均值。我们实现了去环境光遮蔽的结果是这样的。

我们现在将整套去光照流程,包括直射光的指定和贴图的生成也都集成在Houdini中,与之前介绍的整个自动处理管线流程也很好地结合在了一起,这就是我们在去光照上做的工作。

我的部分的分享暂时告一段落了,谢谢大家。

以上就是我们今天的分享,还有一个Q&A环节。

我们从观众的问题中选取了一些问题,并且进行回答。

Q&A

第一个问题是请问你们拍摄的时候是几个人拍摄的前面的校色流程是否可以保证每个人用不同相机的时候都有一样的色彩对拍摄有没有特别的要求

实际上我们在拍摄刚才那个佘山的教堂的时候,在拍摄下面部分的时候,我们是采用了多机位,然后每个同学的相机也是不同型号的,但是我们贯彻了一个制作流程,就是我们拍摄每组照片之前都会对灰卡进行测光,并且拍每一组照片前都会拍摄色卡,这样的话,就能保证我们在后期对每一组照片进行校色的时候,把他们校到同样一个色彩,这样是可以的。

第二个问题我想由李奇来回答。

第二个问题是还原PBR材质的时候应该还需要另外几张贴图你们还有什么对应的解决方案吗

其实我们之前分享的流程里面,就已经有通过漫反射贴图粗略地估算法线和粗糙度贴图的流程,放到引擎中用其实结果也还不错。但毕竟只是估算,结果不是那么准确吧,现在我们也在探索通过传统光学测量解算,或者是通过AI深度学习这两个方案,来尝试生成更好的PBR贴图。

今天我们的分享到此结束,感谢大家。

如若转载,请注明出处:http://www.gamelook.com.cn/2020/12/408389

关注微信