修订说明(2026-09-30):本文记录 2026-08-22 的阶段工作。早期代理方案、样本测量和原版算法证据已重新区分,未完成事项按当时验证范围理解。后续进展见高度图还原与POI、Stamp 和植被岩石布局。
RuntimePCG 开发复盘 · 关卡布局与自然地形篇
上一篇《从可玩世界到多人联机:UE5 运行时地形、POI 摆放与 Dedicated Server 同步》解决的是运行时工程问题:同一份 Recipe、Seed 和布局输入,如何在编辑器、客户端和 Dedicated Server 之间得到一致结果;地形什么时候可查询,碰撞什么时候可用,客户端差异又该如何发现和修复。
不过,服务器和客户端看到同一份地形,只能说明多人链路接通了,还不能说明这已经是一张能玩的关卡。
接下来要处理的是关卡本身:这局选哪些 POI,主任务、支线、据点和资源点分别放在哪里,Cell 的真实占地怎么参与碰撞,道路从据点的哪个入口接入,以及放置这些人工结构之前,地形能不能先提供一块连续、可玩的底座。
最近这一轮,我们把这些工作接进了同一条验证链。原有 Runtime/DS 基线已经能让同一配置和 Seed 得到一致的多人结果;新增的 25 个 POI 和区域道路目前完成了 Web 重建,正在 UE 中验证空间数据能否直接使用,Runtime/DS 的逐项摘要还没有补齐。地形侧则推进了 Desert_Dune 和 Icy_Glaciers,并把 Region、SubRegion、StampGroup、StampInfo 拆成可以单独检查的生成阶段。
先把完成边界说清楚:Cell、StampCircle、Rectangle、Entry 和内部 Spline 来自解包数据或 UE 资产重建;POI 选择、候选评分、区域道路和部分高度代理,是我们为了接通生产流程写的重建方案,并不是已经确认的 HD2 原始运行时算法。
下面按实际生产流程展开,同时把直接证据、当前重建和仍未确认的部分分开标注。
一、把布局、地形和运行时接成一条生产链
这次同时推进了三块工作。
关卡布局负责选出本局的 Cell,计算 POI 的位置和朝向,用已经接入的占地组件检查边界和重叠,最后组织任务关系与道路。
工程链路按环境分工:Web 适合拆数据、回放阶段和比较固定 Seed;UE 编辑器用来对照资产与空间;运行时在真实场景里创建地形和 POI;Dedicated Server 检查多人会话是否仍然落到同一份结果。
自然地形不从堆叠噪声开始。我们先恢复 Region 与 SubRegion 的连续空间关系,再加入宽尺度支撑、中尺度形态、局部残差,以及受支持域约束的自然 Stamp。

三块工作通过同一份配置和 Seed 汇合。策划在 Web 中调候选与道路规则,美术逐阶段检查地貌和 Stamp 组合,程序再把同一份输入带进 UE、运行时与 DS。哪一步出问题,就回到对应的配置和生成阶段,不必只盯着最终场景猜原因。

Web 工具目前只覆盖了一部分地貌,UE 中的地表材质、植被、完整道路表现和全部 biome 也没有接齐。现在能确认的是验证入口已经稳定:布局问题留在布局层查,地貌问题回到对应生成阶段,网络差异则看运行时会话和摘要。
二、先把“已知数据”和“运行时决策”拆开
程序化布局最容易出现的误解,是把解包数据里的候选集合直接当成最终地图。实际中间还隔着一层运行时决策。
本轮使用的输入快照如下。这些数字用于固定测试条件,不代表 HD2 完整内容规模或原版预算规则。
| 项目 | 当前测试值 |
|---|---|
| 难度 | D6 |
| 阵营条件掩码 | bit 10 |
| PlanetTemplate | 2 |
| Seed | 20260820 |
| 地图半径 | 500m |
| 暂定 POI 预算 | 25 |
LevelGenerationLocation 池 |
14 |
| exploration 记录 | 58 |
| Cache 记录 | 35 |
LocationStampInfo |
843 |
| 唯一 StampID | 837 |
这些数据能告诉我们“有哪些内容可以选”“一个 Cell 由哪些占地组件组成”,却不能直接回答 HD2 原版如何分配预算、如何按权重重投、如何处理 Spawn Limit,也不能证明剩余候选池的确切用途。

