技术美术 · 程序化内容生成

WordsToWorlds

AIPCG · 文本驱动的 UE 场景生成工具

在 UE 编辑器面板写一句场景描述,生成地形分区、建筑布局与植被, 输出可继续用 PCG 图表调整的场景。大模型负责理解空间意图, Python 完成几何规划与质量检查,UE PCG 负责场景装配。

UE 5.8PCG 图表C++ / Slate 编辑器插件 Python 几何管线LLM 结构化输出 编辑器 MCPHoudini SOP / VEX
河畔市集 45° 鸟瞰 · 原神风格化封面
4个
完整场景
从提示词到可保存的 UE 关卡
65栋
建筑独立几何审计
越界 / 重叠 / 净距 / 保护空间侵入 均为 0
7张表
DataTable 驱动
地形 · 建筑 · 植被三张 PCG 图
1024²
四色 Mask
对应 256 m × 256 m 地块
项目速览
PROJECT OVERVIEW

一句话架构

UE 编辑器面板(C++ / Slate)启动外部 Python 进程;Python 先调用模型得到 scene.json 与 layout.json, 再完成栅格化、建筑规划与地块修整并导出 CSV;最后通过编辑器内置 MCP 服务导入 DataTable、复制模板地图、执行三张 PCG 图并保存关卡。

工具边界

使用入口UE 插件面板:多行提示词框、生成世界按钮、百分比进度与结果提示
输入文字描述;显式指定时使用鸟瞰参考图;UE 中已有的建筑资产及其实测 Bounds
场地规格256 m × 256 m,以 1024 × 1024 像素表达道路、建筑用地、绿地与水体
中间数据scene.json、layout.json、四色 Mask、建筑 Transform、地形轮廓 CSV
输出地形与建筑 DataTable、分层地形网格、建筑实例、植被、完整生成记录
调整方式改布局输入、改资产表、改 PCG 图表设置,再重新生成对应内容
适用范围编辑器内的平面地块与村落生成;地形为二维轮廓加分层挤出

模型与代码的分工

模型只处理语义,数值全部交给代码。

模型负责

  • 河流走向与出入口
  • 组团关系与主次
  • 道路组织与串联方式

代码负责

  • 曲线构造与栅格化
  • 真实资产尺寸与落位
  • 碰撞、净距与容量检查
  • 坐标、轴向与 Pivot 转换

管线重点处理的三个工程问题

跨工具的数据一致性

资产尺寸、Pivot、单位与轴向纳入同一套变换约定;规划图与 UE 实例消费同一份最终 CSV,避免预览与实际落位不一致。

生成结果的可检查性

在模型输出、建筑规划与 UE 导入之间保留互相独立的检查,可分别定位布局问题、几何问题与引擎装配问题。

过程的可追溯性

保留请求、各轮候选布局、模型配置、调用回执、输入哈希与检查结果,能复原某一次生成用了什么输入、产出了什么。

我在项目中承担的部分

  • 整体管线设计与阶段划分,以及跨工具的数据协议定义
  • Python 几何管线:栅格化、曲线与廊道构造、地块修整、坐标与 Pivot 转换
  • 建筑规划算法:候选生成、加权贪心选择与独立几何审计
  • UE 侧 PCG 图表设计:地形分层挤出、建筑实例化、植被散布
  • C++ / Slate 编辑器面板与子进程调度,以及 MCP 导入链路
  • 模型接入:输出 Schema 约定、检查反馈重试、运行回执与质量报告
AIPCG · 技术作品集02
生成管线
PIPELINE

九个阶段,每一步都有明确的输入与产物。实线为主数据流,右侧为该阶段的配置来源或回执。

01
UE 编辑器面板与 C++ 入口

Slate 多行提示词框 → 写入请求目录 → CreateProc 启动外部 Python;编辑器 Tick 轮询进度与结果文件。

02
Python 编排

读取提示词模板、输出 Schema 与运行配置;安排模型调用、候选检查、数据准备与 UE 导入,并持续写出进度与 manifest。

03
模型调用 · 两次主要请求

先把一句话补全为空间描述,再生成几何布局;通过 --output-schema 约束返回格式,默认 gpt-6-sol / 推理强度 medium。

04
结构化模型结果

scene.json:水体、组团、道路与绿地的空间描述。layout.json:组团多边形、道路控制点与全宽、河流中心线与左右半宽。

05
几何检查与栅格绘制

平滑曲线、变宽廊道、自交与容量检查;渲染 1024 × 1024 四色 Mask。检查不通过则把错误与上一版几何回传模型重试。

