游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6615|回复: 0

​TGDC | 让现实更理想·室外3D大场景重建

[复制链接]

4万

主题

4万

帖子

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
83125
发表于 2020-12-22 16:48:54 | 显示全部楼层 |阅读模式
2020年12月9日,由腾讯游戏学院举办的第四届腾讯游戏开发者大会(Tencent Game Developers Conference,简称TGDC)于线上举行。来自腾讯互动娱乐NExT Studios的高级技术美术师金力和高级工程师李奇先生,分享了Photogrammetry技术的使用流程和实践经验。以下是文字实录:

大家好,我叫金力,我是一名技术美术,来自腾讯NExT工作室,今天我要分享的题目是《Photogrammetry在游戏领域中的应用》。这次分享主要由三部分组成,介绍Photogrammetry的美术制作流程,我们在实际应用中遇到的问题,还有Delight工具的介绍,最后一部分将由我的同事李奇做详细的介绍。


Photogrammetry介绍

微信图片_20201222163601.JPG

Photogrammetry,近些年来,这个词在游戏领域越来越多地被提及。它是什么?它是一种通过对一系列照片里的图像信息做对比,测量,并把这些信息翻译成模型,贴图等有用信息的技术。他的输入是一系列照片,输出是一系列点云信息/3D模型信息。简而言之:使用这种技术我们可以通过对物体拍摄各个角度的照片,从而在软件里快速还原模型的形状和颜色。

微信图片_20201222163608.JPG

让我们来更清楚地认识它,首先请看这两张照片,哪张是真实拍摄的照片,哪张是3D模型的截图吗?是右边这张 你猜对了吗?从肉眼上确实很难分清,这也是Photogrammetry的优点:还原真实性。

微信图片_20201222163609.JPG

接下来让我们更仔细地了解它。首先它是一组点云数据,并且通过点云生成模型数据。最后再把照片的颜色投射到模型上。

微信图片_20201222163611.JPG

这个模型是我用手机,在我的办公桌前拍摄的,一共拍了27张,并导入软件输出的,整个模型的生成过程耗时不超过15分钟。

微信图片_20201222163612.JPG

那么它有什么优缺点呢:优点是快速高模的生成,精准的外形还原,以及真实的颜色还原。例如照片里的头骨,可能通常美术需要一周甚至更久去制作高模和它的颜色信息,而使用Photogrammetry可以在短短数小时完成。但是前提就如它的缺点。

微信图片_20201222163613.JPG

1. 一定需要有实际可拍摄的物体,对于非写实类的没有办法制作。

2. 拍摄时非常依赖有良好的光照环境,棚拍需要打灯,外拍需要选择阴天以避免生成贴图上的强烈阴影 。

3. 对于表面光泽度较高的物体,没有办法生成模型。

微信图片_20201222163615.JPG

Photogrammetry已经在大量的写实类游戏里广泛应用。例如EA的《战地》,《星战系列》以及《FIFA》系列。育碧的《刺客信条》等游戏里都有大量应用。极大地提高真实度的同时,并极大地缩短了一些物件的制作周期。

微信图片_20201222163616.JPG

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

微信图片_20201222163617.JPG

这样一个技术如何应用到游戏制作呢?我们梳理了一下美术的制作流程,分为拍摄照片、照片校色、模型/颜色生成、模型优化、贴图烘培、导入引擎。和普通美术管线相比,可以看出Photogrammetry的另一个优势在于高模的制作周期极大地缩短。

Photogrammetry的制作流程

微信图片_20201222163619.JPG

首先是设备的选择:

推荐采用单反相机,可以输出Raw格式方便后期校色,更好EV控制和更高的成像质量。镜头采用可变焦镜头针对不同的环境。外拍记忆卡和电池要准备充足。准备好色卡,测量卷尺。

微信图片_20201222163620.JPG

调整相机到手动M档,固定白平衡,输出格式为RAW方便后期校色。

微信图片_20201222163621.JPG

选定拍摄目标后,使用色卡的18灰卡面确定相机在当前环境下的曝光。调节ISO,快门速度以及光圈让当前环境下,相机的曝光达到一个合理的范围。拍摄物体前,先拍摄色卡。

微信图片_20201222163623.JPG

对物体进行拍摄时,要保持刚才调节好的相机参数中途不要修改。每一张照片需要保证和另一张有20-30%的重叠区域。对焦方式自动单点对焦AF-S以拍摄物体为中心,大约每15度拍摄一张照片,蹲拍,立拍,俯拍保证各个角度都有覆盖。最后检查是否有模糊/失焦的照片,补拍。右边的图每个小点代表相机位置。

微信图片_20201222163624.JPG

对于一些高大的建筑,可以借助无人机来拍摄高处。 这座教堂是位于佘山顶上的教堂, 我们借助无人机一共拍摄了2000多张各个角度的照片进行还原。

微信图片_20201222163626.JPG

色卡校色:为什么要校色?相机不同,照片颜色不同,需要还原真实。对拍摄色卡的RAW格式照片校色,对其颜色,白平衡,曝光这三项进行校准,生成颜色配置文件。并使用配置文件,对一系列照片进行批量的校色,

微信图片_20201222163627.JPG

3D模型生成。主要使用软件:Reality capture、Photoscan。输入:校色完成的照片。输出:高模,顶点色,颜色贴图。(高模的面数需要限制,不然可能打不开3000w左右)

微信图片_20201222163628.JPG

高模生成结束以后,由于它的面数非常高,模型复杂程度从数百万到数千万。我们需要先优化它的面数,再Zbrush里把这个石雕的面数从800W降低到了1.4W(可以用zRemesher对拓扑做一次优化)。

微信图片_20201222163630.JPG

优化完面数的模型导入Maya/Max进行拓扑修正和UV展开,为之后的贴图烘培做准备。

微信图片_20201222163631.JPG

之前导出的高模包含了模型和自身的颜色贴图。把这些信息以贴图的形式烘培到制作好的低模UV上。

烘培的贴图有basecolor, Tangent normal和AO贴图。

微信图片_20201222163632.JPG

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

微信图片_20201222163634.JPG

并且把Metallic和Roughness以及AO贴图,分别存到一张贴图的RGB通道里,以减少材质里使用的贴图数量。

微信图片_20201222163635.JPG

最后把低模,和烘培好的贴图一起导入引擎,把贴图输入到材质的相应通道,并赋予模型就大功告成了。

以上就是大致的工作流程。

微信图片_20201222163637.JPG

这是一些我们用扫描还原到引擎的模型展示。包含航拍建筑,古建筑,石雕,树木,石头,砖墙,甚至时一些人为去除高光的车辆模型。都可以采用Photogrammetry去还原他们的真实面貌。

没时间?没预算?但是没有问题!

这是我们的一次拍摄和制作经历。实际上期间遇到了非常多的问题。

我们的目标是一个废弃的厂房。事先我们在网上寻找合适的目标,并最终选定了一个即将要拆除的工厂。我们在地图上大致上找了一些参考,并且有一些简单的拍摄规划,但由于厂区是不对外开放的,谁也不知道里面究竟如何,我们能否取到有用的素材。

微信图片_20201222163638.JPG

最终,在有限的经费和协商下,我们有了一天进场拍摄的机会。 我们按照事先的分配对工厂的各个角落进行取材,最终收集到了大约5000多张照片,并从中筛选出大约69个可还原的模型。但是,我们只有4位美术师,由于年底,每周只能工作3-5小时,而我们的deadline 是2个月后。

微信图片_20201222163639.JPG

而困扰我们的另一个问题是,由于事先没有机会实地考察,有一些规划要拍摄的东西和实际上看到的有较大的出入,有些无法取景。这就让我们反思了关卡的制作流程。

普通来说,一个关卡的制作可以概括为“原画设计-白盒制作-模型制作-白盒替换”,基本上要做的东西都是实现规划好的,模型也是人工制作的。

微信图片_20201222163641.JPG

但对我们来说,即使制作了白盒模型,实地也不一定可以取材到合适的模型去替换。  我们所拥有的是大量的实际扫描数据。这就让我么重新指定了计划,从现有的模型里选择合适的来搭建关卡。

微信图片_20201222163642.JPG

看到这个让我们非常绝望,以我们的预算和人力,是不可能在短时间内把所有的模型都按照之前介绍的流程做好,并导入引擎,交给关卡设计师的。

微信图片_20201222163643.JPG

所以我们重新定义了美术制作管线。我们必须要自动化处理大部分模型,把这部分自动处理的模型定义为placeholder,可以作为预览或者远景。先交给场景搭建,并且在有限的人力下,合理选择模型做人工优化处理。

微信图片_20201222163645.JPG

我们加入了houdini自动生成管线,对生成的超高模进行自动减面和拓扑。

微信图片_20201222163646.JPG

