天美F1工作室技术中台引擎程序团队负责人专访

天美F1工作室技术中台引擎程序团队负责人专访

不知不觉,我已经在游戏开发行业工作了十年。 从一个刚入行的技术新手,到一个还一无所知的技术瓦工,我见证了一个时代游戏技术的变迁。 先后从事过游戏开发SDK、端游MMO、休闲手游、重度手游、大世界手游、大世界端游等多个品类的产品。 现在我是天美F1工作室技术中置发动机项目组组长。

游戏产业正在快速发展。 玩家对游戏的要求越来越高,游戏的技术要求越来越高,开发量也越来越大。 我目前工作的天美F1工作室正在开发一款全平台的AAA级大世界游戏,这是一件非常具有挑战性的事情。

作为一名游戏引擎程序员,我知道技术更新很快,需要不断学习才能接受这一挑战。 庆幸的是,我们提前积累了对标国际AAA厂商的多方向技术能力,也从全球招募了众多具有AAA项目研发背景的人才。 通过不断夯实技术基础,我们有能力、有信心接受新的挑战。 在我们储备的技术中,PCG技术是当前大世界游戏不可或缺的技术。 现在我们就做一些简单的介绍。

PCG(Procedural Content Generation)技术是最近流行的一种提高游戏制作效率的技术。 这是什么意思?

互联网百科全书给出的答案:程序生成(英语:Procedural Generation)是计算机科学中的一种算法,可以让计算机自动创建一类数据。 在计算机图形学中,也称为随机生成,常用于制作材质图和三维模型资源,并用于视频游戏领域,自动创建大量游戏内容。 程序生成具有减小文件大小、扩展内容、增强游戏随机性等优点。

我个人的理解:如果应用在游戏中,简单来说,程序内容生成就是利用算法自动生成游戏内容。 原创游戏内容需要在美术和策划上付出大量的努力。 程序化的方法可以大大降低劳动力成本。 除了节省一些重复的手工劳动之外,一些新的设计内容甚至可以自动创建。 想象一下,如果有一个程序可以自动制作游戏,那该有多有趣。 也许当那一天到来时,游戏开发者都会被解雇。

地形是大世界的基础。 大世界没有地形,玩家就没有立足之地。 地形有多大,世界就有多大。 如果能够利用PCG技术加速大世界地形的制作,美术和策划的人力消耗就可以大大减少。

这里有两个困难。 一:如何生成真实自然的地形? 现实世界的地形并不是一些杂乱的形状,它是大自然的造化,往往具有令人赏心悦目的美感。 使用算法生成美观的地形是我们的第一个挑战。 二:世界巨大,内容复杂,制作人员众多。 如何让制作人员高效协作是我们面临的第二大挑战。

今天我简单讲一下如何在大世界游戏中利用PCG技术加速地形制作的一些基本思路。

1. 传统地形工作流程

每个人都应该熟悉传统的地形工作流程。 美术师首先找到一些参考高度图,将其导入到游戏引擎编辑器中,然后根据自己的需要通过地形编辑工具对地形进行编辑。 例如,UE的地形编辑器提供了多种画笔供艺术家手工绘制和雕刻地形。 显然,这种方法需要艺术家付出大量的工作。

2. 处理地形

引擎游戏_引擎制作游戏_游戏引擎编辑器

一些可用的地形噪声

程序地形可以使用算法自动生成地形。 常用的是随机噪声地形。 该方法是一类构造性算法,通过设计一些噪声函数来随机生成地形高度信息,如常见的Perlin Noise、Worley Noise、Voronoi Noise、Flow Noise等。

另一类是侵蚀算法。 通常现实世界的地形是大自然多年来对地形影响的结果。 此类算法对侵蚀过程进行数学建模,然后对其进行模拟以获得逼真的自然地形效果。 如热侵蚀、水力侵蚀等...

让我们看一些程序地形的示例。 例如,如何用噪声来表达丘陵地形? 就像图中连绵起伏的山峦一样。 其实很简单。 我们只需要取噪声函数的绝对值即可。 这时,噪声的形状会有一个凸起,以表达丘陵的效果。

引擎游戏_游戏引擎编辑器_引擎制作游戏

无人深空的丘陵地形

引擎制作游戏_引擎游戏_游戏引擎编辑器