06
原尺寸建筑规划

建设域 + 道路引导 + 资产实测 Bounds → 预留院落与接入通道 → 生成候选 → 加权贪心落位 → 导出建筑 CSV 与预留空间。

07
修整地块与 PCG 数据准备

保护建筑足迹、院落、通道与容量见证,按实际落位修整建设域边界;提取轮廓与孔洞、平滑共享边界,导出七张输入 CSV。

08
通过编辑器 MCP 导入 UE

导入 DataTable 并核对行数,复制模板地图,回读 PCG 图参数,依次执行地形 / 建筑 / 植被三张图。

09
保存关卡与运行记录

保存地图,写出导入报告;重新加载地图后按固定 45° 相机截图,核对实例数量与图执行结果。

界面反馈

面板按 0.25 s 读取 progress.json 的百分比;result.json 状态为关卡就绪才算成功,各阶段耗时另存日志。

调用配置与约束

运行配置 + 提示词文档 + 输出 Schema 三者共同约束模型;布局候选默认最多 2 次,可配 1 至 5 次。

本次运行证据

manifest 保留各轮候选、调用回执、输入与图像哈希、几何审计、导入报告与产物路径。

AIPCG · 技术作品集03
分层架构与职责
ARCHITECTURE
层组件职责
交互AIPCGEditor
Editor 模块 / Slate
面板 UI、启动编辑器 MCP 服务、启动与监控 Python 子进程、轮询进度与结果
语义模型 CLI
非交互模式
描述补全、结构化布局输出、候选修正,以及可选的视觉审核
几何Python 管线 校验、栅格化、容量检查、建筑规划、地块修整、坐标转换、CSV 导出
引擎桥接MCP 客户端与导入器 通过编辑器 Toolset 导入表、管理地图、回读参数、执行 PCG 图
装配三张 PCG 图 地形分层挤出、建筑实例化、植被散布与密度筛选
数据结构GeometryMetadata
Runtime 模块
以 FTableRowBase 派生结构体定义地形轮廓行与建筑 Transform 行

C++ 侧:交互与后台任务分工

A
按钮回调写入请求

生成请求目录,写入提示词文件,禁用按钮避免重复提交。

B
启动子进程

用引擎自带 python.exe 启动管线,附带结果、进度与耗时文件路径及 MCP 地址。

C
Tick 读取状态

按固定间隔读取进度与结果文件,更新百分比与状态文本。

D
耗时计算全在外部进程

编辑器主线程不承担几何计算,面板保持可响应。

启动前检查:解释器与入口脚本是否存在、编辑器 MCP 服务是否在运行(未运行则自动启动并取实际端口)。

引擎桥接:MCP 导入步骤

1校验 manifest 状态,拒绝重复导入
2导入七张 DataTable 并逐张核对行数
3按高度阈值筛出高大植被,生成植被资产表
4复制模板地图为本次关卡并加载
5记录模板 PCG 体的变换,再删除模板体
6依次生成实例 → 回读参数核对 → 执行三张图
7按地表高度与实时 Mesh Bounds 回写建筑 Z
8保存关卡,状态改为关卡就绪

为什么用 MCP 而不是编辑器内 Python

规划计算运行在外部解释器中,不受编辑器 Python 环境约束,也不阻塞主线程; 所有引擎副作用通过工具调用完成,便于逐步核对与写入报告。

进度映射:外部计算如何反映为面板百分比

5选参考图
›
25描述补全
›
55布局生成
›
75四色图渲染
›
86建筑落位
›
88PCG 输入就绪
›
90地图加载
›
98三图执行
›
100关卡保存

进度单调不减;表导入阶段多张表共享同一区间,避免百分比回退。

AIPCG · 技术作品集04
数据契约
DATA CONTRACTS

四色编码与合成优先级

颜色是数据编码,不是展示材质。四种基础颜色互斥,合成时按优先级覆盖,所以源几何必须单独检查。

颜色含义优先级说明
蓝水体1河流中心线加左右半宽,或闭合水面
黄建筑组团2可建设域,不等于已有建筑
红道路3控制点加全宽
绿绿地4底色,承载植被散布

另有支路与中心绿地两个叠加通道,覆盖在建设用地底面上,用不同高度表达,不占用基础四色。

布局接口的关键区分

道路与河流的宽度语义不同,必须分开定义,否则下游会误用。

组团
points 闭合轮廓
道路
points + widths(全宽)
河流
中心线 + left_widths / right_widths(左右半宽)
水面
闭合多边形,可在画布边开放

