简单学习UE5.2的PCG框架插件里的基础概念

目标

最近了解到5.2版本推出了实验性的功能PCG框架,以及用它做的范例 Electric Dreams。

本篇我简单学习它的一些基础概念,做一些记录。

0. 启用插件

此功能相关的类型都在PCG插件中,因此首先要确保启用了PCG插件:
在这里插入图片描述

1. PCGGraph

PCGGraph是一种可创建的资源:
在这里插入图片描述
它里面存储了一个PCG节点网络。外表看起来像蓝图,但不是蓝图。
一个最简单的PCGGraph如下:
在这里插入图片描述
它从输入端获得地形,采样其表面得到一些点,然后根据点生成模型。模型路径是在StaticMeshSpawner节点上配置的。

2. PCGComponent

PCGVolume是PCG插件所定义的Actor类型,它拥有一个PCGComponent。可以直接拖入场景。
在这里插入图片描述
(我实验发现PCGComponent放在一个空Actor上,而非PCGVolume上,也可以工作。可见PCGComponent并不强依赖于PCGVolume

PCGComponent会引用一个PCGGraph

比如,这里测试创建一个PCGVolume放在地形上,然后将PCGComponent指向上一步创建的简单的PCGGraph。点击Generate按钮后就可以看见效果:
在这里插入图片描述

3. PCG节点的内部逻辑在哪?

显然,PCG核心逻辑由PCG节点构成。
虽然很多节点的行为是好理解的,可以作为黑盒看待。但要想进一步研究节点内部逻辑该看哪儿呢?

可以双击节点来看内部逻辑,我注意到有两种情况:

一种是跳转到C++界面,比如 SurfaceSampler 节点:
在这里插入图片描述
这些节点似乎都继承自UPCGSettings类(待查证)

另一种是跳转到一个蓝图资源,比如 SetPointColor 节点:
在这里插入图片描述
蓝图资源似乎都是UPCGBlueprintElement的子类(待查证)

(准确来讲,还有另一种情况是 SubGraph (子网络)节点,即另一个PCGGraph)

总结

  • 核心PCG逻辑由PCGGraph的PCG节点所组成。
  • PCG节点的逻辑可能由UPCGSettings类的C++代码定义,或者是UPCGBlueprintElement的子类蓝图所定义。
  • PCGComponent负责运行PCGGraph的逻辑将内容生成到场景中。

后续学习

  • 学习更多的PCG节点用法。
  • 本篇所测试的PCG逻辑过于简单,其实也能在蓝图中实现。那么为什么PCG框架不以扩展蓝图节点为方向来开发呢?我相信官方使用新的节点框架而非蓝图必然有其意义。那么后续去研究那些“用新PCG框架能实现,而蓝图节点不方便实现的逻辑”,会有助于理解这个问题的答案。
  • 相比于Houdini,此方式一个显著的优势就是“快速”,毕竟少了数据传入传出Houdini的时间。但我想Houdini肯定有其优势。后续可以思考哪些内容/逻辑只能用Houdini实现(或者说更好实现)?(至少目前没看到它可以修改地形高度/材质层,和生成Mesh数据)

一些学习资料:

本篇主要参考的官方文档:
程序化内容生成概述 | 虚幻引擎5.2文档

UE官方范例项目 Electric Dreams 的深入讨论:
Deep Dive into the Electric Dreams Project | Inside Unreal - YouTube

UE官方公众号的4篇关于 Electric Dreams 中PCG技术的讨论:
Electric Dreams PCG技术详解

猜你喜欢

转载自blog.csdn.net/u013412391/article/details/131621198
今日推荐