那么如何利用噪点来表现山脊线呢? 许多大山脉都有山脊线,就像图中的阿尔卑斯山一样。 我们可以先取噪声的绝对值,然后求逆、翻转,然后升高。

可以观察到,波形相交处形成了尖点。 图中的画面是二维的情况。 如果是三维的,就会形成一条局部最高点的线,这样就可以模拟这条山脊的形状。

引擎游戏_引擎制作游戏_游戏引擎编辑器

阿尔卑斯山

引擎游戏_引擎制作游戏_游戏引擎编辑器

那么如何用噪音来表达河流呢? 我们可以通过域扭曲来做到这一点。 这个方法非常简单。 就是对噪声函数的定义域进行变换。 例如,在此处的示例中,对变量进行了简单的位置偏移。 经过多次位置扭曲后,形成一些非常特殊的效果。 可以在图中看到高度数据的变化过程,最终形成河流般的效果。

引擎游戏_游戏引擎编辑器_引擎制作游戏

引擎制作游戏_引擎游戏_游戏引擎编辑器

游戏引擎编辑器_引擎游戏_引擎制作游戏

刚才提到的例子都是用噪声表达地形的简单而有效的方法。 但真实的地形实际上有一些特殊的特征,比如自相似性。 这意味着什么?

当我们从不同层次的角度观察真实地形时数据报告,我们会发现一些相似的特征。 从大山到小山,小山上的每一块石头都连绵起伏。 也就是说,如果用噪声来表达这个特征,则噪声需要在多个尺度上具有自相似性。

引擎游戏_引擎制作游戏_游戏引擎编辑器

引擎游戏_游戏引擎编辑器_引擎制作游戏

引擎游戏_游戏引擎编辑器_引擎制作游戏

岩石

为了达到这个效果,我们其实可以直接叠加多层噪声。 每层噪声都有自己的频率和幅度,当它们加在一起时会形成这种分形状的地形。 为了更好的控制分形效应游戏引擎编辑器,我们可以调整各层噪声之间的关系:有两种关系,一是各层频率之间的变化率,二是各层噪声幅值之间的变化率。每一层。

特别地,如果每一层幅度的变化是彼此的导数,则这种多层噪声被称为粉红噪声。 更具体地说,如果变化率是2的幂,并且我们将该噪声的每一层称为倍频程,则该噪声的每一层的频率加倍,并且幅度减半。 一般来说,八度以下就足够了。 如果太大,计算量会增加,效果不会明显增加。

这里是我们常见的分层Perlin噪声的效果,当Octave为8时。可以看出,这个分层地形在大的高度变化中有低频的变化,在小尺度的情况下有一些高频的变化。

游戏引擎编辑器_引擎游戏_引擎制作游戏

分层柏林噪声

一些使用纯粹程序地形的更好游戏包括《无人深空》和《我的世界》。 《无人深空》的地形做得非常好。 有很多噪音技术可以用来创建一些非常好的风格化效果。

引擎制作游戏_游戏引擎编辑器_引擎游戏

《无人的天空》

游戏引擎编辑器_引擎制作游戏_引擎游戏

“我的世界”

现在总结一下纯程序地形的特点:

3.以艺术为主导的程序地形生成

既然纯程序化地形生成存在如此多的问题,那么如果我们想利用程序化技术来提高大世界地形制作的效率,我们该怎么办呢? 由于游戏场景的最终效果实际上是由美术控制的,所以整个场景实际上是非常复杂的。 不仅仅是地形存在,涉及到的很多东西都需要艺术来控制,所以我们需要的是艺术主导的流程生成。

这种工作流程需要更加注重用户友好性。 艺术家使用的工具必须是交互式且易于使用的。 你还需要有良好的艺术表现力,艺术可以很方便地用于艺术设计。 程序技术的作用主要是提高工作效率。 与纯程序地形生成一键生成地形不同,艺术家很难参与其中。

这样的工作流程的主要成员可以是一个相对较小的团队,TA和引擎工具根据美术要求设计和开发地形工具。 工具开发出来后,美术师就使用这些工具来设计地形。

具体来说,以艺术为主导的程序地形工作流程分为以下三个阶段:

1:原始地形生成。 这一阶段,LA和TA共同使用一些程序化地形工具,如UE4 Landmass、Houdini、World Machine、World Creator、Gaea等,根据世界的结构生成原始地形。

2:程序工具地形处理。 在这一阶段,美术会在原有地形的基础上创建场景,并添加场景的其他层次,如河流、道路、岩石等。这些场景元素的制作与程序流程中的元素相对应。 可能对地形产生影响的程序工具。

3:手动编辑。 当所有程序工具完成对地形的处理后,如果美术师对效果仍然不满意,则需要手动调整以形成最终的地形效果。

3.1 原始地形生成

我们首先看一下原始地形的生成。 现阶段的思路是,整个建模过程是从初始模型到高模型,高度图数据是从低分辨率到高分辨率。 那么侵蚀对于真实的地形来说是非常重要的。 步。

以Houdini为例,绘制大致有这些步骤。 整个过程可以完全在Houdini内部完成,也可以通过定制的Houdini Engine在引擎中产生。 他完全在Houdini中做起来更方便。 如果他在引擎编辑器中进行,对于美术人员来说会更方便。 每个都有优点和缺点。

Houdini地形工作流程

具体来说,我们来看看这个过程。 第一个是体量,可以通过手绘、投影几何图形或直接导入高度数据来创建最粗糙的形状。 接下来,为了获得更自然的效果,我们对粗糙模型进行一些细节扰动。 这个过程可以通过施加一些噪声来实现。 这也可以通过在特定区域添加一些障碍来实现。

播种后的地形有了一些细节,更加自然,这也有利于后续的侵蚀效果。 然后是裂片。 一般来说,真正的山脉会被河流或地壳运动切割。 我们可以使用侵蚀算法来增加侵蚀强度来获得这种切割效果。 最后,我们可以从高度水平进行重映射并重复塑造不同的区域。 例如,我们在第一遍中对地图的平原区域进行了建模,在第二遍中对高原区域进行了建模。

引擎制作游戏_游戏引擎编辑器_引擎游戏

地形粗糙建模流程

模具粗建模精度较低,迭代效率相对较快。 大型造型设计应尽可能在毛坯模具阶段进行。 粗略模型完成后,对地形精度进行上采样。 更高的精度可以有更多的细节,然后继续整形,然后腐蚀。

为了获得更好的侵蚀效果游戏引擎编辑器,可以在侵蚀之前再进行一次扰动。 腐蚀是一个比较耗时的操作,更快的迭代效果需要TA熟悉。 如果对效果不满意,可以反复整形、侵蚀,得到最终的原始地形效果。

游戏引擎编辑器_引擎游戏_引擎制作游戏

地形高聚工艺

3.2 工艺工具地形处理

获得原始地形后,进入程序工具地形处理阶段。 一般来说,PCG的工具管线是根据不同的工具类型进行分层的,比如湖泊、河流、道路、围栏、植被等。

这里需要注意的是,每个工具都有依赖关系。 前一个工具的输出数据会对后一个工具产生影响。 例如,我首先使用河流工具生成一条河流,然后在河流经过的区域使用道路。 工具生成道路,道路工具需要考虑河流工具。 比如我们可以通过输出Mask来标记河流区域,这样道路工具就知道这里有一条河流。

一般来说,需要提前指定此类工具的顺序并设计流程。

引擎游戏_游戏引擎编辑器_引擎制作游戏

工艺工具流程图

这些程序工具可能会对地形产生影响,包括高度和材料。 关于地形的变化,有一个隐藏的含义,即后一个工具对前一个工具影响的地形进行操作。 比如刚才提到的道路工具是在河流之后,而河流工具本身就会使地形变形。 此时道路工具的地形输入是河流工具使地形变形的结果。

当然,有些工具可能不会对地形产生任何变形效果。 例如,栅栏工具一般对地形没有影响。 所以在这个工作流程中,我们需要存储每一层地形的变化。 如果没有这些中间结果,后续工具将没有地形输入。

3.3 手动编辑

由于程序化并不能解决所有问题,下一步就要进入手动编辑阶段。 问题又来了,什么阶段需要进行地形的手动编辑呢?