后面的内容按三类信息来写:
- 解包数据:候选池、Cell 与 Stamp 关系、StampCircle/Rectangle、Entry、Spline 等;
- 游戏运行时缺失部分:正式选择器、权重裁决、预算分配、重投和部分类别语义;
- 当前工程代理:固定类别清单、25 个 POI 预算、候选采样、评分与道路路由。
把这三类拆开以后,选择算法就可以单独替换。以后拿到新的运行时证据,只改选择和落位模块即可;已经验证过的 Cell 几何、空间接口以及 UE/DS 基础链路不用跟着重做。
三、POI 不是一个点,而是一组会旋转的空间占地
早期原型常把 POI 表示为一个中心点,再给不同类型配一个经验半径。这样适合画示意图,却不足以放置真实 Cell。
一个据点可能由多个偏心 StampCircle 和 Rectangle 组成。它们共同定义了建筑、岩体、平台或人工结构在二维布局中的空间占地。POI 改变朝向时,不能只旋转一个图标,而要让整组本地组件围绕 Cell 原点一起旋转,再平移到世界坐标。
以一个主任务 Cell 为例,解包结果包含四个 StampCircle:
| 组件 | 本地中心 X / Y | 半径 |
|---|---|---|
| C1 | -25.49m / -36.26m | 44.28m |
| C2 | 14.09m / -23.78m | 56.06m |
| C3 | 40.70m / 26.12m | 51.77m |
| C4 | -26.52m / 23.26m | 56.69m |
四个圆合起来的轴对齐范围约为 175.7m × 160.5m,整体包围半径约 100.1m。若只用中心点和单一半径,可能在一侧留出大量无效空白,又让另一侧的偏心建筑侵入邻近 POI。

摆放阶段处理的不是一个孤立点,而是一组经过旋转的占地组件:
- 生成候选位置与朝向;
- 将 Cell 的 StampCircle 和 Rectangle 一起变换到世界坐标,用于显示、输出和后续空间检查;
- 当前已验证路径对 StampCircle 逐组件检查边界、碰撞和间距;
- Rectangle 暂以保守包围范围参与过滤,精确旋转矩形碰撞仍待补齐;
- 在合法候选中选择一组结果,并写入位置、朝向和占地组件。
这里的 StampCircle 是布局占地,不是建筑外轮廓,也不是自然地形的高度 Stamp。几类同名对象的职责和完成状态如下:
| 名称 | 证据来源 | 所属阶段 | 是否改变高度 | 当前用途与状态 |
|---|---|---|---|---|
POI StampCircle / Rectangle |
解包数据或 Cell 资产重建 | 布局 | 否 | 描述空间占地;Circle 已进入精确过滤,Rectangle 仍使用保守范围 |
自然 StampGroup / StampInfo |
解包配置关系 | 自然地形 | 间接 | 父子关系与支持组件已确认,原版运行时高度机制未知 |
| 自然 Stamp 高度代理 | 当前重建 | 自然地形 | 是 | Web 原型用于验证支持域、组合关系和阶段职责 |
| POI 平台 / Gameplay Stamp | 当前运行时实现 | POI 地形适配 | 是 | 既有 Runtime/DS 基线已实现;新 25 POI 布局尚未逐项接入 |
| 道路地形修形 | 当前接口规划 | 道路与地形衔接 | 计划改变 | 本轮区域道路只验证平面连接,高度修形未列入完成项 |
四、候选生成、过滤与锁定:一套可验证的工程方案
HD2 材料没有给出完整的 POI 运行时选择与摆放实现。为了先验证数据结构、空间约束、道路接口和运行时链路,工具采用多候选采样与硬约束过滤方案。
思路接近 best-of-N sampling 和 Poisson disk sampling 所使用的空间分离原则:一次生成大量位置与朝向候选,排除越界与冲突项,再从剩余候选中选择空间关系较好的结果。但本文实现不是 Bridson 的 active-list Poisson disk,也不能据此推断 HD2 使用了同一算法。