字段、类型与取值范围由 JSON Schema 约束;自交、面积、容量与真实资产落位由代码检查。

坐标、轴向与 Pivot

1 px   = 25600 cm / 1024 = 25 cm
WorldX = (PixelX - 512) × 25
WorldY = (PixelY - 512) × 25      图像向右 / 向下 = 世界 +X / +Y

建筑落位   World = 规划点 - R(yaw) · BoundsCenter.xy
初始高度   WorldZ = -BoundsMin.Z
导入后回写 Position.Z 以地表顶面与实时 Mesh Bounds 为基准

规划中的建筑落点代表 Bounds 中心,而 UE 实例使用 资产 Pivot。 写入实例前减去旋转后的局部 BoundsCenter,才能让规划图与引擎落位一致。 坐标适配器同时处理历史 Y 轴约定与轮廓绕序,建筑 yaw、足迹逆算和规划图沿用同一转换规则。

接地不靠固定偏移收尾:导入完成后按地形顶面与实时 Mesh Bounds 再回写一次 Z。 本批四个场景共 65 行建筑,全部只有 Z 发生变化,统一下移 80 cm 后贴合 20 cm 的地形顶面。

交接数据与工程约定

数据关键字段
资产快照Mesh、BoundsMin / Max / Size / Center、Pivot 相对 Bounds 中心的偏移
建筑 CSVBuildingIndex、AssetKey、Mesh、PixelX / Y、WorldX / Y / Z、Yaw、Scale
地形轮廓表Layer、RingId、HoleIndex(外环 −1)、VertexIndex、Position
manifest输入与产物路径、哈希、运行配置、各轮候选、检查项、耗时、状态

同源原则

规划预览图由最终建筑 CSV 重绘,UE 导入同一批 CSV。 两边不各算一次,避免出现“图上没问题、场景里重叠”的情况。

AIPCG · 技术作品集05
地形几何与 PCG 装配
TERRAIN & PCG

从语义分区到可采样表面

四色 Mask语义分区
›
轮廓点边界追踪
›
闭合环与孔洞RingId / HoleIndex
›
Polygon 2D带洞多边形
›
分层网格挤出与顶面

导入时按 RingId / HoleIndex 区分外环与孔洞, 按 VertexIndex 恢复顶点顺序。相邻层的公共边界先做同步平滑, 再按层分别挤出,避免出现缝隙或穿插。

地形图的六个通道

通道Z 偏移挤出顶面材质取向
道路02020石板 / 碎石
建筑用地02020草地 A1
绿地−10011515草地 A
水体−1001−99河流水体
支路03030石板 / 碎石
中心绿地04040草地 A
单位 cm。支路与中心绿地为叠加通道,高出建设用地顶面,用来表达组团内部的通道与院落。

图表分工

地形 · 分层轮廓表 → 按环分组排序 → 带洞多边形 → 挤出子图。可调区域数据、高度与材质。

建筑 · Mesh 与最终 Transform → 直接实例化。图里不做任何规划,点数据自带位置、旋转与缩放。

植被 · 区域表 → 带洞多边形 → 表面采样 → 团簇噪声 → 密度筛选 → 随机资产与随机变换。

植被散布的参数口径

外围绿地密度0.80团簇强度0.65
缩放区间0.4 – 1.0中心绿地密度0.20
宅间树密度0.08宅间树净距6
冠幅半径290 cm接地基准20 cm

宅间树按建筑足迹与冠幅生成排除区,避免树冠穿进屋顶;高大植被按 Bounds 高度阈值单独成表。

排查方式:按数据流逐层定位

现象优先核对
规划图与 UE 出现镜像或偏移像素到世界换算、相机方向、yaw 与 Pivot 补偿
图上可放置,UE 中重叠资产 Bounds 快照、最终 CSV、实例 Transform 与连续几何审计
地形孔洞或轮廓连接异常RingId / HoleIndex 分组、VertexIndex 顺序与闭合环
生成提前结束manifest 中的调用返回码、候选布局、几何错误与重试次数
AIPCG · 技术作品集06
建筑规划算法
BUILDING LAYOUT

方法为 语义槽位生成 + 按尺寸配比加权的约束贪心放置。 把尺寸、临街、院落与占用关系拆成可单独检查的规则,再用独立几何审计复核结果。 建筑全部使用资产原始尺寸,scale = 1.0。

01
识别组团与内部深度

对黄色建设域做四邻域连通域标记得到组团,从边界起多源 BFS 计算内部深度,取较深点作为院落中心。

02
预留院落与接入通道

在组团内部留出院落,并开出通向最近道路的接入通道;预留空间先写入占用掩码,建筑候选必须避让。

03
资产分档与候选池

按资产 XY 面积等数量三分位分成小 / 中 / 大三档,每档取面积接近该档中位数的代表资产。

04
生成语义槽位

沿临街边界与院落四周生成槽位,继承引导方向;槽位与候选资产组合后计算建筑中心与旋转角。

05
加权贪心落位

按“已放数量 / 目标权重”选进度最小的档;档内临街优先、重复次数少的资产优先;接受第一个不冲突的候选并更新占用。

06
导出后独立复核

从资产 Bounds 与最终 Transform 重建足迹,用 SAT 检查相交、用点到线段距离检查净距,与放置时的栅格判定互相独立。

档位调度

目标权重  小 : 中 : 大 = 1 : 2.5 : 1
进度 = 已放置数量 / 该档权重
每轮取进度最小且候选池非空的一档

这是调度偏好,不是硬约束:某档没有可行候选时,调度无法创造新位置。

占用与间距

放置用位掩码做栅格占用判定,建筑每侧预留 50 cm, 对应相邻建筑至少 100 cm 净距。

离散精度下的判定可能与连续几何有差异,所以旋转后的最终变换必须再做一次连续复核。

可复算范围

默认随机种子 17。冻结布局输入、资产快照、种子与代码版本后, 算法阶段可复算;模型重新生成的布局单独记录。

本批四个场景的求解规模

场景组团槽位 初始候选 小 / 中 / 大落位 实际档位 小 / 中 / 大配比总偏差
河畔市集4358733 / 413 / 135165 / 9 / 29.7 pp
海湾渔村4300504 / 308 / 42145 / 8 / 115.1 pp
温泉宿场4257437 / 215 / 13157 / 7 / 124.4 pp
运河商港5350814 / 607 / 110207 / 10 / 312.8 pp
配比总偏差为三档实际占比与目标占比的差值绝对值之和。大档候选最少的温泉宿场偏差最大, 符合“候选池耗尽即终止”的预期:调度只能在现有候选里挑,不能创造新位置。

已知的算法局限

贪心只检查当前选择是否可行,不比较后续组合收益:若一个沿街段先放下一栋大建筑, 之后发现换成两栋小建筑更合适,程序不会撤回。当前没有全局评分函数,也没有回溯与交换机制; 早期选择可能把后续空间切碎。代价是可解释性与检查成本都很低,而且每一步都能留下审计记录。

AIPCG · 技术作品集07
几何算法与实现取向
GEOMETRY
算法解决的问题实现时关注的边界
向心 Catmull–Rom把道路与河流控制点连成平滑中心线控制点间距、转弯半径与曲率;长直段会被判为不自然
Chaikin 角切割平滑组团闭合轮廓平滑后的面积与可建容量会变化,需要重新测量
扫描线填充 + 奇偶规则把多边形转换为地形 Mask外环、孔洞与边界像素的归属
四邻域连通域标记识别独立建筑组团窄连接会把两片地连成一组,或被拆成两组
多源 BFS计算地块内部深度,辅助安排院落得到的是栅格路径距离,不是欧氏距离
变宽廊道构造从中心线与左右半宽生成河岸宽度突变、自交、急弯与画布边界开口
共享边界 Laplacian 平滑同步移动相邻地形层的公共边界限制总位移,平滑后重新测面积与容量
分离轴定理(SAT)复核旋转矩形足迹是否相交连续几何判定,不受栅格精度影响
点到线段距离测量建筑之间的实际净距与相交判定互补,用来验证 100 cm 要求
位掩码占用候选冲突与越界的快速判定离散精度;需要连续几何二次确认

共享边界平滑的参数

只移动两层之间的公共边界
迭代 16 次 · 强度 0.5
单点总位移上限 50 cm

相邻层各自平滑会产生缝隙或重叠,所以把公共边界当成一条共享折线统一处理, 再把结果写回两层,并限制位移避免破坏已验证的容量。

实现取向:标准库优先

固定四色地形与建筑占用用 bytearray、整数位运算与标准库实现, 不引入 NumPy、OpenCV 或 Shapely。

动机是部署与调试便利:引擎自带的解释器无需额外装包即可运行。 代价是尚未与成熟几何库做系统性能对照,若后续迁到大世界分区,这一取舍需要重新评估。

几何检查如何落在一条链上

控制点模型输出
›
平滑曲线Catmull–Rom / Chaikin
›
自交与宽度检查廊道合法性
›
栅格化扫描线填充
›
容量试排三栋原尺寸建筑
›
落位与审计位掩码 + SAT

