死亡之书:摄影测量资产、树木、视觉特效

在这个博客系列中,我们将讨论演示作品《死亡之书》的创作的各个方面。今天,我们重点关注摄影测量资产、树木和视觉特效。这是该系列的第四篇博客,回顾一下最后两篇关于《死亡之书》中 人物 和 概念艺术的 创作的博客。
您好,我叫 Zdravko Pavlov,是一名 CG 和 VFX 艺术家,具有 VFX、视频合成、编辑、图形设计背景。我从 2014 年开始与 Unity 的 Demo 团队合作,并为演示“维京村”、“铁匠”和“亚当”贡献了各种粒子、刚体动力学和布料模拟。
《死亡之书》的演示略有不同。这对我来说是一个全新的领域,因为我在这个项目中的角色是使用摄影测量方法创建各种环境资产。户外摄影是我的爱好,所以我非常乐意承担这样的任务。创建树木?我的意思是,这有多难,对吧?在下面的博客文章中,我将尝试描述我在项目前期制作和开发阶段学到的一切。
幸运的是,目前互联网上充满了有关该过程的有价值的信息,所以我的学习从这里开始。大多数文章会告诉您,您需要的是任何带有 50 毫米定焦镜头的 DSLR 相机。我当时手头没有这些,所以我决定使用我的 24MP 无反光镜索尼 a7II 和 16mm-35mm 变焦镜头进行初步测试。我马上告诉你,它运行良好!更宽的镜头会带来更多的失真,但你总是可以在 Lightroom 等应用中修复它,但事实上,最好不要这样做!摄影测量软件可以很好地处理这个问题。定焦镜头更加坚固,理论上可以拍摄出更清晰的图像。如果您在受控的工作室环境中进行扫描,它们真的很棒,我强烈推荐在这种情况下使用它。然而,在野外,如果能够用高品质的变焦镜头正确地构图,就能为您带来优势。






我尝试了大多数比较流行的摄影测量软件,其中一些效果很好。我选择 RealityCapture 是因为它的性价比明显更高,而且能够处理大量照片,并且不会耗尽 RAM。它能够从照片中重建的细节数量令人惊叹!我设法获得了模型,有时多达 1.85 亿个三角形,并成功以 PLY 格式导出几何图形。


当然,这已经足够了,而且有点极端。我的大部分重建最终大约有 5000 万到 9000 万个三角形。起初,我使用的是 GF980TI,后来升级到了 GF1080,性能略有提升。
在某个时候,我还将我的相机升级为带有 Planar T* FE 50mm f/1.4 ZA 镜头的 42MP Sony aRII。然而,将分辨率提高一倍并使用卓越的超锐利定焦镜头并没有给我带来所期望的“WOW”效果。首先,更长(更窄)的定焦镜头意味着您必须后退几步才能获得成功重建所需的图像重叠。当你身处森林中央,周围都是树木、灌木和其它东西时,这并不总是可能的。这也意味着您必须管理、存储和处理两倍千兆字节的图像数据。但这并不一定会让您获得更高清晰度的扫描。拥有更多图像才能实现这一目标,而 24MP 的图像更易于管理。这听起来可能很明显,但直到我亲身尝试后才意识到。

正如我提到的,我使用 PLY 格式来导出极其密集的几何图形。与 FBX 相比,我更喜欢它,尽管 Reality Capture 的 PLY 导出器没有比例和轴方向控制,因此与 FBX 不同,PLY 不按比例缩放并且旋转。我选择处理这个问题,因为在使用 FBX 烘焙纹理时出现了一些错误。此外,后来还实现了二进制 FBX 导出。
没有多少软件可以处理那么多的多边形,所以我只是存储了文件并使用 RC 的抽取功能来制作同一模型的低多边形版本。通常约有 100 万个三角形。并且可以在 ZBrush、MeshLab 或任何其他建模软件中打开它,在那里可以重新拓扑和展开它。根据模型,我使用了不同的重新拓扑技术。通常使用 ZRemesher,有时手动使用。



