调研范围:算法库、引擎内置方案、独立工具、AI 辅助生成
适用决策:2D 游戏/应用中的 Tilemap 自动生成方案选型

三条主路线

当前主流技术路线分三大方向:

  1. 约束传播类(WFC 及变体):以 Wave Function Collapse 为代表,通过样例学习约束规则自动生成视觉一致的 tilemap,是近年最受社区关注的方向,适合有样例地图、追求局部一致性的场景。

  2. 传统程序化生成(PCG):包括 BSP 分割、随机游走、噪声函数(Perlin/Simplex)、房间连接算法等,技术成熟、可控性强,是引擎内置方案的主流实现基础,适合工程化生产环境。

  3. 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 为准。