1

Epic讲解UE5新能力:PCG程序化生成,数秒内创造超写实3D场景

 1 year ago
source link: http://www.gamelook.com.cn/2023/04/513645
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Epic讲解UE5新能力:PCG程序化生成,数秒内创造超写实3D场景

2023-04-03 • 游戏美术

【GameLook专稿,未经授权不得转载!】

GameLook报道/随着开放世界品类在业内的流行,美术资源的制作成为了很多研发团队比较头疼的问题,庞大的开放世界往往需要大量的模型和美术资源,因而对时间和资金成本提出了比较高的要求。

这种情况下,程序化生成(PCG)就成为了解决开放世界游戏研发效率的关键工具之一。此前,Gamelook就曾介绍过使用了Houdini制作开放世界内容的《孤岛惊魂5》。

如今,开发者们手上又多了一个可用的工具。在GDC 2023期间,虚幻引擎开发商Epic Games公布了Unreal Engine 5.2版本,其中一个比较值得关注的功能就是PCG框架,据Epic Games技术美术总监Jean-Sebastien Guay介绍,通过这个工具,可以在数秒内生成数百万个多边形资源。

当然,目前虚幻引擎的这个PCG框架主要针对户外场景的打造,比如森林、荒野等场景,开发者们在使用Unreal研发游戏的时候,就可以只聚焦于室内模型和美术资源的打造,让这个工具为游戏生成超写实的开放世界地图。

以下是Gamelook听译的完整内容:

Jean-Sebastien Guay:

lazy.png

我是Jean-Sebastien Guay,职位是技术美术总监,在虚幻引擎研发团队从事程序化和世界构建工作。我们只是一年多之前才开始从事PCG框架的工作,我们通过利用所有的基础工作和一年研发之间的内部创意原型,打造了视频中的“Electric Dreams”demo。所以我们首先来展示一些最重要的东西:

对我们而言很清楚的是,这个框架需要支持runtime和实时编辑,我们是从Lyra简单项目的游戏玩法创意原型开始的,因为我们认为没有什么比游戏更能证明这一点。

众所周知,游戏内意味着不可预测的个人输入,这很酷,是我们想要的、也是我们非常喜欢的。但我们的程序化框架需要用一个确定的程序化输出来回应它(用户输入),这是极为重要的。

玩法创意原型

为测试这一点,我们打造了两个简单的创意原型,每一个都不同。

第一个结合了控制点机制和PCG,当一个主题捕捉到一个点,我们就围绕它生成视觉以及额外的新控制点,拓宽玩法区域取决于固定的网格大小,控制这个场景区域超过50%的人获胜。

lazy.png

第二个创意原型是个跑酷玩法,每次玩家跨过一个tile就会难度递增,通过增加即将到来的事物密度,它随后会影响即将到来的结果。我们还通过增加随机旋转做了一个快速的替代版,然后更新PCG图表,以得到玩家应该走的道路,而且这个速度应该是很快的。

实际上,这些创意原型都是两名技术美术师在两周内完成的。它帮我们确定了,在虚幻引擎内让这个框架用于游戏内和多人内容的runtime工作是完全值得追求的一个想法。最终,我们认为这个框架可以给游戏开发者们带来新的玩法机会。

大世界创意原型

接下来,我们想要在一个更大的世界里以更高的密度解决伸缩和速度。这个demo是和切换现实有关的,使用了《堡垒之夜》City Sample和Quixel内容。

lazy.png

这里可以看到《堡垒之夜》variant在玩法期间实时生成的效果,它由四个不同预设的单个PCG规则做出来的,并且在玩家经过这些传送点的时候起作用。

为了实现着效果,我们需要在Blueprint里打造一个定制化层级生成逻辑,作为基于玩家距离和方向支持LOD的方式之一。这个分层生成概念近期内将在框架内原生部署,与游戏玩法一样,这一切都是在游戏的过程中快速运行的,没有任何东西是预生成的。

lazy.png

世界构建工具创意原型

lazy.png

做这些东西帮我们提升了多线程、伸缩和参数化(parameterization)的性能。但这还不是全部,我们必须打造世界构建工具创意原型,我们想要这个框架让美术师和策划都能根据自己的项目需求使用。这是一个开放框架、不局限于单一任务或领域。

这个图片中,你可以看到几何体工具的影响,它通过体积隔开了生物群落,然后在PCG图表(graph)内处理。

但很明显我们必须尝试一些建筑生成器,但它不会被称之为PCG。这里第一个建筑的清晰覆盖区,然后用City Sample Nanite组件打造。

lazy.png

第二个创意原型加入了更多东西,因为它在制作一个像用在《黑客帝国:觉醒》里那样确定语法概念。对于每一层,语法这种情况下设定在节点图表(node graph)之内,并调节脚本驱动覆盖区。

看到这个之后,Quixel团队正在制作这个demo,我认为这是一个很好的机会,看我们可以如何一起提升、制造和程序化。

我们最开始做的是可以在内部当做节点图内instance node使用的PCG资源。这个资源基本上作为一个带有metadata的点云存储,所有的视觉效果都存储在一个云里,带有一整套的属性设置,比如网格、材质参照、层级等等。

lazy.png

有了这些信息,随后就可以通过程序化逻辑修改这些assembly,并提高整体质量的迭代速度。