在一轮 500 米半径的测试中,主任务 POI 会先生成 2600 组 X/Y/Yaw 候选。示例 Cell 的四个 StampCircle 按同一个朝向旋转并平移后,只有满足下式的候选可以进入下一阶段:
distance(circleCenter, mapCenter) + circleRadius <= mapRadius - boundaryMargin
本轮边界余量为 30 米。示例中有 55 组候选因至少一个占地圆越界被淘汰。
随后,每个候选与已经锁定的 POI 逐圆比较。两个圆之间至少需要满足:
distance(ci, cj) >= radius_i + radius_j + categoryClearance
其中 categoryClearance 由 POI 类型组合决定,当前测试使用 24、18、12、6 米等分级间距。示例中又有 126 组候选因圆形占地冲突被排除。Rectangle 的旋转变换已经保留,但在精确 OBB 检测完成前,本文不把它计入“已验证的逐组件精确碰撞”。

对剩余合法候选的评分主要用于稳定布局质量,包括邻近空余、边界距离、由 Seed 派生的轻微确定性扰动和目标半径偏差。最终选择并锁定一组位置后,后续 POI 只能把它当作既有障碍,不能反过来修改前面已经确定的结果。候选排序、平局裁决和 POI 锁定顺序也属于算法定义;其中任何一项变化,即使 Seed 相同,也可能得到另一份布局。
当前方案先解决两件事:同一 Seed 可以稳定复现,布局问题也能在 Web 回放里定位。候选不足、边界过紧、类别间距不合适或评分偏置,都会落到明确的阶段。它只是工程基线,后面细化玩法时,还要把任务拓扑、区域语义、地形坡度、资源节奏和敌方势力分布一起纳入裁决。
五、道路连接 POI 的 Entry,而不是 POI 中心
POI 放好以后,道路不能简单连接两个中心点。真实 Cell 通常在特定边缘定义一个或多个 Entry,每个 Entry 带有本地位置和入口朝向,并通过内部 Spline 延伸到据点内部的 stop 点。
在当前重建中,道路接入被组织成两段:区域道路负责到达 Entry;Cell 内部 Spline 负责从 Entry 延伸到建筑空间。POI 的位置和朝向确定后,Entry 与 Spline 一起变换到世界坐标,区域路由才能选择正确的接入口。

如果直接连 POI 中心,道路很容易穿过建筑、岩体或围墙,也会绕开资产已经设计好的入口坡道。改用 Entry 后,区域道路只负责到达入口,进入 Cell 之后的最后一段交给资产自带的 Spline。
我们把一组解包的 Entry/Spline 与 UE 重建 Cell 放进同一坐标系做了对照。示例 Cell 包含两条 Spline 和四个端点:两处 connection 面向 Cell 外部,两处 stop 位于 Cell 内部。顶视端点与 UE Cell 中的建筑空间能够对应,支持将这组 Entry/Spline 数据作为当前重建的道路接口继续验证。它证明了空间关系具有作为程序输入的价值,但尚不能单独证明 HD2 原版区域道路采用了相同的连接和路由流程。


区域道路本身仍是重建方案。工程流程先生成连接主任务与撤离点的 Region 主干,再根据局部邻接关系建立候选拓扑,选择各 Cell 的 Entry,通过代价场求路,并尽量复用相近路段。Cell 内部 Spline 属于解包证据;区域主干、代价路由和道路合并不应描述成已确认的 HD2 原始算法。
| 道路相关信息 | 证据等级 | 当前判断 |
|---|---|---|
| Entry/Spline 的本地坐标、方向与 connection/stop 关系 | 解包或资产重建事实 | 可作为 Cell 内部空间接口继续使用 |
| 端点与 UE Cell 建筑空间的对应 | 工程验证 | 证明坐标变换和空间关系可用 |
| Region 主干、代价场、支路合并与接入策略 | 当前重建 | 用于完成可检查的区域道路闭环 |
| HD2 原版道路选择器、合并与路由流程 | 未确认 | 需要运行时实现或更直接的数据证据 |
当 25 个 POI 全部锁定后,工具可以把任务关系、Region 主干、汇流支路和 Cell 内部 Spline 叠加到同一张图上。此时检查的不只是“所有图标都出现了”,还包括主任务与撤离路径是否连通、道路是否从正确 Entry 进入,以及 Cell 内部最后一段是否与区域道路连续。