每一步都把“看起来对”换成“能测量”:曲线是否过直有偏差阈值,组团是否够用有试排见证, 建筑是否冲突有净距数值。

AIPCG · 技术作品集08
质量门禁与失败处理
VALIDATION
检查层检查内容仍需关注
布局源几何 自交、区域冲突、廊道宽度变化下限、长直段偏差、锚点间距、水体面积、组团容量 最终四色图会按合成优先级覆盖,源几何必须单独检查
容量试排 每个组团能否放下三栋原尺寸小建筑(0° / 90° 有界搜索,每侧留 50 cm),并保留落位见证 正式规划还要预留院落与通道,实际栋数会少于试排上限
候选占用 离散位掩码判定越界、与已放建筑冲突、侵入预留空间 旋转后的最终变换需要连续几何复核
CSV 独立审计 从资产 Bounds 与最终 Transform 重建二维足迹,SAT 检查相交,点到线段距离检查净距 门向、入口可达性与三维接地需要另行验证
UE 回读 七张表行数核对、PCG 图参数回读、128 × 128 采样检查覆盖与缝隙、保存后重新加载再截图核对实例数 最终视觉质量仍需结合截图人工判断

布局阶段的检查反馈循环

1
模型返回候选布局

按输出 Schema 返回组团、道路与水体几何。

2
几何修整

先尝试自动修复:去除重复锚点、在小位移范围内打弯过直的廊道。

3
渲染与检查

栅格化并执行水体面积、组团容量与面积占比检查。

4a
通过:进入建筑规划

写出布局与审计文件,继续几何与引擎阶段。

4b
不通过:带错误重试

把上一版几何与具体错误写进下一轮指令;次数用尽则记录失败原因并结束。

模型调用本身失败(进程错误)不计入几何重试,会直接结束本次运行, 以便区分“调用失败”与“几何不合格”。

门槛数值

布局候选上限
默认 2 次,可配 1 – 5 次
组团面积上限
画布的 40%
组团容量
每组 ≥ 3 栋原尺寸小建筑
建筑净距
≥ 100 cm(每侧 50 cm)
道路与水岸退让
≥ 2 px
组团与画布边
≥ 40 px 退让
河流面积下限
默认 18%;闭合水面场景改用水面像素口径

完成状态分开记录

文件生成、几何通过、UE 回读与人工视觉认可是四件事。 当前默认运行在 preview 模式、视觉审核关闭, 因此可以产出完整关卡但仍标记为“未验收”,不把保存成功当成质量达标。

三个真实的检查命中案例

容量检查拒绝候选

运河商港第一轮候选中,沿河店铺组团过于狭长, 三栋原尺寸小建筑的有界搜索失败。

错误连同上一版几何回传后,第二轮加宽该组团并通过,最终落位 20 栋。 这条布局是模型两轮候选的结果。

几何自动修整

河畔市集的河流中心线出现长直段,采样点偏差约 1.8 px, 低于“自然河道”的阈值。

修整在锚点位移不超过 4 px 的范围内自动打弯,无需重新调用模型; 同一轮还清理了一条道路上的重复锚点。

硬失败路径

早期一次运行的两轮候选分别因“长直段偏差不足”与“锚点过密、缺少宽缓弯”被拒绝。

重试次数用尽后运行以失败结束,并保留两轮候选与各自原因, 可以直接定位是提示词约束不足还是检查过严。

这套门禁解决的实际问题

模型可以给出看起来合理的布局,但未必能放下真实尺寸的资产。 把“组团够不够用”变成一次带落位见证的试排,把“建筑有没有撞上”变成可测量的净距数值, 失败就能在布局阶段被拦住,而不是等到 UE 里看见穿模再回头找原因。

AIPCG · 技术作品集09
场景成果 01
RESULT · RIVERSIDE MARKET

河畔市集

riverside_market 4 组团 · 16 栋
河畔市集 45° 鸟瞰 · 原神风格化展示

原神风格化展示 · 基于 UE 45° 鸟瞰截图制作

四色 Mask
① 四色 Mask · 布局栅格化
修整后 Mask
② 修整后 · 按实际落位收边
建筑规划图
③ 规划图 · 由最终 CSV 重绘

空间意图

河流自左下进入、向东北斜穿场地,中段向南形成宽缓主弯,从右侧中上部流出。 北岸中央偏北为面积最大的市集组团,西北一片住宅,东北沿岸一片狭长码头仓储; 南岸东南一片较小的码头住宅。北岸东西向主街串联各组入口,市集向北有路通画布顶边, 南岸道路沿岸向东离开。外围连片林地,保留市集公共留白与连续临街肌理。

30.8%
最终组团占比
上限 40%
12.7%
水面像素占比
河流形态
141.5cm
最小净距
要求 ≥ 100 cm
37.0%
建筑足迹占建设用地
含间距环 41.6%
0
越界 / 重叠 / 净距不足 / 保护空间侵入
0
16 384 次采样中的缝隙与重叠
852
植被实例
地形网格 6 块
14 414
七张 DataTable 行数合计
AIPCG · 技术作品集10
场景成果 02
RESULT · COASTAL FISHING

海湾渔村

coastal_fishing 4 组团 · 14 栋
海湾渔村 45° 鸟瞰 · 原神风格化展示

原神风格化展示 · 基于 UE 45° 鸟瞰截图制作

四色 Mask
① 四色 Mask · 布局栅格化
修整后 Mask
② 修整后 · 按实际落位收边
建筑规划图
③ 规划图 · 由最终 CSV 重绘

空间意图

东侧为连续海湾水面,岸线自顶边中部向右下弧形延伸,形成向西凹入的大湾, 南段有一处岩石岬角向海突出。水体以闭合水面表达,在顶、右、底边保持开放,不画河流。 临湾中部为面积最大的渔市组团并保留开阔公共空间;西北与西侧中部各一片住宅, 南部岬角内侧一片小型渔屋。沿岸主路由北向南串联各组入口,另一条路从渔市西侧离开画布。

28.2%
最终组团占比
上限 40%
23.1%
水面像素占比
闭合海湾
201.3cm
最小净距
要求 ≥ 100 cm
29.6%
建筑足迹占建设用地
含间距环 33.5%
0
越界 / 重叠 / 净距不足 / 保护空间侵入
0
16 384 次采样中的缝隙与重叠
734
植被实例
地形网格 6 块
13 852
七张 DataTable 行数合计
AIPCG · 技术作品集11
场景成果 03
RESULT · HOT SPRING

温泉宿场

hot_spring 4 组团 · 15 栋
温泉宿场 45° 鸟瞰 · 原神风格化展示

原神风格化展示 · 基于 UE 45° 鸟瞰截图制作

四色 Mask
① 四色 Mask · 布局栅格化
修整后 Mask
② 修整后 · 按实际落位收边
建筑规划图
③ 规划图 · 由最终 CSV 重绘

空间意图

北部一条河流自左上进入、向东蜿蜒流经上部,从右侧中上部流出,两侧半宽在原方案基础上整体加宽。 中部偏南一条东西向宽主街贯穿画布。主街与河流之间为面积最大的旅店组团, 中部保留开阔的温泉公共庭院;主街南侧一大一小两片商铺,西南一片小民居。 各组沿主街展开,轮廓带肩部与凹湾,主次分明;外围为竹林与树林绿地。

28.2%
最终组团占比
上限 40%
6.5%
水面像素占比
加宽后的河流
123.2cm
最小净距
要求 ≥ 100 cm
30.0%
建筑足迹占建设用地
含间距环 34.1%
0
越界 / 重叠 / 净距不足 / 保护空间侵入
0
16 384 次采样中的缝隙与重叠
1 012
植被实例
地形网格 6 块
7 255
七张 DataTable 行数合计
AIPCG · 技术作品集12
场景成果 04
RESULT · CANAL PORT

运河商港

canal_port 5 组团 · 20 栋
运河商港 45° 鸟瞰 · 原神风格化展示

原神风格化展示 · 基于 UE 45° 鸟瞰截图制作

四色 Mask
① 四色 Mask · 布局栅格化
修整后 Mask
② 修整后 · 按实际落位收边
建筑规划图
③ 规划图 · 由最终 CSV 重绘

空间意图

顶边为横贯场地的港池,中右侧一条近直的人工运河向南伸至约四分之三处收头; 港池与运河盆地合为一个连续水面并保留人工水岸。运河西侧一条南北向石板主街自底边进入、 北端停在港池岸前;街西三片大小不同的商铺住宅,街与运河之间一片狭长沿河店铺, 东岸一片最大的仓储码头组团,东岸道路自南绕至其东侧。外围水田与林地归为绿地。

38.1%
最终组团占比
上限 40%
20.8%
水面像素占比
港池与运河
142.8cm
最小净距
要求 ≥ 100 cm
40.0%
建筑足迹占建设用地
含间距环 44.8%
0
越界 / 重叠 / 净距不足 / 保护空间侵入
0
16 384 次采样中的缝隙与重叠
643
植被实例
地形网格 6 块
6 410
七张 DataTable 行数合计

