PCG程序化内容生成框架详解
PCG程序化内容生成框架详解
PCG(Procedural Content Generation Framework)程序化内容生成框架是一个工具集,用于在UE内创建自己的程序化内容。它可以帮助开发者构建快速可迭代工具,以及各种复杂内容,如建筑、生物群落(biome)甚至整个世界。PCG为扩展性和交互性而构建,可以轻松集成到现有的世界构建管道中,有效地模糊了程序性和传统工作流间的界限。
PCG的核心概念
Points
由PCG graph生成的3D空间的位置(通常用于生成mesh),其包含相关的transforms、bounds、color、density、steepness、seed。可以赋予自定义属性。
Point Density
被各种graph node使用的值。在debug视图中表示为每点上的gradient,并表示该点存在于该位置的概率。0为黑色,1为白色。
The Procedural Node Graph
程序化节点图表是PCG的核心部分,类似于材质编辑器的格式。空间数据从关卡中的PCG组件流入图表,并用于生成点。这些点通过一系列的节点被过滤和修改,输出会实时更新。最后的点可用于生成各种资产。
使用PCG Graph Editor,可以配置和编辑PCG图表资源。导航编辑器类似于蓝图或材质编辑器,还包含一些特有的工具和面板。类似蓝图,可以通过从Node Palette拖拽,或使用context menu添加节点。
PCG Nodes
PCG Graph由一系列节点组成,每个节点执行一个对最终结果有贡献的操作。节点分类如下:
- Blueprint:包含蓝图相关节点。
- Control Flow:用于控制逻辑流的节点。
- Debug:帮助调试节点。
- Density:影响点密度节点。
- Filter:基于条件或每点过滤数据的节点。
- Generic:影响数据但不影响空间数据的节点。
- Hierarchical Generation:用于控制Hierarchical Generation模式的节点。
- Input Output:用于加载Alembic和其他外部数据的节点。
- IO:控制与外部数据交互的节点。
- Metadata:与属性交互的节点(无论是点上还是属性集上)。
- Param:控制从Actor或Blueprint变量检索参数的节点。
- Point Ops:影响点及其特性(properties)的节点。
- Sampler:从空间数据源(如volumes、surfaces、meshes)生成点的节点。
- Spatial:在数据间创建空间关系的节点,更改其内部空间数据或检索数据。
- Spawner:创建数据或在给定位置放置Actor的节点。
- Subgraph:处理子图表的节点。
Attributes and Metadata
Attributes属性类似变量,并存储数据(通过名字和类型定义),有两种类型:
- Static Attributes:属性是固定且始终存在,以$开始,如$Position。
- Dynamic Attributes:在运行时创建并作为图表数据的Metadata存储。
Attribute Selector
通过Attribute Selector,一些PCG图表节点可提供static attributes和dynamic attributes间的交互性。提供了可用于选定节点的属性列表。
使用以下命名规则:
- $开头的名字是静态属性,无$开头的则为动态属性。
- @Last表示由前一个节点操纵的最后一个动态属性。
C++ Settings Overrides
在C++属性元数据中,某些设置被标记为PCG_Overridable。对于蓝图节点,可见且实例可编辑的变量是可重写的。一旦被覆盖,引脚将作为高级引脚自动添加到节点中。有两种类型的引脚:
- Global override:接受任意数量的属性,并覆盖与名称完全匹配的每个属性的所有设置。
- Single override:接受任意数量的属性,如名称完全匹配则覆盖指定设置,或如仅有一个属性则任何名字。
属性类型需要匹配,但某些类型可转换。
Graph Parameters
与材质编辑器中的参数类似,PCG图形参数是用户创建的可重写值,可帮助为各种情况创建自定义的图形。要创建新参数,请执行以下操作:
- 打开Graph Settings。
- 点击Parameters旁的**+**按钮。
- 点击新参数旁的向下箭头,重命名和选择类型。
Graph Instances
PCG Graph Instances类似于Material Instances,并使用Graph Parameters来帮助现有图形作为实例或子图表的重新使用。创建PCG Graph Instances操作:
- 在关卡内选择PCG资产。
- 在detail 面板内选择PCG组件。
- 点击Save Instance按钮以创建新实例。
PCG Component
Procedural Node Graph可通过PCG Component对关卡进行采样。此组件包含Procedural Node Graph的实例,并在编辑器内和在运行时管理程序内容的生成。PCG Component作为组件添加到Actor或作为PCG Volume的一部分,一个基本的volume对快速设置程序化内容有用。
将PCG Graph链接到PCG Component:
Debugging in PCG
调试是PCG工作流程的重要组成部分。每个节点都有各种调试选项,可用于在米格步骤中可视化数据:
- Debug Rendering
- Enable / Disable node
- Inspect
激活或禁用节点:勾选Enable、或按E键。
开启/关闭调试:勾选Debug、或按D键。
查看节点属性列表,按A键。
Create a Simple Forest Volume
程序生成工具的一个常见用例是在开放世界环境中生成biome。以下是创建简单森林体积的步骤:
- Create the Level
- Create the PCG Volume
- Create the PCG Graph Asset
- Connect the PCG Component
- Create the Points
- Add Variation
- Spawn the Static Meshes