六、自然地形先形成连续底座,POI 与道路随后叠加
关卡布局解决的是人工内容在世界中的组织,自然地形解决的是它们落地之前,这个世界本身是什么形状。
目前完成度较高的是 Desert_Dune 和 Icy_Glaciers。它们已经能在 Web 中以固定 Seed 生成完整圆形区域,并保留各自的宏观地貌差异;其他地貌仍在迭代。这些结果用于验证地形恢复与工具链,不代表最终材质、植被或关卡美术已经完成。

Desert_Dune 的实验很快暴露了一个问题:只做基础噪声再叠几个 Stamp,得到的是零散鼓包,不是连续地貌。结合解包字段和当前结果,我们暂时把自然地形拆成下面十个阶段。部分阶段有直接数据依据,具体的空间求值和合成函数仍然是工程重建:
- Region 配置决定入口、范围、权重和可用配方;
- SubRegion 所有权划分不同空间区域;
- HeightGroups 建立区域之间的高低关系;
- CornerHeights 为连续插值提供边界条件;
- 边界连续化消除离散分区硬边;
- 宽尺度支撑先形成大块可玩底座;
- 中尺度形态补充肩部与连续起伏;
- 局部残差只在相应支撑域内增加低幅细节;
- StampGroup 与 StampInfo 在父级范围中组织局部构造;
- 各层合成自然高度场。

这里有一条硬规则:前一层缺失的空间关系,不能指望后一层补回来。Region/SubRegion 没有形成连续骨架,多加 Stamp 只会多出一批散落鼓包;缺少宽尺度支撑,中尺度噪声会把整张图切碎;自然层没做好,也不能拿 POI 平台、道路压平或运行时形变遮过去。
工程里用下面的分层关系约束自然地形和后续人工修改:
Hnatural = HRegion/SubRegion
+ ΔHbroad
+ ΔHshoulder
+ ΔHresidual
+ ΔHnaturalStamp
Hfinal = Hnatural
+ ΔH_POI
+ ΔH_road
+ ΔH_runtime
这不是从 HD2 中解出的原始公式,只是工程上的职责划分:自然地形、POI 落地、道路修形和运行时破坏各自记录、各自验证、各自同步。
公式中的各项也不处于同一完成状态:Hnatural 的阶段职责已建立,但内部既包含解包事实,也包含受事实约束的重建;ΔH_POI 在既有 Runtime/DS Gameplay Stamp 基线中已经实现,新 25 POI 组合仍待逐项接入;ΔH_road 目前是预留职责,本轮道路结果不能证明已经完成高度修形;ΔH_runtime 表示独立的运行时形变层,不属于本文的完成项。
自然地形链路可以进一步按证据分成三层:D 表示解包或直接资产事实,R 表示受这些事实约束的当前重建,U 表示原版运行时仍未知。
| 环节 | D:直接事实 | R:当前重建 | U:仍未知 |
|---|---|---|---|
| Region / SubRegion | 配置关系、范围与引用 | 连续所有权和区域骨架 | 原版完整选择与调度流程 |
| HeightGroups / CornerHeights | 字段与层级关系 | 高低关系、边界插值和连续化 | 原版求值次序与精确函数 |
| StampGroup / StampInfo | 父子引用、Circle/Rectangle 支持组件 | 支持域、falloff、grounding 与高度代理 | 原版高度贴片和混合函数 |
| POI / 道路叠加 | Cell 占地、Entry/Spline 空间数据 | POI 平台与区域道路接口 | 原版地形适配和道路修形流程 |
七、StampInfo 提供几何支持,高度形态仍需要谨慎重建
解包得到的 StampInfo 可以包含 Circle、Rectangle 等二维支持组件。它们提供位置、尺寸、旋转与重叠关系,能够确认一个 Stamp 由哪些局部范围组合而成,却不等于已经得到原始高度纹理。
为此,Web 工具分成两个入口:Stamp 浏览器用于查看 2416 条有效 Stamp 配置记录的组件组合——这不等于 2416 张原始高度贴片;高度画廊则把这些二维组件解释成连续支撑域,再使用 falloff、平顶、肩部和 grounding 规则生成可叠加的高度代理。