本场景的布局是模型两轮候选的结果:第一轮沿河店铺组团未通过三栋容量检查, 错误回传后第二轮加宽该组团并通过。它同时是四个场景中组团占比与足迹占比最高的一例。

AIPCG · 技术作品集13
成果汇总与验证口径
SUMMARY
场景组团建筑 组团占比水面占比最小净距 足迹占比含间距环 植被实例表行数
河畔市集41630.8%12.7%141.5 cm37.0%41.6%85214 414
海湾渔村41428.2%23.1%201.3 cm29.6%33.5%73413 852
温泉宿场41528.2%6.5%123.2 cm30.0%34.1%1 0127 255
运河商港52038.1%20.8%142.8 cm40.0%44.8%6436 410
合计 / 区间1765 28 – 38%6 – 23%≥ 123 cm 30 – 40%34 – 45%3 24141 931
组团占比为地块修整后的最终建设用地占画布比例,上限 40%;水面占比按四色 Mask 的蓝色像素统计; 足迹占比的分母为最终可见建设用地,含间距环一列额外计入每侧 50 cm 的预留。

四个场景一致通过的检查

  • 建筑越界、两两重叠、净距不足、保护空间侵入:各场景均为 0
  • 从 CSV 重建足迹与规划足迹的误差小于 1e−7 px,确认两边同源
  • 建筑长轴与引导方向的平均偏差为 0°,朝向完全跟随街道或院落
  • 每个组团的三栋容量试排全部通过,并保留落位见证
  • 地形覆盖采样 16 384 次,缝隙与重叠均为 0
  • 七张表行数逐张核对,PCG 图参数回读一致
  • 关卡保存后重新加载,实例数量与预期一致

尚未验证的部分

  • 门向与入口可达性:审计中标记为未验证
  • 语义角色(临街 / 院落)未做独立核对
  • 视觉审核默认关闭,运行状态为“未验收”
  • 三维接地已按地表回写,但坡地接触未纳入

关于可复现性

模型重新生成不保证得到相同布局,所以可复算范围从“冻结布局之后”开始。 本批四个场景即以最终布局为固定输入,重新执行了栅格化、建筑规划、地块修整、 数据导出与 UE 生成全过程,用来验证管线后段的稳定性。

一次生成留下的记录

输入提示词 · 参考图哈希
›
调用回执模型 · 推理强度 · 返回码 · 耗时
›
各轮候选布局 JSON 与拒绝原因
›
几何审计像素统计 · 容量见证 · 净距
›
导入报告表行数 · 图参数 · 接地回写
›
验证截图重新加载后的实例核对

任何一次生成都能回答三个问题:用了什么输入、哪一步被拒绝过、最终场景与规划是否同源。

AIPCG · 技术作品集14
开发历程
ITERATIONS

四个阶段的主线是把人工往返逐步换成可检查的数据交接。每一版都先打通链路,再收紧约定。

V1 · Houdini 结合 UE

阶段目标:跑通资产数据、空间规划与引擎实例之间的交接。

UE 资产表尺寸与 Pivot
›
CSV数据交接
›
Houdini地形与分布规划
›
布局 CSV回到 DataTable
›
UE 场景引擎组装

这一阶段必须先把数据协议说清楚:资产标识、位置、旋转、缩放、单位与坐标轴。 Houdini 默认米、Y 向上、右手坐标,UE 用厘米、Z 向上、左手坐标; 官方插件提供转换,但自定义 CSV 交接要自己实现并避免重复转换。

留下的资产

单位与轴向的转换约定、以真实 Bounds 参与规划的思路,被后续版本完整继承。 该路线保留为历史方案,正式入口已转为 Python 与 UE PCG。

V2 · 以 Python 与 PCG 替代 Houdini

阶段目标:把日常生成集中到 Python 与 UE PCG,减少工具之间的往返。

环节Python 的工作UE 的工作
地形解析语义区域、提取轮廓与孔洞、平滑边界、导出 CSV读表构造带洞多边形并生成分层网格
建筑用真实 Bounds 生成候选,计算位置 / 旋转 / 缩放按最终变换生成实例
植被提供可散布区域与通道数据区域采样、筛选并生成植被

同时带来的维护责任

轮廓、孔洞、共享边界与几何健壮性从此由项目代码负责, 不再依赖成熟工具的内部实现。好处是链路可控,代价是边界情况要自己兜住。

