UE5《Electric Dreams》项目PCG技术解析 之 基于关卡PCGSettings的工作流

在这里插入图片描述

程序化内容生成框架(Procedural Content Generation Framework,下文简称PCG)可谓是UE5.2版本中最令人瞩目的新技术之一,老王也是在第一时间就关注了这个技术,以前尝试过用Houdini来实现UE5中的程序化内容生成,感觉还是很蹩脚的,毕竟Houdini是第三方工具,节点操作不如UE蓝图顺手,而且生成的资源需要插件来解析,调试以及场景资源的交互就更头疼了。有了原生的PCG,在程序化内容生成方面,可以和Houdini说拜拜了。

引言

网上有不少关于PCG的小教程,但基本都是从“小工具”层次的介绍。深扒《Electric Dreams》项目的代码,让我感到Epic Games这次给出的PCG是野心满满的,因为它不仅有很高的完成度,而且还为中大型项目直接定义了更加优化的PCG开发工作流程。

什么是PCGSettings

PCGSettings是PCG中的配置文件,PCGSettings有两种:

  • 节点的PCGSettings
  • 关卡的PCGSettings

其中节点PCGSettings比较容易理解,把PCGGraph中选中的节点,右键Export Nodes to AssetData就可以保存成对应的PCGSettings,它的作用就是可以复用这些节点的设置,直接拖拽到PCGGraph中就可以使用。
下面我们重点聊聊关卡PCGSettings,在每个Level文件上右键通过PCG - Level to PCG Settings都可以导出一个关卡PCGSettings文件,它的名字由Level文件名+"_PCG"后缀组成,当我们更新了关卡中的内容,再次导出时,如果已有对应的关卡PCGSettings文件,它会直接对旧文件进行更新。

在这里插入图片描述

关卡PCGSettings中有哪些内容

我们新建一个名为"PCG_DesignLevel"的关卡,在里面随便摆放一些东西:StaticMesh、SkeletalMesh以及SplineActor。顺便给两个StaticMesh更换一下材质,然后为白色的Actor添加ActorTag:White;为红色的Actor添加ActorTag:Red

在这里插入图片描述

导出关卡PCGSettings
在这里插入图片描述

新建一个PCGGraph,里面的内容非常简单,RCG_DesignLevel节点就是"PCG_DesignLevel_PCG"的Instance(直接拖拽到PCGGraph即可)

在这里插入图片描述

扫描二维码关注公众号,回复: 15429044 查看本文章

注意:

  • 这里StaticMeshSpawner的Mesh Selector Type的类型要设置为PCGMeshSelectorByAttribute
  • Attribute Name设为"Mesh"(字符串类型)
  • 勾选By Attribute Material Overrides并添加"Material"

再新建一个名为"PCG_GameLevel"的关卡,把刚刚写的PCGGraph拖拽到关卡中。

在这里插入图片描述

神奇的事情发生了,我们发现:

  • "PCG_DesignLevel"中的静态物体(静态几何体,地面)都显示出来了,甚至还赋上了材质。
  • 生成的静态几何体都成为了PCG_Demo的子组件。
  • 但SkeletalMesh和SplineMesh都不见了。

这一切是怎么发生的呢?我们检查一下关卡PCGSettings中点云(Point Cloud)的内容:
在这里插入图片描述

  • 从列来看,关卡PCGSettings`的点云中包含着原关卡中所有静态网格体、层级实例化静态网格体(HISM)和实例化静态网格(ISM);
  • 从行来看,点云中的每个点除包含初始属性,还包含着上述静态网格的体相对根节点(PCGVolume)的Transform,以及对应的Mesh资源和Material。这就是为什么StaticMeshSpawner可以通过属性生成网格并赋上材质。我们还可以看到,之前在原关卡中为红色和白色Actor分别添加的Tag(“Red"和"White”)也作为每个点的属性储存在点云中,这是一个Int32/64类型属性,拥有该属性的Actor值为1,否则为0。在PCGGraph中,我们可以通过Point Filter来过滤拥有某种Tag的Actor。

工作流

小小的PCGSettings文件,让PCG开发有了多元化而且松耦合的工作流程,比如:

  • 工作流1:

这是一种纵向的工作流,关卡设计师可以现在一个初始关卡(暂称之为“锚定场景”),定义出一些重要的锚定网格体,然后导出它的PCGSettings,地编新建一个关卡(暂称之为“地编关卡”)通过PCGGraph进行视觉上的装饰

在这里插入图片描述

  • 工作流2:

这是一种横向的工作流,《Electric Dreams》项目中大量使用了这种工作流。每个子关卡都分别导出PCGSettings,然后在组合关卡中进行组合,这样不但降低了各个模块开发的耦合度,还大大提升了关卡的复用性和灵活性。

在这里插入图片描述

小结

UE5.2中PCG被称为框架(Framework)而不仅仅是工具(Tools),是有道理的。因为它不仅仅是houdini的原生版本,还带来了一套针对PCG开发的工作流程,使用PCG制作游戏场景,效率实在太起飞了,我相信它会成为未来游戏开发的必修课。

猜你喜欢

转载自blog.csdn.net/hello_tute/article/details/131349425
今日推荐