自动进行uv展开,并且烘培贴图,以及自动lod的制作。不得不说,自动处理的模型和人工对比,大部分是有缺陷的,比如拓扑和uv。但是也有一部分形状较简单的是可以处理较好的,比如这个物件。

微信图片_20201222163647.JPG

之前说的roughness贴图生成和贴图合并,我们使用了substance designer对他们进行处理。

微信图片_20201222163648.JPG

但这样就可以了吗?不,外拍的时候由于天气原因,照片上多少都会带有一些阴影,或者有些是背光的面,会比较暗。而我们的base color不可以包含阴影。所以我们也开发了工具并在自动化流程里也加入了对basecolor的去阴影处理。

微信图片_20201222163650.JPG

最终我们在3天内自动生成所有place holder模型,供场景美术进行关卡摆放设计,并把时间留给后续逐步人工优化近处的物件。

微信图片_20201222163651.JPG

这是引擎里截取的场景的一些角落。借助delight工具对贴图进行了去光照处理,我们可以给场景加入一些时间上的变化。

微信图片_20201222163652.JPG

Delight工具介绍

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

微信图片_20201222163653.JPG

那为什么要去光照呢?我们用来建模的照片,都是在外面不同的环境下拍摄的,在不同的光照环境下,照片带有外界的各种光照信息,生成的三维模型的贴图也是由多张照片采集而来的平均色。

微信图片_20201222163655.JPG

我们有时候无法选择在什么条件下完成模型拍摄任务,就像这个模型一样,完成建模以后效果是这样子的,是有影子的。

导入引擎中的使用的话,肯定在会在不同环境光照下使用。必须得想办法把光照给去除,这样才可以重新在引擎中打光。

所以我们提出了一个可以去掉太阳光影子的方案。

微信图片_20201222163656.JPG

首先我们需要准备一些贴图数据。因为我们在工具中不会直接使用模型数据,所以我们会由模型生成位置贴图和法线贴图来使用。可以使用高模烘焙,也可以使用简单的 Shader 来转写。

微信图片_20201222163657.JPG

下一步,我们需要在模型视图上指定两个点,我们可以通过这两个点的位置简单的算出直射光的方向。

微信图片_20201222163659.JPG

有了直射光方向,我们便可以渲染模型自身的Shadow Map。然后在通过跟刚才生成贴图,一样的方式生成 Shadow Mask。这样我们便得到了哪里处于影子中的信息。

微信图片_20201222163700.JPG

我们需要申请两张五维的 LUT,以贴图读取的位置和法线经纬度为坐标,将亮暗面的颜色累加到对应的位置上,得到亮面和暗面的平均色信息。

微信图片_20201222163701.JPG

然后为 LUT 生成 Mips。将相邻的像素的颜色和权重加起来,获得更为平均的颜色信息。这样可以保证采样时每一个坐标都会有采样值可用。

微信图片_20201222163703.JPG

以两张 LUT 在相同坐标下,查询到的颜色值计算出亮度差,然后直接应用到漫反射贴图上,即可得到去光照的结果。

微信图片_20201222163704.JPG

为了改善结果,还要为LUT采样实现线性插值来改善效果。左边为未插值的结果,右边为实现插值后的结果,可见效果有明显改善。

微信图片_20201222163705.JPG

完成去光照以后,模型在无光模式下,渲染出来是这样子的。左边是未去光照的对比图。

但是在用这个方法,对一些颜色比较复杂的模型进行去光照,可能会有颜色溢出的情况,导致结果不够理想。于是我们提出了第二个方法。

首先先对影子做边缘提取,只保留位置和法线都连续的地方,这样可以避免UV接缝影响结果。

微信图片_20201222163707.JPG

以找到的边缘作为中心,采集一定区域大小的像素的平均色,这个大小是可配置的,比如64x64,分成两暗两个部分的平均色,其中亮面部分在计算光源亮度时考虑法线方向的影响。

然后以位置为坐标采集到一张 LUT 中,这样 LUT 就保存着区域的光照信息,再对漫反射贴图的每一个对应的点采样就可以拿到对应的亮度差,应用到暗面像素上即可去光照。

微信图片_20201222163708.JPG

这是去光照以后的结果,左边为使用原始贴图的模型。

微信图片_20201222163709.JPG

作为对比,左边是 Agisoft 工具去直射光的结果,右边是我们的结果。

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

微信图片_20201222163711.JPG

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


来源:腾讯游戏学院
原文:https://mp.weixin.qq.com/s/34_a59v08KXTiyImYE9P9Q

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-4-27 12:39

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表