我们先回顾一下程序工具的地形处理过程。 如图所示,是一个链式结构。 可以看到我们可以在各个工具之间进行手动编辑。 例如,河流工具影响地形后美工不满意,可以进行编辑调整,然后使用道路工具根据调整后的地形铺设道路。 道路工具会影响地形,然后美术师可以在此基础上继续调整地形效果。

游戏引擎编辑器_引擎游戏_引擎制作游戏

处理工具地形流程图

有了这样的流程,就存在一个问题,如何存储地形修改?

为了实现无损编辑,需要存储对每一层地形的修改。 建议不要将修改的数据存储在编辑器场景中,而是存储在外部文件中,这样对Houdini更加友好。

另一个值得思考的问题是,手动修改的部分数据是存储差异还是直接覆盖? 直观上,存储差异有一个优点。 当前一阶段工具输出的地形发生变化时,手动修改的数据可能会被继承。 例如,由于某些原因,道路工具抬高了整条道路,因为存储了差值。 ,之前的一些本地手动修改可以复用。

缺点是可复用数据的合理性其实很模糊。 很多情况下,差异数据是无法获得的,使用这些数据后也不容易发现错误。 使用叠加方法的优点和缺点都很明显。 直接叠加不会出错3D素材,但一旦前一层修改了地形,后续各层的所有手动修改都将作废,后续各层都需要修改。

基于正确性优先的原则,建议使用覆盖而不是差异。 手动修改一般只修改部分区域。 覆盖方法需要存储两类数据,一是标记哪些区域被修改的Mask信息,二是需要覆盖的高度图信息。

这样我们就拥有了一个完整的地形工作流程,但是美术人员使用的时候还是会遇到很多问题。

第一个是可以手动编辑的阶段太多。 一个大世界一般都有十几层甚至几十层。 工作流程可以调整的地方太多,逻辑和艺术都很难理解。 二是可控性差。 前面提到前面一层的修改会影响到后面的层,导致修改频繁,很容易出错。 第三个也是最直接的原因是美术反馈操作过于繁琐,不好用。

引擎制作游戏_引擎游戏_游戏引擎编辑器

流程工具手动修改流程

转念一想,这个过程虽然比较完整,但很多阶段其实是不必要的。 由于程序工具经常影响地形,因此整个阶段不需要手动修改地形,因此最终的手动修改可以在整个程序过程之前和之后进行。 这将其简化为 4 个大型地形阶段。

原始地形:使用Houdini,世界机器输出。 手动修改1:美工可以在引擎编辑器中调整原始地形。 程序工具地形阶段:合并为一个大阶段,中间不允许手动调整。 手动修改2:手动调整最终地形。

整个过程可以一遍又一遍地迭代。

引擎制作游戏_引擎游戏_游戏引擎编辑器

程序地形工作流程

3.4 一些经验总结

①可控性很重要

② 无损编辑

③ 数据存储

④ 依赖关系

⑤ 不要过于依赖程序化

⑥ 锁

4、PCG技术展望

PCG技术不仅可以用来生成地形,还可以用来生成大世界环境的方方面面,比如植被、道路、河流、湖泊、海洋、社区、建筑等。

如果这些问题在实际项目中得到解决,并产生符合美术要求的资产,那么制作大世界游戏的成本将大大降低。 当然,这并不是说艺术无所事事,而是说艺术可以专注于艺术创作,消除不需要关心的重复劳动。 这样,PCG技术可以加快设计和验证效果的迭代。

此外,PCG技术还可以与机器学习等其他技术结合,辅助美术设计。 这类技术通过学习现有的资产库数据,自动生成一些新的数字资产,然后艺术可以进行一些挑战,从而可以加快创作速度。 速度。

PCG技术甚至可以在一定程度上向玩家开放,用于UGC内容的制作。 玩家可以像游戏制作人一样创造游戏世界。 整个PCG技术的应用前景是巨大的。

目前天美F1技术平台在PCG管线上有很好的积累,在其他AAA游戏技术上我们也取得了一些成果。

引擎游戏_游戏引擎编辑器_引擎制作游戏

F1技术积累图

在发动机技术、艺术等方面,我们目前预留并不断优化验证的方向包括:

最后,欢迎大家加入F1工作室,与天美共同成长,打造国内AAA级大作,实现个人技术突破。

文章来源:https://www.toutiao.com/article/7039899916562465319/?