SuperAPI AI 工具集

ue5-pcg-building

编程与开发

查看项目

更新于 10-16 02:20

技能介绍

用途

该技能用于在 Unreal Engine 5.6 至 5.8 中构建 PCG(Procedural Content Generation,程序化内容生成)建筑生成工作流,覆盖模块化建筑、体块(blockout)、立面规则以及运行时生成。当请求涉及程序化建筑生成、地块筛选、形状语法或运行时调度时适用。

主要能力

技能围绕一个六阶段图契约组织:Input、Filter、Transform、Grammar、Output、Validate。每个阶段必须显式声明五项内容:输入数据类型(EPCGDataType 或资产来源)、核心节点/类(至少两个)、必需参数(种子、标签、范围、半径或样式键)、输出数据类型、调试方法(节点级检查、调试节点或日志/断言路径)。若某阶段无法满足这五项,则视为图设计不完整。

各阶段要点:

  • Input:输入数据类型为 actor/spline/point 来源;核心节点/类包括 UPCGDataFromActorSettings、UPCGGetActorPropertySettings、UPCGCreatePointsSettings;必需参数为地块标签过滤、区域/样式标签、种子来源、来源边界;输出为归一化且顺序稳定的地块点或样条数据;调试方法为在输入阶段后运行 UPCGDebugSettings 并验证点数量与边界。
  • Filter:输入为 Input 阶段的点/样条数据;核心节点/类包括 UPCGAttributeFilteringSettings、UPCGDensityFilterSettings、UPCGFilterByTagSettings;必需参数为坡度范围、排除标签、最小地块面积/宽度、占用约束;输出为仅可建造的地块/候选;调试方法为比较过滤前后候选数量并检查被拒标签分布。
  • Transform:输入为过滤后的可建造候选;核心节点/类包括 UPCGCopyPointsSettings、UPCGCreateSplineSettings、UPCGApplyScaleToBoundsSettings;必需参数为层高、轴心约定、立面朝向基准、局部轴;输出为占地变换与逐层变换;调试方法为检查输出点上的变换轴与楼层索引属性。
  • Grammar:输入为 Transform 阶段的段/样条/点数据;核心节点/类包括 UPCGSubdivideSplineSettings、UPCGSubdivideSegmentSettings、UPCGSelectGrammarSettings;必需参数为 GrammarSelection、模块尺寸限制、基于样式的语法键映射;输出为语法解析后的模块放置/属性;调试方法为使用 UPCGPrintGrammarSettings 进行语法解析与 token 校验。规则:仅使用 GrammarSelection,避免已弃用的语法字段。
  • Output:输入为语法解析后的放置;核心节点/类包括 UPCGStaticMeshSpawnerSettings、UPCGSpawnActorSettings、UPCGCreateTargetActor;必需参数分静态路径(网格选择器、实例打包器、ISM/HISM 策略)与 Actor 路径(Actor 类、生成属性、状态/交互需求);输出为渲染的建筑与可选的可交互建筑元素;调试方法为按层/标签拆分输出并验证每层数量。默认策略:优先使用 Static Mesh Spawner,仅在需要状态化行为时使用 Spawn Actor。
  • Validate:输入为最终生成结果与运行时生成状态;核心节点/类包括 UPCGDebugSettings、UPCGComponent、UPCGSubsystem;必需参数为预期单元边界、每次更新最大生成预算、导航/碰撞预期;输出为通过/失败信号与修复动作;调试方法为对重叠、导航影响、每单元生成时间与确定性重放执行分阶段检查。

使用方式

快速开始步骤:定义生成目标(体块塔楼、模块化立面或基于地块的建筑集);定义确定性输入(地块样条/点、区域标签、样式预设与种子);定义运行时模式(静态烘焙、按需或运行时调度生成);定义输出模式(优先 Static Mesh 实例,仅对交互/有状态部分使用 Spawn Actor)。

API 锚点(UE5.6-UE5.8):运行时触发与半径位于 UPCGComponent,包括 EPCGComponentGenerationTrigger::GenerateAtRuntime、bOverrideGenerationRadii、GenerationRadii、SchedulingPolicyClass、SchedulingPolicy、GenerateLocal(...)、Cleanup(...)。运行时调度器刷新位于 UPCGSubsystem:UE5.6/5.7 为 RefreshRuntimeGenComponent(...)、RefreshAllRuntimeGenComponents(...);UE5.8 为 RefreshRuntimeGenExecutionSource(...)、RefreshAllRuntimeGenExecutionSources(...);UE5.8 延迟刷新为 DirtyRuntimeGenExecutionSources(...)。共享清理 API 为 CleanupLocalComponentsImmediate(...)。输出选择锚点类为 UPCGStaticMeshSpawnerSettings(高数量渲染)与 UPCGSpawnActorSettings(交互/有状态输出)。形状语法锚点类为 UPCGSubdivisionBaseSettings::GrammarSelection;不要依赖已弃用的语法字段(bGrammarAsAttribute_DEPRECATED、Grammar_DEPRECATED)。

运行时调度操作:当单个运行时组件更改了样式/半径/调度输入时使用组件刷新;当样式/全局规则对许多运行时组件更改时使用全局刷新;当边界缩小或分区归属变化时使用立即本地清理;清理后仅对受影响的运行时范围触发本地重新生成。

适用场景

适用于 UE5.6-UE5.8 中需要程序化生成模块化建筑、体块、立面规则或运行时建筑生成的场景,包括地块筛选、形状语法解析、静态网格实例化输出与运行时调度刷新等任务。

限制

约束:主流水线需保持与 UE5.6-UE5.8 兼容,除非需要版本特定说明。运行时生成必须显式设置 GenerationTrigger = GenerateAtRuntime、显式 GenerationRadii(不要依赖隐式默认值)、显式 SchedulingPolicyClass 以获得可预测的调度器行为。大量数量优先使用 ISM/HISM 风格输出,避免为每个小部件生成重量级 Actor。保持运行时生成边界显式,避免不受控的全世界重新生成。当预期运行时生成时,避免对仅编辑器数据的隐藏依赖。将 World Partition 边界视为运行时范围的硬约束。

失败处理涵盖以下症状及定位与修复方向:无建筑生成;编辑器预览有输出但运行时没有;运行时更新重新生成区域过宽;规则收缩后残留过期生成部件;运行时生成期间严重卡顿;相同种子下确定性重放不匹配;立面语法失败或产生空模块;重叠与碰撞问题;生成建筑周围导航网格退化;参数编辑后运行时更改不生效。

版本兼容说明:上述核心运行时触发与语法 API 在 UE5.6-UE5.8 中稳定。UE5.8 新增非破坏性手动编辑与复杂元数据属性值,应视为可选的 5.8 能力而非跨版本图的必需项。子系统头文件路径差异:UE5.6 常用 Public/PCGSubsystem.h;UE5.7/5.8 使用 Public/Subsystems/PCGSubsystem.h 并包含 Subsystems/PCGSubsystem.h。UE5.8 弃用组件命名的调度器刷新调用,5.8 代码应使用基于 IPCGGraphExecutionSource 的 API,仅对 5.6/5.7 分支保留基于组件的调用。

升级条件:当架构需要自定义 C++ PCG 元素或引擎插件扩展时;当城市规模生成必须与 World Partition 流送策略集成时;当生成的布局必须与保存/加载或多玩家权威规则同步时。