然后我使用 xNormal 来烘焙纹理。xNormal 似乎并没有被数亿个三角形所困扰,并且可以轻松处理它。我使用顶点颜色信息烘焙了漫反射纹理。高多边形中的顶点密度足以产生干净、锐利的纹理,而无需在顶点之间进行任何插值。我从未使用过 RC 的集成展开和纹理功能。
话虽如此,如果由于某种原因,你的浓密云不够浓密,或者缺少某些区域(如下图所示),那么从照片中投射纹理可以为这些区域带来额外的细节。

大多数摄影测量教程会教你,扫描物体时最好避免直射、刺眼的灯光和阴影。如果您要拍摄的是一块小石头,您可以将其带到阴凉处,甚至是工作室中,并使用柔光箱和转盘。然而,你不能真的用树木来做到这一点,所以我一直在关注天气预报,希望天气多云。然而,即使在阴天条件下,也会有一些阴影和环境光遮蔽。这是通过 Unity 的 DeLighting 工具解决的。 它所需要的只是一张法线贴图、一张弯曲法线贴图和烘焙的 AO。它在去除阴影的同时保持漫反射值不变。

然后将生成的资产导入Unity来测试动态照明和着色器。



有时候,你根本不可能捕捉到模型的每个部分。要么存在障碍,你无法获得所有的角度。有时,您很匆忙,或者您的电池快没电了,您错过了一些东西,而您直到回到家并开始处理数据才意识到这一点。我犯了很多这样的错误,但后来我能够通过使用 Substance Painter 克隆图章并尝试修复丢失的数据来挽救我的一些工作。
在《死亡之书》制作的大部分时间里,演示团队都没有环境艺术家,而我们一直在寻找一位。一些工作外包给了外部环境艺术家 Tihomir Nyagolov,他进行了初步探索并对环境进行了白盒处理,但主要工作量落在了创意和艺术总监 Veselin Efremov 和我身上。我们每个人都会去附近的森林捕捉摄影测量数据,然后工作自然而然地转变为制作所需的最终游戏资产。我没有环境艺术背景,在处理游戏优化、LOD 等方面也没有任何经验。那时,Tihomir 在 GrowFx 的帮助下已经创建了一些占位树,所以我从那里接手,边做边学。
GrowFX 被证明是一种用于创建各种植被的真正强大且多功能的工具。它与场景中的其他对象交互,以便您可以获得各种独特且自然的效果。它并不是专门为游戏资产创建而构建的,但它具有足够的可控性,可以用于任务。它是一个 3DS Max 插件。我使用 3DS Max 已有 20 多年了,我对它感觉非常熟悉。不幸的是,GrowFX 依赖于一些过时的 3DS Max 组件,例如曲线编辑对话框,这些组件不是很方便,但它仍然是完成手头任务的好工具,所以我只需要处理它。

《死亡之书》中的森林主要由针叶树组成。我家附近有一些美丽的森林和公园,所以我去“搜寻”并扫描了其中的一些。然后我继续将我的 GrowFX 作品缝合到扫描的模型上。最终的树干由扫描的几何图形和独特的纹理组成,下半部分缝合到程序生成的树干上,其余部分一直到顶部都有可平铺的纹理。
底部的一小块区域被克隆到纹理顶部,使其可平铺
对岩石和树干进行摄影测量是一回事,但扫描松针又是另一回事。这时 Quixel 介入并为我们提供了精美的扫描地图集。他们与 Demo Team 合作,专门为《死者之书》制作了大量小资产,如草、灌木、碎片等。
正如我在开头提到的,我的背景是 CG 制作,我以前制作过大片森林,使用 Multiscatter 或 Forest Pack Pro 并在 V-ray 中渲染。在这样的任务中,您可以按原样使用 Quixel Megascans 地图集,但对于像《死亡 之书》 这样的实时项目,我们需要做一些优化。它包括构建更大的元素(树枝、树梢等)并将它们排列成新的纹理,传输法线贴图、位移、传输等的初始扫描数据。


对现有的 Megascans 正常数据进行了轻微修改,以给出虚假的整体体积印象。


我使用了不同的法线编辑技术,例如 Normal Thief 和其他定制的 3DSMax 脚本来将树枝与树干融合。
改变顶点法线,使其能够与躯干融合
使用这种方法我能够培育出不同类型的松树。


我们希望森林充满“生机”,而风对我们来说是一个至关重要的元素。我们的环境艺术家 Julien Heijmans 为基于顶点着色器的风动画解决方案设置了树木。
创建矢量场的方法有很多种,我查找了几种不同的选项。由于熟悉 Chaosgroup 的流体求解器 PhoenixFD,我决定看看可以从中获取什么样的可用数据并将其带入Unity。我可以导出场景几何图形,将其作为 FBX 带入 3DS Max,并在其中运行一些流体,这些流体围绕植被旋转并产生湍流风效果。较大的树木遮挡了较小的植被,其影响不太明显。


我使用集成的 PhoenixFD 播放控件循环播放模拟序列。
然后通过 PhoenixFD Texmap 读取矢量信息,进行规范化并将其作为漫反射纹理插入到程序创建的等值面上。


然后将渲染的图像序列导回到Unity,在那里组装最终的纹理图集。我以前通常在 After Effects 中这样做,但现在Unity有一个非常方便的图像序列器工具,可以几乎自动完成此操作。它是 Unity 巴黎 GFX 团队正在开发的新型 VFX 工具之一。

将制作好的纹理图集放置在场景中。我制作了一个简单的盒子来定义我的模拟边界并将其用作位置参考。
需要明确的是,这是一个实验,它使我们能够推动我们所展示的电影预告片中某些镜头的视觉效果。如果您使用Unity进行电影制作,我推荐这种方法。它插入基于主要程序顶点着色器的风动画解决方案,该解决方案由我们的技术主管 Torbjorn Laedre 为该项目开发,并用于预告片的大部分场景,以及我们在 GDC 上展示的该项目的控制台版本。
在即将发布的博客文章中,Julien 和 Torbjorn 将详细介绍我们如何应对风以及我们最终采用的解决方案。

我很早就开始阻止一些关于 Hive 的想法。


在完成初步设计之后,我开始构建各种游戏元素以构建Unity资产。



对于那些疯狂的人群,我对身体变化做了一些探索。我再次使用 Chaosgroup 的 PhoenixFD 并运行流体烟雾模拟。然后我切出螺丝形状并根据流体温度创建等值面
使用 PhoenixFD 进行的一些形状探索
这种方法使我们能够快速预览不同的形状,并可作为一般参考。最终的疯狂角色模型是由 Plamen (Paco) Tamnev 创建的,您可以在他非常详细的 博客文章中阅读有关它的全部内容。
为了实现怪人脸上滴落树液的效果,我再次使用了 PhoenixFD。我首先做了一个小概念验证,展示了我们能用高密度粘稠液体实现的功能。

我对整体结果和流畅的动作非常满意,所以我继续建立真实的模型。目的是防止模拟形成太多分离的碎片和液滴。

这使我能够从生成的几何序列中获取单帧,重新拓扑它,制作 UV,并使用 WRAP3 将其投射到序列中的其余形状上。结果,我得到了一系列使用相同拓扑的混合形状。

我还尝试在一些树干上运行树液模拟。



我们最终没有在最终项目中使用它们。不过,我仍然发现它是在扫描模型上添加一些细节的好方法。
---
请继续关注本系列的下一篇博客文章。我们将与 Julien Heijmans 一起深入探讨为 《死亡之书》 创作的环境艺术。
6 月 19 日,在Unite Berlin与我们见面,亲自在控制台上体验《死者之书》环境,并参加 Julien Heijmans 关于演示中的环境艺术的演讲。此处查看完整时间表。