考虑到上面的结果,这里展示了这些规则有多么简单,随着我拓展spline和关闭节点你还可以看到属性列表试图被实时更新。你们看到的资源是通过PCG插件分销的,所以你可以使用它、提升它,或者只是作为创作你自己PCG资源类型的一个案例。

到目前为止,我所展示的一切都显示,我们需要为拓展性和互动效率进行打造,我们希望让程序化生成和传统工作流程之间的界限更加模糊。我们认为程序化工具应该始终帮助美术师和策划在项目给定的时间内达到有可能的最佳品质。

可伸缩解决方案

有关创意原型工作先说到这,我们接下来说Electric Dreams。我们这个demo的目的是用我们研发和学习的所有东西,来展示这个解决方案已经有了怎样的可伸缩性,我们字面意义上讲,是在生成大到像背景中Vista山脉那样的鹅卵石。

lazy.png

在这个世界里,我们共有8个PCG图表(graph),支持复杂的multi-graph交互和完整的参数化。我们也在利用刚提到过的增强的PCG Assemblies概念。

lazy.png

我们对于近距离PCG区域,是通过八个PCG图表当中的四个组成的,有大的和小的Assembly,地表和护坡。

lazy.png

在PCG图表内你可以从actor获得数据,甚至可以从其他图表获得数据。地表是展示multi-graph互动的完美案例,因为它用了所有的邻居来建造自己。

开始是得到护坡曲线创作表面,然后为世界增加assembly的时候,图表就会被更新。在这个更新期间,我们计算到围绕这些assembly旋转点的距离,以更好地确定它们周围的形状。

使用我们可以定制化的debug视觉,并同时运用到多个节点,我们可以看到地表会遵循这些修改,以及在这个场景中这些assembly之下真正发生了什么。

通过左右移动assembly,我们可以得到触发图表更新的callback,然后回应人为互动改变的一切。

lazy.png

这并不是复杂互动的唯一案例,更大的assembly本身也意识到了护坡的存在,以及它相邻的小assembly,周围的曲线用于寻找潜在倒下的树木位置,如图片中的蓝色线。通过这个,我们可以判定树木到底是应该倒在地上,还是直接被丢弃。

我们可以通过调整潜在目标数字的方式控制可能性,但如果需要,我们还可以让人放置一个具体的树木。

对于比较大的assembly,这些可以定制化用于全手动控制,随后当我们处理附近小型assembly的时候就可以用同样的逻辑,这是我们希望你们打造的互动类型,还可以在用这个框架创造定制工具的时候进行拓展。

lazy.png

我展示的PCG资源被证明是非常有用的,图片中可以看到所有的组件。

lazy.png

护坡也是如此,对于不同功能,我们有特定的组件,比如左侧的三个可以放在任何地方,因为它是可以旋转的。

我们还可以在一个表面使用world raycast采样,比如这里的Clover版本,实际上我们是在图表输出之上进行的raycasting。用raycast放置这样的资源可能返回无效位置,并且会带来方向和浮点问题,所以我们通过创作平面区域检测器的方式解决了这个问题,就像材质函数那样使用一个subgraph功能。

lazy.png

注意左侧的红色debug点,右侧更平坦的地方有更多绿色点,这只是一个很小范围的案例,但你可以想象同样的subgraph被用在整个森林之中生成岩石。

lazy.png

大多数情况下我们使用一个静态网格节点生成输出优化的静态网格组件,actor负责PCG组件,是可以被完全定制化的。

这个案例中,我们生成了动态岩石和周围的植物,甚至去掉了汽车绑定。

lazy.png

接下来我们看远距离,其余的四个规则包括Vista、fog cards、山脉和森林。右侧是森林图表,支持demo里大部分的互动和定制化,可以从视频看到,我们曝光了一系列参数,这些参数目前在Blueprint之中,我们目前在积极研发graph instance系统,这样你们就可以直接在graph内曝光这些参数,而不用经过Blueprint。

lazy.png

森林规则遵循你对程序化森林的预期,首要资源,比如树木、岩石会被二级和三级资源围绕,悬崖上的岩石还去掉了上面的所有树木,这样在森林里就不会有看起来很糟糕的重叠物。有时候,我们甚至根据需要完全去掉了整个山脉。

使用同样的优先级方法,我们为Vista规则每一层都打造了不同的预设。这里的ID,我们可以存储不同的配置,并在需要的时候运用。比如一个游戏内事件、或者电影动画、或者只是一个电影的几个镜头,你还可以将这些graph用于多个世界,在多个项目和不同产品制作的时候使用。

lazy.png

在demo当中,我们使用了一些逻辑来创造stack,按距离缩放,并提出大型背景山脉的树木。我们朝着世界中心重新定位了fog card方向,甚至基于太阳的方向,为森林里的每棵树应用不同植被材质,你可以做的事情有很多。

lazy.png
lazy.png
lazy.png
lazy.png

最后,这些是每个规则背后的一些数据,计时代表了所有节点加起来的总时间,需要提醒的是,对我们而言,runtime和实时编辑是我们主要的焦点之一,而且我们会始终保持提升性能。

考虑到这是实践性的,我们觉得这已经非常令人印象深刻的,我们在这世界里生成了超过150万个资源,这还是个4X4 km规则做到的。

如若转载,请注明出处:http://www.gamelook.com.cn/2023/04/513645


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK