中EN
概念页

PCG 程序化内容生成框架

PCG Framework

更新于 2026-10-13 约 9 分钟UE5PCG程序化生成开放世界

PCG 框架把程序化内容表达为「点流」:PCG 组件/体积从关卡采样空间数据,图中的 Sampler 生成带变换、密度、种子与自定义属性的点,经过滤与变换后由 Spawner 生成网格或 Actor,编辑器中实时更新,也可运行时生成。属性分为 $ 静态属性和元数据动态属性,按 @Data/@Points/@Elements 域组织;图参数与图实例的用法类似材质参数与材质实例;与世界分区集成,生成物继承数据层与 HLOD 层。

是什么

官方:程序化内容生成框架 (Procedural Content Generation Framework, PCG) 是在 UE 内创建程序化内容与工具的工具集,面向技术美术、设计师和程序员,规模从资产工具(建筑、生物群落)到整个世界。需启用 PCG 插件;在静态网格上采样点还需 Geometry Script Interop 插件。(Procedural Content Generation Overview)

核心模型:点流

flowchart LR
  C["PCG 组件 / PCG Volume
采样关卡空间数据"] --> G["PCG 图"]
  G --> S["Sampler 采样: 生成点"] --> F[Filter / Density / Point Ops] --> SP["Spawner: 生成网格/Actor"]
  • 点 (Points):3D 位置,带变换、包围盒、颜色、密度、陡度 (steepness)、种子 (seed),可附加用户属性。
  • 点密度 (Point Density):点存在于该位置的概率,调试视图中 0 黑 1 白。
  • 程序化节点图:格式类似材质编辑器;空间数据从关卡中的 PCG 组件流入图,生成点,经一系列节点过滤和修改,结果实时更新,最后用点生成资产。(Procedural Content Generation Overview)

节点分类包括 Sampler(从体积、表面、网格采样生成点)、Filter、Density、Point Ops、Metadata、Spatial、Spawner、Control Flow、Subgraph、Hierarchical Generation、Blueprint(执行派生自 PCGBlueprintElement 的蓝图)等。(Procedural Content Generation Overview)

属性与元数据

概念规则
静态属性固定存在,以 $ 开头,如 $Position
动态属性运行时创建,存在图数据的元数据中
域 (Domain)@Data(数据本身,单值,空间数据的默认域)、@Points、@Elements(属性集)
属性选择器@Last 表示上一节点最后修改的动态属性;可取分量,如 $Position.ZYX、Length
覆盖C++ 中标 PCG_Overridable 的设置(蓝图中实例可编辑变量)可通过覆盖引脚由属性驱动

样条数据可直接读写控制点属性($Position、$ArriveTangent、$LeaveTangent 等),控制点上的元数据在采样时插值。(Procedural Content Generation Overview)样条本身的数学见 埃尔米特与 Kochanek-Bartels 样条 和 贝塞尔曲线。

复用:参数、实例、模板

图参数 (Graph Parameters) 与材质参数类似;图实例 (Graph Instances) 类似材质实例,可作为子图并通过覆盖引脚改参数;图还可标为模板。(Procedural Content Generation Overview)概念对照见 材质系统。

运行时与世界分区

PCG 组件既能在编辑器中也能在运行时管理生成。当 PCG 资产被分配到某个世界分区数据层 (Data Layer) 和 HLOD 层时,生成的 Actor 会被分配到同一数据层和 HLOD 层。(Procedural Content Generation Overview)见 世界分区。

例子:森林体积

Get Landscape Data → Surface Sampler(Points Per Square Meter 0.15、Point Extents 50、Looseness 1.0)→ Transform Points(Z 旋转 0–360、Absolute Rotation、缩放 0.5–1.2)→ Static Mesh Spawner(多个网格条目按权重随机:概率为条目权重占总权重的比例)。(Procedural Content Generation Overview)

官方原文描述为「把所有权重相加再除以各自权重」,按字面应为 pi=wi/∑jwjp_i = w_i / \sum_j w_j,这里按概率含义改写。

调试:选中节点按 D 切换调试渲染、E 启用/禁用、A 检查 (Inspect) 在属性列表中查看点。(Procedural Content Generation Overview)

取舍

方面说明
收益规则化摆放、快速迭代、改参数全局重生成
运行时生成灵活但占用运行时资源;官方建议配合分层生成,只在需要的地方生成高细节(见上文);编辑期生成后烘焙更可控
大量实例Static Mesh Spawner 生成实例化网格,配合 Nanite 虚拟化几何体 处理高密度植被几何(关联为通识)
确定性点带种子,可复现(种子字段见官方点定义)

生成模式:分区、分层与运行时生成

(UE 5.8「Using PCG Generation Modes」,Using PCG Generation Modes)生成模式会把 PCG 组件的生成范围切成网格,每个格子有自己的本地 PCG 组件。共四种:不分区(默认)、分区 (Partitioned)、分层 (Hierarchical Generation, HiGen) 和运行时生成 (Runtime Generation)。

模式做法用途/坑
分区按 PCGWorldActor 上的 Partition Grid Size 把结果分到各格结果按格分开,便于配合 世界分区 流送;不分区时大范围生成会有性能问题
分层图设置里打开 Use Hierarchical Generation,在采样节点前放 Grid Size 节点,指定下游数据用哪个网格必须先开分区;大而少的网格体(树、巨石)放大网格,小而多的(草、石子)放小网格
运行时生成Generation Trigger 设为 Generate at Runtime,在生成源附近生成、远离时清理和分层配合效果最好;可在编辑器、PIE 和独立运行中使用

分层的数据流规则:大网格生成的数据会作为缓存供小网格使用,只能从大到小传递,不能反过来;一个节点的输入来自多个网格时,输出用最小的那个网格。很贵的操作(如对整个体积做 Mesh Sampler)应放在 Unbounded 网格上只执行一次,而不是每格执行一次。坑:数据从大网格传到小网格时,每个小格都会复制一份大网格的点,导致重复点、严重拖慢性能,可用 Cull Points Outside Actor Bounds 节点去掉格外的点。

flowchart LR
  U["Unbounded:只执行一次<br/>(昂贵的采样)"] --> L["大网格:树、巨石"]
  L -->|"缓存数据向下传递"| S["小网格:草、石子"]
  G["生成源<br/>玩家/视口/流送源"] -."按各级生成半径调度".-> L
  G -.-> S

图中数据只从 Unbounded 流向大网格再流向小网格;生成源按每一级网格的生成半径,决定哪些格子需要生成或清理。

运行时生成调度:生成源包括编辑器视口(需在 PCGWorldActor 上打开)、玩家控制器、世界分区流送源和 PCG Generation Source 组件。每级网格各有生成半径 (Generation Radii),超出半径乘以 Cleanup Radius Multiplier 后的范围就会清理。官方建议半径随网格变大而递增,不要让小网格的半径比大网格还大。默认调度策略按距离和视线方向确定优先级;可开启视锥剔除,并用 Bounds Modifier 让组件在进入视野前提前生成,避免对着镜头突然冒出来。调试命令:pcg.RuntimeGeneration.Enable、pcg.RuntimeGeneration.EnableDebugging。

GPU 执行(Beta)

(UE 5.8「Using PCG with GPU Processing」,Using PCG with GPU Processing)部分节点(Copy Points、Static Mesh Spawner、Custom HLSL)可以在 GPU 上执行,相连的 GPU 节点会合并成一个计算图 (Compute Graph),按 计算着色器 派发。取舍:CPU 与 GPU 之间传数据、准备计算图都有 CPU 开销,只有点数足够多、能用满 GPU 时才划算。所以官方建议把 GPU 节点放在一起,尽量减少上传/下载(节点上的黄色上下箭头标记),并用分层生成把共享工作放在大网格或 Unbounded 上。GPU 节点接 GPU 版 Static Mesh Spawner 是生成网格体的快速路径。

  1. Procedural Content Generation Overview UE 5.8 文档
  2. Using PCG Generation Modes UE 5.8 文档
  3. Using PCG with GPU Processing UE 5.8 文档(Beta 功能)

相关页面

游戏开发 · UE5世界分区World Partition世界分区 (World Partition) 是 UE5 的自动数据管理与基于距离的关卡流送 (Level Streaming) 系统:整个世界存为一个持久关卡,按可配置的运行时网格划分为单元格 (Cell),由流送源 (Streaming Source,默认是玩家控制器) 按距离加载/卸载。它配合一 Actor 一文件 (One File Per Actor, OFPA) 支持多人协作编辑,用数据层 (Data Layers) 按玩法状态切换内容,用分层细节层次 (Hierarchical Level of Detail, HLOD) 在远处以代理网格显示未加载的单元格。游戏开发 · UE5材质系统Material SystemUE 材质 (Material) 是用节点图描述「表面如何与光交互」的着色器生成器。它有三个正交维度:着色模型 (Shading Model) 决定光照模型(Default Lit、次表面、清漆、毛发等),混合模式 (Blend Mode) 决定与背景的合成公式(Opaque/Masked/Translucent…),参数 + 材质实例 (Material Instance) 让美术在不重编译着色器的前提下做变体。PBR 输入(Base Color/Roughness/Metallic/Specular)直接对应 RTR4 的金属度-粗糙度工作流;最大的工程坑是静态参数导致的着色器排列爆炸。游戏开发 · UE5Niagara 粒子系统Niagara VFX SystemNiagara 是 UE5 的 VFX 系统,由系统 (System) → 发射器 (Emitter) → 模块 (Module) 的栈式结构组成:发射器按 Emitter Spawn/Update、Particle Spawn/Update、Event、Render 分组,模块是自上而下执行、基于 HLSL 的「读-算-写」单元。继承、动态输入、事件和数据接口 (Data Interface) 提供复用与外部数据访问;发射器可选 CPU 或 GPU 计算着色器模拟。官方 5.8 文档未找到 CPU/GPU 对比页,相关取舍按通识标注。游戏数学贝塞尔曲线Bézier Curves参数曲线 \mathbf{p}(t) 用参数 t 生成连续的点,实时图形中常用于让相机或物体沿预定路径移动(与帧率无关),也用于渲染头发和字体。贝塞尔曲线由反复线性插值(de Casteljau 算法)得到,等价于 Bernstein 多项式加权控制点;多段拼接时要关注 C^n / G^n 连续性。游戏数学埃尔米特与 Kochanek-Bartels 样条Hermite & Kochanek-Bartels Splines三次 Hermite 曲线用两个端点和两个端点切线定义,比贝塞尔控制点更直观;把多段 Hermite 曲线串起来经过一系列点时,Kochanek-Bartels 用张力、偏置、连续性三个参数从相邻弦计算切线,默认参数即 Catmull-Rom 样条。均匀三次 B 样条则以不经过控制点为代价换来处处 C^2 连续。游戏开发 · UE5Nanite 虚拟化几何体Nanite Virtualized GeometryNanite 是 UE5 的虚拟化几何体 (Virtualized Geometry) 系统:导入时把网格切成分层的三角形簇 (Cluster),渲染时按相机视角逐簇选择细节层次并无缝拼接,按需从磁盘流送,并在绕过传统绘制调用 (Draw Call) 的独立通道中渲染,使帧预算不再受多边形数、绘制调用和网格内存约束。游戏策划关卡设计流程Level Design WorkflowRogers 的关卡设计方法来自迪士尼乐园:自上而下地从世界、关卡、体验一直设计到每时每刻的玩法;先选主题(可用"墨西哥披萨"法翻新老套主题)并起两个名字;用节拍表找扎堆与雷同;关卡分为小巷 (alley) 与岛屿 (island) 两类;用地标 ("weenie")、光照与"眯眼测试"引路,用"手指"小岔路奖励探索,用"幻觉叙事"讲故事;尽早决定脚本搭建还是程序化生成;先在纸上画图,再做灰盒、用游乐场测试机制,最后(或最先)做教学关,甚至让整个游戏都是教学关(Level Up! 第 3 版 Level 9 Everything I Learned About Level Design, I 图形学计算着色器Compute Shader计算着色器是 DirectX 11 引入的一种 GPU 计算方式:它不固定在图形管线的某个位置,但由图形 API 调用,和其他着色器共用统一着色器核心。它暴露了线程组和组内共享内存,最大的优势是能直接处理 GPU 上生成的数据,不用来回传给 CPU。游戏策划模式语言与程序化关卡Pattern Languages & Procedural LevelsTotten 认为程序化内容生成 (PCG) 的目的不是取代美术和关卡设计师,而是扩展人的能力。他用 Gillian Smith 的四种 PCG 方法和资源粒度来定位关卡设计师的工作,主要讨论构造式 (constructionist) 系统,并把 Christopher Alexander 的模式语言——"每个模式描述一个反复出现的问题及其解法的核心"——与第 3 章的场景等同起来:手工设计好的场景就是可供算法拼接的模式(第 11 章,p.475–494)。

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原