V3 · 接入图像与三维生成 API

阶段目标:打通从原画到 UE 单体资产的自动化流程。

原画生成确定风格与资产表现
›
视觉识别拆分整理单体资产输入
›
四视图 / 轴测图三维生成参考
›
图生模型API 自动上传与取回
›
导入 UE按标准尺寸缩放

这一阶段把图像生成、资产识别、三维生成与引擎导入串成一条数据链; 导入后的尺寸归一化,让新资产能按统一尺度参与后续场景组合。

与主线的关系

属于资产侧的并行探索。新生成资产要先通过单位、Pivot、朝向、材质与碰撞检查, 才能进入资产表与 PCG 流程。

V4 · 单 Agent 接入现有管线

阶段目标:由 Python 直接调度单个 Agent 执行具体任务,而不是让模型驱动整条流程。

任务输入输出与后续处理
描述补全一句场景提示词水体、组团、道路与绿地的空间描述
布局生成补全后的描述与布局规范多边形、控制点与宽度等几何数据
布局修正上一版几何与检查错误新候选,重新执行几何检查
视觉审核参考图与四色图(可选)空间关系反馈;当前默认关闭

关键取舍

模型只产出结构化数据,不生成代码、不直接操作引擎。 调度、检查与引擎副作用全部留在代码侧,失败点因此可定位、可复算。

AIPCG · 技术作品集15
工程取舍与后续方向
TRADE-OFFS & ROADMAP

当前的取舍

  • 先打通链路,再优化实现。优先让“文字输入 → 布局生成 → 几何规划 → UE 装配”整条路径可跑通、可检查,部分模块的接口与实现仍待整理。
  • 标准库优先于成熟几何库。换来零额外依赖的部署,代价是尚未与 NumPy、OpenCV、Shapely 做系统性能对照。
  • 可解释优先于最优解。贪心便于表达规则并保留审计记录,但候选顺序会影响后续可用空间。
  • 把不确定性圈在模型一侧。算法阶段可复算,模型阶段只保证记录完整,不保证结果一致。

明确的当前边界

  • 地形以二维轮廓与分层挤出为主,坡地与高度场尚未纳入
  • 视觉审核默认关闭,运行结果标记为未验收
  • 门向与入口可达性、语义角色尚无独立验证
  • 面板没有取消入口,关闭编辑器不会结束子进程
  • 导入失败不回滚已创建的表与关卡副本
  • 插件目录还不能单独拷走运行,仍依赖仓库内的提示词文档与模板地图

后续方向

融入美术工作流

支持美术手绘 Mask 直接指定道路、建筑用地、绿地与水体; 统一图层颜色、分辨率与世界坐标,支持锁定已确认区域、局部重生成与人工修改后继续生成。 模型只补未明确的空间关系,算法负责细化排布。

多 Agent 与视觉审核

把布局规划、工具执行与视觉审核拆成不同职责,共享同一份场景数据、修改记录与检查报告。 审核结合多角度截图与几何结果输出问题位置与修正建议,几何约束继续由代码复核。

大世界生成

从单块 256 m 场地扩展到分区生成:先规划全局道路、水系与区域关系,再按分区生成内容。 重点处理跨分区边界衔接、稳定区域标识、局部重生成与资源预算。

室内生成

从建筑外部排布延伸到室内:房间划分、门窗与通道连接、家具布置。 以房间关系和通行需求约束布局,检查碰撞、通行宽度、入口可达性与物体贴合。

沉淀为 PCG 功能模块

研究 PCG 的节点输入输出、属性传递与执行机制, 把 Mask 处理、区域划分、建筑落位与质量检查提炼为自定义节点或子图, 统一参数与调试信息;再按耗时分析决定哪些计算值得迁到 C++。

面向 UGC 的封装

把生成能力封装为可调用工具与参数化模板,围绕 “生成草案 → 人工编辑 → 局部修改 → 测试与回滚 → 交付”组织工作流, 让创作者能持续修改与复用生成结果,并明确资产依赖与性能预算。

这个项目验证了什么

结论一

把大模型限制在“输出结构化空间意图”这一件事上, 再用几何代码兜住全部数值约束,是目前更稳的分工方式。

结论二

生成质量的关键不在模型,而在能不能把“好看”翻译成可测量的检查项, 并让失败在尽量早的阶段被拦住。

结论三

跨工具链路的真正成本在数据协议:单位、轴向、Pivot 与绕序一旦定清楚, 后面的工具就可以替换。

AIPCG · 技术作品集16