调研范围:算法库、引擎内置方案、独立工具、AI 辅助生成
适用决策:2D 游戏/应用中的 Tilemap 自动生成方案选型
三条主路线
当前主流技术路线分三大方向:
-
约束传播类(WFC 及变体):以 Wave Function Collapse 为代表,通过样例学习约束规则自动生成视觉一致的 tilemap,是近年最受社区关注的方向,适合有样例地图、追求局部一致性的场景。
-
传统程序化生成(PCG):包括 BSP 分割、随机游走、噪声函数(Perlin/Simplex)、房间连接算法等,技术成熟、可控性强,是引擎内置方案的主流实现基础,适合工程化生产环境。
-
AI/ML 辅助生成:包括 GAN、扩散模型、强化学习等方向,处于学术探索阶段,少数工具已产品化,适合内容需求量极大且愿意投入训练成本的团队。
核心选型建议:
- 快速上手 + 风格一致 → WFC(fast-wfc 或引擎插件)
- 工程稳定 + 高可控 → Perlin Noise + BSP/房间算法(引擎原生)
- 编辑器辅助 + 团队协作 → LDtk + Auto-layer 规则
- 大规模内容生成研究 → PCGML 方向(学术)
一、约束传播类:WFC 及变体
技术原理
Wave Function Collapse(WFC)由 Maxim Gumin 于 2016 年提出,本质是一种约束传播 + 回溯搜索算法。输入一张样例 tilemap,算法自动提取相邻关系约束,再在新画布上逐格"坍缩"——每格从所有可能 tile 中选一个满足邻居约束的值,直到整张图确定。
核心优势:
- 无需手写规则,从样例自动学习
- 输出视觉上与样例风格高度一致
- 可保证局部邻接关系合法(无穿墙、无悬空)
核心缺陷:
- 可能出现矛盾(contradiction),需重试
- 全局结构控制弱(无法保证有入口/出口)
- 大地图生成速度较慢
主要项目对比
| 项目 | 语言 | Stars(约) | 许可证 | 特点 | 适用引擎 |
|---|---|---|---|---|---|
| mxgmn/WaveFunctionCollapse | C# | ~23k | MIT | 原版实现,含 Overlapping 和 Tiled 两种模式 | 任意(命令行) |
| fast-wfc | C++ | ~1.1k | MIT | 性能优化版,支持并行;适合嵌入 C++ 项目 | 任意 |
| godot-wfc | GDScript | ~300 | MIT | Godot 4 插件,直接操作 TileMapLayer | Godot 4 |
| unity-wave-function-collapse | C# | ~800 | MIT | Unity 集成,支持 3D Tile | Unity |
| wfc-rust(多个实现) | Rust | ~200-400 | MIT | 高性能,适合服务端生成 | 任意 |
| Tessera | C# | ~600 | MIT | Unity 插件,扩展了 WFC 支持约束自定义 | Unity |
| superpositioned | TypeScript | ~150 | MIT | 浏览器端 WFC,带可视化 demo | Web/JS |
WFC 变体与改进方向
| 变体 | 解决的问题 | 代表实现 |
|---|---|---|
| Constraint-augmented WFC | 加入全局约束(保证连通性) | BorisTheBrave 的多篇博客 + 参考实现 |
| Hierarchical WFC | 先生成大结构再细化 | 学术论文方向,暂无成熟库 |
| WFC + A* | 生成后用寻路验证可玩性 | 需自行组合 |
| Automatic Tiling(Auto-Tile) | 非约束传播,基于位掩码规则自动选 tile | RPG Maker、Godot Terrain、LDtk Auto-layer |
二、传统程序化生成(PCG)
核心算法类型
| 算法 | 原理 | 典型用途 | 优点 | 缺点 |
|---|---|---|---|---|
| Perlin/Simplex Noise | 连续随机函数生成高度图 | 地形/海拔/生物群系 | 平滑自然,速度极快 | 难以控制宏观结构 |
| BSP(二叉空间分割) | 递归分割空间生成房间 | 地下城、室内关卡 | 结构规整,无重叠 | 风格单一,走廊感强 |
| 随机游走(Drunkard’s Walk) | 随机方向掘进生成通道 | 洞穴、有机地形 | 风格有机,实现简单 | 不可预测,需大量后处理 |
| Cellular Automata | 生命游戏规则迭代平滑 | 洞穴地形、平滑地貌 | 视觉自然,易于理解 | 生成结果不确定,难以调控 |
| 房间+连廊(Room & Corridor) | 先放房间再连接通道 | RPG 地下城 | 可控性强,标准做法 | 需要额外的装饰逻辑 |
| Voronoi 分割 | 以随机种子点划分区域 | 地区划分、生物群系 | 视觉多样,可配合 Noise | 实现稍复杂 |
| L-System | 文法规则递归展开 | 植被、分形结构 | 视觉有层次感 | 调参复杂,学习成本高 |
主要库与框架对比
| 项目 | 语言 | Stars(约) | 定位 | 主要功能 |
|---|---|---|---|---|
| libtcod | C/C++/Python | ~1.5k | 经典 Roguelike 工具库 | BSP、随机游走、FOV、寻路 |
| rot.js | TypeScript | ~2.3k | 浏览器端 Roguelike 工具库 | 多种地图算法、随机数、FOV |
| gdungeon(Godot) | GDScript | ~500 | Godot 专用地下城生成 | BSP + 走廊连接 |
| dungeon-generator(npm) | JavaScript | ~200 | 轻量地下城生成 | 房间+连廊 |
| noise.js / open-simplex-noise | JavaScript | ~1k+ | Noise 函数库 | Simplex/Perlin 多维噪声 |
| FastNoiseLite | C/C#/多语言 | ~3k | 高性能 Noise 库 | 多种 Noise 类型,Unity/Godot 均有移植 |
| mapgen4 | C++ | ~700 | 岛屿地图生成 | Voronoi + 物理侵蚀模拟 |
引擎内置 PCG 能力
| 引擎 | 内置 Tilemap 生成支持 | 典型方案 |
|---|---|---|
| Godot 4 | TileMapLayer + Terrain 系统(Auto-tile) | 内置地形自动拼接;PCG 需脚本实现 |
| Unity | Tilemap + Rule Tile + Scriptable Tiles | Rule Tile 可做简单 Auto-tile;复杂 PCG 靠插件 |
| GameMaker | 内置 tilemap 函数 | 需手动实现算法 |
| Phaser 3 | 内置 Tilemap(配合 Tiled) | 无原生 PCG,靠 JS 脚本 |
| LÖVE2D | 无内置 tilemap,靠社区库 | STI(Simple Tiled Implementation)读取 Tiled 数据 |
三、AI/ML 辅助生成(PCGML)
技术路线概览
| 方法 | 原理 | 成熟度 | 代表工作 |
|---|---|---|---|
| GAN(生成对抗网络) | 训练生成器模仿真实地图分布 | 🟡 中(学术可用) | DCGAN for Mario levels(Volz 2018) |
| VAE(变分自编码器) | 学习地图潜空间,插值生成 | 🟡 中 | Latent Variable Evolution |
| 扩散模型(Diffusion) | 图像级地图生成,细节丰富 | 🟡 中(2023-2024 新兴) | ControlNet 配合 tileset 风格化 |
| Transformer/LLM | 把 tilemap 当序列,自回归预测 | 🟡 中 | GPT-2 生成 level 序列 |
| 强化学习(RL) | 训练 Agent 设计关卡 | 🔴 低(难以实用) | PCGRL(Khalifa 2020) |
| Markov Chain | 基于转移概率的序列生成 | 🟢 高 | 简单实现,效果有限 |
| Evolutionary Algorithm | 遗传算法优化地图适应度 | 🟡 中 | 配合可玩性评估函数 |
新兴方向:LLM 辅助关卡设计
近期(2024-2025)出现了用 LLM 作为关卡设计助手的实验性方向:
- 自然语言描述 → 生成 tilemap JSON/CSV
- 提示词工程约束空间布局
- 与引擎编辑器集成(Copilot for level design)
目前仍处于实验阶段,生成结果不稳定,不建议在生产中依赖。
四、Tilemap 编辑器与工具生态
主流编辑器对比
| 工具 | 开源 | 价格 | PCG 支持 | 格式输出 | 引擎集成 |
|---|---|---|---|---|---|
| Tiled | ✅ | 免费(捐赠) | 插件/脚本 | TMX/JSON/CSV | 几乎所有引擎 |
| LDtk | ✅ | 免费 | Auto-layer(规则驱动) | JSON | Godot/Unity/Haxe 等 |
| RPG Maker(MZ) | ❌ | 付费 | 内置随机地图(有限) | 专有 | 仅 RPG Maker |
| Ogmo Editor 3 | ✅ | 免费 | 无内置 PCG | JSON | 自定义 |
| Tilesetter | ❌ | 付费 | Auto-tile 辅助 | PNG tileset | 辅助工具 |
LDtk Auto-layer 专项说明
LDtk 的 Auto-layer 功能是目前不依赖算法、纯规则驱动的最好用工具之一:
- 设计师定义"规则"(例如:若左邻是草地,该格用草边缘 tile)
- 绘制 IntGrid 层(抽象地形信息)后,Auto-layer 自动渲染对应 tile
- 支持随机权重,同类 tile 有概率变体
- 不需要写代码,美术/策划直接上手
适合:已有美术 tileset、需要快速填充地形视觉、团队中非程序员参与关卡设计。
五、横向对比分析
适用场景推荐
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| Roguelike 地下城(无美术样例) | BSP + 房间连廊(libtcod/rot.js) | 结构可控,实现成熟 |
| Roguelike 地下城(有美术样例) | WFC(fast-wfc / 引擎插件) | 风格自动保持一致 |
| 开放世界地形 | Perlin/Simplex Noise + 生物群系 | 平滑自然,性能好 |
| 洞穴/有机地形 | Cellular Automata + 随机游走 | 视觉有机感 |
| 关卡编辑辅助(团队) | LDtk Auto-layer | 无需写代码,设计师友好 |
| 浏览器/H5 游戏 | rot.js / superpositioned (WFC) | 纯 JS,无依赖 |
| Unity 项目 | Rule Tile + Tessera (WFC) | 官方支持 + 社区扩展 |
| Godot 4 项目 | TileMapLayer Terrain + godot-wfc | 内置工具优先 |
| 内容量极大(需训练) | PCGRL / GAN(学术方案) | 需要数据和 GPU |
技术成熟度对比
成熟度(生产可用性)
高 ████████████████████ 传统 PCG(Noise / BSP / Cellular Automata)
高 ███████████████████ WFC 原版 + 主流引擎插件
中 ████████████ Auto-tile / LDtk Auto-layer
中 ████████ WFC 变体(全局约束扩展)
低 ████ PCGML(GAN / RL / Diffusion)
低 ██ LLM 关卡生成(实验阶段)
性能对比(生成 256×256 tilemap,参考数据)
| 方案 | 生成耗时(参考) | 是否可重试 | 内存占用 |
|---|---|---|---|
| Perlin Noise | < 1ms | — | 极低 |
| BSP | < 5ms | 不需要 | 低 |
| Cellular Automata | < 10ms(10次迭代) | — | 低 |
| WFC(标准实现) | 50-500ms | 需要(矛盾时) | 中 |
| fast-wfc(C++) | 10-100ms | 需要 | 中 |
| GAN 推理 | 100-2000ms(GPU) | 不需要 | 高(模型加载) |
六、选型建议
决策树
是否有美术 tileset 样例图?
│
├─ 是 → 追求风格一致性?
│ ├─ 是 → 需要纯编辑器操作?
│ │ ├─ 是 → LDtk Auto-layer ✅
│ │ └─ 否 → WFC(fast-wfc / 引擎插件)✅
│ └─ 否 → 传统 PCG + 手动 Auto-tile 配置
│
└─ 否 → 关注地形类型?
├─ 地下城/室内 → BSP + 房间连廊(libtcod / rot.js)✅
├─ 开放地形 → Perlin Noise + 生物群系分层 ✅
├─ 洞穴/有机 → Cellular Automata ✅
└─ 超大规模内容(需 AI)→ PCGML(学术风险,谨慎评估)
按团队规模推荐
独立开发者 / 小团队(< 5 人)
优先 LDtk + Auto-layer + 简单 PCG 脚本:
- LDtk 免费、文档好、有大量教程
- Auto-layer 处理 tileset 拼接,脚本控制宏观布局
- 避免 WFC 的调试成本(矛盾处理较烦)
中等团队(5-20 人)
引擎内置 Terrain + WFC 插件 + 编辑器工具链:
- Godot 4:TileMapLayer Terrain + godot-wfc 插件
- Unity:Rule Tile + Tessera 或自研 WFC
- 配合 Tiled/LDtk 做手工关卡和自动生成的混合管线
大型团队 / 内容密集型
自研 PCG 管线 + 可选 PCGML 实验:
- 以 FastNoiseLite + 自定义约束系统为核心
- 建立关卡模板库 + PCG 填充的分层架构
- PCGML 作为内容多样性补充,需配套评估和过滤系统
不推荐项
| 方案 | 不推荐原因 |
|---|---|
| PCGRL(RL 生成) | 训练成本高、生成质量不稳定,工程化困难,2026 年仍不适合生产 |
| LLM 直接生成 tilemap | 输出不稳定,无法保证地图合法性(连通性/可玩性),调试成本极高 |
| 纯 GAN 生成 | 需要大量样例数据,模式坍缩问题难解决,推理延迟在实时生成场景不可接受 |
| 仅依赖随机游走 | 生成质量低,大量无效空间,后处理成本高 |
推荐技术栈组合
方案 A:Godot 4 + 纯规则驱动
IntGrid 层(设计师绘制抽象地形)
↓ LDtk Auto-layer 规则
TileMap 视觉层(自动渲染)
↓ GDScript PCG(BSP / Noise)
动态填充 IntGrid → Auto-layer 实时更新
方案 B:Unity + WFC + 编辑器工具链
美术提供 tileset 样例 + 邻接规则标注
↓ Tessera / fast-wfc
运行时 WFC 生成 → Rule Tile 渲染
↓ A* 验证连通性(失败则重试)
关卡存档(JSON)+ 编辑器预览
方案 C:Web/H5 + rot.js
rot.js Map.Digger(BSP + 随机游走混合)
↓ Phaser 3 Tilemap 渲染
FOV + 寻路(rot.js 内置)
附录:资源索引
| 资源 | 类型 | 链接 |
|---|---|---|
| mxgmn/WaveFunctionCollapse | 代码 | github.com/mxgmn/WaveFunctionCollapse |
| BorisTheBrave WFC 深度解析 | 博客 | boristhebrave.com/2020/04/13/wave-function-collapse-explained |
| rot.js 官网 | 代码+文档 | rotjs.github.io |
| LDtk 官网 | 工具 | ldtk.io |
| FastNoiseLite | 代码 | github.com/Auburn/FastNoiseLite |
| Tiled 官网 | 工具 | mapeditor.org |
| PCGRL 论文 + 代码 | 学术 | arxiv.org/abs/2001.09212 |
| Procedural Content Generation Wiki | 知识库 | pcg.wikidot.com |
| Roguelikedev Reddit(r/roguelikedev) | 社区 | reddit.com/r/roguelikedev |
| libtcod 文档 | 代码+文档 | python-tcod.readthedocs.io |
本文基于公开资料及知识库整理,项目 Stars 数据为估算值,以实际 GitHub 为准。