这个代理主要回答三个工程问题:组件能否形成连续轮廓,父子 Stamp 是否按配置范围正确组织,以及融合后的局部增量是否只影响允许的支撑区域。它不能证明 HD2 原版使用了同样的剖面函数,更不能把 Circle 或 Rectangle 直接称为原始高度图。
在 Desert_Dune 中,主 Stamp 先依附已经完成的支持域,经过 grounding 消除悬浮或硬切,再与子 Stamp 组成局部簇。短脊、肩部残块和微型构造只贡献很低的高度增量,单独看几乎不可见,但它们共同改变局部轮廓和坡面节奏。

这种做法保留了一个重要判断:Stamp 用来增加有组织的局部形态,不负责重做整张地图的宏观地形。后续若找到真实高度贴片或更直接的运行时所有权证据,可以替换高度代理,而不需要推翻 Region/SubRegion、父子范围和阶段验收结构。
八、Web、UE、运行时与 DS 各自证明什么
四个环境看到相似画面,并不表示它们承担相同的验证职责。
| 环境 | 主要用途 | 当前能证明的内容 | 不能单独证明的内容 |
|---|---|---|---|
| Web | 快速拆解与阶段回放 | 配置关系、固定 Seed、候选过滤、空间几何、地形分层是否按预期执行 | UE 资产生命周期、真实碰撞、网络一致性 |
| UE 编辑器 | 资产与空间对照 | Cell、Entry、Spline、Landscape 和世界坐标是否匹配,可否人工检查与继续编辑 | 打包运行时和 DS 的会话行为 |
| UE 运行时 | 真实使用路径 | 地形、POI 和局部改变能否在运行时创建并进入玩法查询 | 多客户端是否进入同一结果 |
| Dedicated Server | 权威会话 | 打包服务器能否裁决输入、生成权威数据并驱动客户端一致进入 | 美术形态是否达到最终质量 |
这也是为什么验证流程要保留四个入口。Web 的截图不能替代引擎中的 Cell 对照,客户端画面也不能替代服务器摘要。反过来,DS 得到一致摘要只能说明数据相同,不能说明 POI 节奏或地貌形态合理。
还需要把既有 Runtime/DS 基线与本轮新增布局分开看。上一篇已经验证了权威 LayoutData、Gameplay Stamp 顺序、LayoutDigest、256 个 Tile 摘要以及 DS/客户端进程级一致性;那次会话使用的是 18 个 Gameplay Stamps。本文的 25 POI 与新区域道路建立在这条基础链上,但尚未形成同等粒度的端到端摘要证据。
| 数据或阶段 | 既有 Runtime/DS 基线 | 本轮 25 POI / 道路状态 | 可用于验收的证据 |
|---|---|---|---|
| Session、Recipe、Final Seed | 已接入权威会话 | 复用同类输入边界 | 版本、RecipeDigest、Final Seed |
| LayoutData 与 Gameplay Stamp | 已实现;示例会话为 18 个 Gameplay Stamps | 新 POI 清单尚未逐项接入 | Stamp ID、位置、顺序与 LayoutDigest |
| Field / Tile | 已验证 DS 与客户端 256 Tile 摘要一致 | 可复用,但需对新组合重跑 | Tile digest 全量匹配且无 FAIL |
| 新 25 POI ID、位置与朝向 | 不属于上一轮证据 | Web 固定 Seed 可重复,UE 正在做空间数据接入验证 | 25 项逐项摘要与 UE 生成记录待补 |
| 新区域道路拓扑 | 不属于上一轮证据 | Web 重建完成,Entry 空间接口已对照 | 路段、端点、连接关系的 Runtime/DS 摘要待补 |
这里所说的“生产闭环”,只是数据职责、工具入口和验证路径已经接通,不代表新增布局完成了网络终验。新布局要标记为 Runtime/DS 完成,服务器还得输出 POI ID、变换、道路端点和连接关系摘要,客户端再逐项确认;只看两边画面相同还不够。
在既有冻结 Runtime/DS 基线中,打包 DS 的地形生成时间在 10 秒内。这个数字不包含本轮新 25 POI 与区域道路的端到端终验;新布局接入后仍需重新拆分地形生成、布局、道路、Cell、碰撞和摘要耗时。现有数据可支持多人链路的功能验证,但还没有到性能定稿阶段。
九、下一阶段要补什么
现在策划、美术和程序已经可以围绕同一组 Seed 讨论问题。后面还有四块工作,而且每一块都需要固定的验收条件。
玩法与 POI 语义
把任务拓扑、区域主题、难度、资源、阵营、主支线节奏和道路关系纳入选择与评分,同时继续寻找 HD2 运行时选择器的直接证据。下一阶段至少用 100 个固定 Seed 统计任务拓扑完整率、关键 POI 分布和道路连通率。
美术与自然地貌
继续恢复其他 biome,并补齐材质、植被、道路表现、POI 地表融合与更可信的 Stamp 高度资产。验收使用一组固定 Seed,对比近景、远景和多 biome 结果,分别检查形态连续性、材质衔接和人工结构落地。
服务器与网络
拆分 DS 生成预算、权威碰撞、布局与道路摘要、重连、修复和超时流程。验收需要同时记录服务器耗时、客户端摘要匹配率、重连后状态恢复以及修复路径的成功与失败结果。
客户端与场景性能
控制 Actor 数量、Draw Call、材质复杂度、HLOD、碰撞、流送、查询、内存、加载和帧时间。对比表至少包含固定镜头 FPS、场景对象数、内存峰值、流送峰值与进入可玩状态的时间,避免只给一个总耗时。
结语
这一轮建立了配置、布局、道路、自然地形和引擎验证之间的数据接口。既有 Runtime/DS 基线已通过独立验证;新增 25 POI 与区域道路仍需完成运行时及联机验收,不能称为同一条新整链已接通。
Cell 不再只是地图上的图标,而是带有真实占地、朝向、Entry 和内部 Spline 的空间资产;道路不再默认连接中心,而是进入资产设计好的接入口;自然地形也不再由后层 Stamp 或人工修形代替,而是先由 Region/SubRegion 建立连续底座,再逐层增加局部结构。
但边界也很明确:POI 选择与区域道路还是工程重建,自然 Stamp 高度仍是受解包几何约束的代理,新 25 POI 组合也没有完成 Runtime/DS 逐项摘要。以后替换未确认算法时,应该只动对应模块,保留已经接通的数据结构、生产工具和多人验证链。
下一步,我们要让同一个 Seed 不只生成一致的地图,还能生成一张真正可制作、可验证、可玩的关卡。
AI 协作复盘
写作时使用了项目 PPT、解包配置、Web 原型和 UE/DS 验证记录。AI 参与了结构整理、术语统一和证据边界检查;Cell、道路端点、地貌阶段和运行时结果仍以工程数据与引擎截图为准。复核时,我们把新 25 POI 布局和既有 Runtime/DS 基线拆开,并保留了几个未完成项:Rectangle 精确碰撞、原版区域道路算法和自然 Stamp 高度函数。
联系方式
邮箱:30260955@qq.com
微信:traceplus
《从多人联机到关卡生产:POI 布局、道路接口与自然地貌重建》有1条评论