《Caves of Qud》中的端到端程序化生成(2019)
摘要
自由游戏(Freehold Games)的Brian Bucklew和Jason Grinblat介绍了他们如何结合程序化生成技术,在游戏《Caves of Qud》中创建具有历史、文化、建筑、NPC和任务的完整村庄。
<p>在本2019年GDC游戏开发者数学讲座中,自由游戏(Freehold Games)的Brian Bucklew和Jason Grinblat完整走了一遍用于在《Caves of Qud》中生成村庄的系统,这些系统包括它们自己的历史、文化、建筑风格、讲故事传统、NPC和任务。</p>
<p><a href="https://lobste.rs/s/zevrur/end_end_procedural_generation_caves_qud">评论</a></p>
查看缓存全文
缓存时间: 2026/05/22 18:37
### TL;DR
Freehold Games 的 Brian Bucklew 和 Jason Grinblat 阐述了如何结合多种程序化生成技术,跨越不同抽象层级,在《Caves of Qud》中构建完整的村庄——包括历史、文化、建筑、NPC 和任务。
---
## 引言:问题所在
演讲一开始就提出了一个简单的挑战:**如何结合多种程序化技术,构建一个大规模生成系统?**
大多数开发者都知道单独的工具——用 L-system 生成植物、用噪声图生成地形、用马尔可夫链生成文本。但要构建一个不在教程中出现的大规模系统,就需要以新颖的方式将这些技术编织在一起。
Jason Grinblat 和 Brian Bucklew(Freehold Games)通过详细讲解《Caves of Qud》中一个村庄的端到端生成过程,来回答这个问题。
---
## 设计背景 —— 为什么采用这种方法?
> “每当构建大规模系统时,都应该用设计背景来为其定位。这才是真正吸引你并做出最终决策的东西。”
团队制作的是 RPG,因此他们采用了**仿真设计方法**:村庄是世界中的实体,系统试图再现其部分动态(通过玩家角色的约束进行过滤)。
关键原则:
- **视角限定在玩家角色**——玩家穿行于村庄、探索空间、与 NPC 对话。这不是一个让你观察数百年演变的城市建造模拟游戏。
- **追求输出新颖性**——“让生成器自由驰骋,然后构建一个允许这种情况发生的环境。”
- **模块化是好事**——解耦的模块易于管理、灵活,并且可以组合成许多新颖的结果。
---
## 总体方法:抽象山
团队首先以非常抽象的方式对村庄进行建模,然后经过多个变换步骤到达“具体谷”,在那里构建游戏对象。
> “我们分多个步骤生成一个村庄,在不同抽象层级上建模不同的特征。早期的步骤更抽象;我们使用这些抽象数据模型作为后期步骤的输入,这些步骤将它们重新具体化。如果遇到需要具体决策但没有抽象输入的情况,我们就回退到默认值。”
这意味着系统内部的“意义流”有时是松散的——随机决策被做出,然后**幻象知觉**(人类倾向于寻找模式)加上少数真正有意义的决策,使输出变得连贯。
**核心在于管道**——输入、输出,以及模块如何消耗和产生数据。演讲侧重于模块之间的连接方式,而不是每个模块的内部细节(大多数都是简单的成熟技术)。
---
## 什么是村庄?共同的理解
《Caves of Qud》设定在一个遥远未来的世界,大量借鉴了古代世界的美学风格。团队还拥有十多年来手工设计的静态村庄;他们解构了这些村庄,弄清楚设计师当时的想法,然后将其程序化。
一个村庄包含:
- **定居者**(NPC)
- **历史**——“过去与现在的关系在《Caves of Qud》中很重要。”
- **地理**——地点如何融入周围区域
- **生成的建筑、政府、文化、宗教**——本质上是一个完整的文化体系
- **叙事传统**——村庄如何向访客讲述其历史
- **本地资源**——例如,用当地食材制作的特色菜
- **家具风格、食物和饮料特色**
- **程序化生成的对话**——NPC 可能会根据其文化说出谚语
- **集体和个体需求**——以任务的形式建模
---
## 所使用的技术(列表)
幻灯片列出了许多技术,但演讲侧重于它们如何在管道中结合。(并非所有技术都会深入讲解。)
---
## 村庄生成:三个阶段
村庄生成在游戏过程中分为三个阶段:
1. **世界生成**(新游戏开始)——生成每个村庄的历史。
2. **解析邻里**——确定世界位置以及与本地邻居的关系。
3. **村庄制造**(按需)——当玩家即将进入村庄区域时,系统生成:
- 具体的文化和建筑风格
- 建筑布局
- 游戏对象(墙壁、NPC、家具)
此外还有**设计阶段**(编译时),在此阶段将静态的手工模板嵌入游戏,供程序化系统使用。
---
## 抽象山上的五个步骤
演讲通过一个具体例子展开:一个生成村庄中的纪念碑。
> “790 年,纳万的村民要求村长下台,并废除了村庄中所有的等级制度。公民生活的两大支柱变成了无政府状态和瓦拉塔拉——传奇的巨型蜻蜓。”
这段纪念碑文本是整个管道的输出。我们将看到它是如何产生的。
### 步骤 1:生成历史
**输入:**
- 世界创建参数(图中左侧和底部的箭头)
**输出:**
- 一个抽象的历史数据结构(事件、日期、派系等)
在这个阶段,历史以非常抽象的方式存储,因为玩家只能通过纪念碑、NPC 对话和描述来与之互动。系统不需要渲染完整的时间线;只需足够的数据,以便稍后生成具体的产物。
### 步骤 2:解析邻里
**输入:** 历史 + 世界地图数据
**输出:**
- 村庄在世界地图上的位置
- 与附近特征(河流、废墟、其他村庄)的关系
### 步骤 3:生成文化 / 建筑
**输入:** 历史、邻里数据
**输出:**
- 文化特征(例如“无政府主义”、“宗教”、“资源导向”)
- 建筑风格(材料、布局模式)
- 关于特定纪念碑或公共建筑的标志
### 步骤 4:规划布局
**输入:** 文化、建筑风格
**输出:**
- 村庄的蓝图——哪些建筑存在、它们的尺寸、位置以及连接方式(门、路径)
### 步骤 5:制造游戏对象
**输入:** 布局、文化、历史
**输出:**
- 实际的墙壁、家具、NPC、战利品,并且纪念碑文本被生成并附加到纪念碑对象上。
此步骤在村庄加载到屏幕前立即执行。
---
## 关键总结
1. **从抽象开始,以具体结束。** 每一步都将更抽象的模型转化为更具体的模型,在此过程中逐步添加细节。
2. **模块化带来新颖性。** 解耦的模块可以以多种方式重新组合,这与让生成器自由驰骋的目标一致。
3. **回退随机性是可以接受的。** 当缺少抽象输入时,随机默认值仍能产生连贯的结果,因为玩家的大脑会构建意义(幻象知觉),并且系统也确实注入了些微有意的意义。
4. **管道才是关键。** 大多数单独的技术都是众所周知的;新颖之处在于它们如何连接以及每个技术操作在什么抽象层级上。
5. **以交互为导向进行设计。** 由于玩家只会在村庄中行走并与 NPC 交谈,你不需要模拟数百年村庄生活的全部细节——只需要模拟那些在游戏中变得有形的部分。
---
## 来源
Source: End-to-End Procedural Generation in Caves of Qud (GDC 2019) (https://www.youtube.com/watch?v=jV-DZqdKlnE)
相似文章
CreativeGame:面向机制感知的创意游戏生成
CreativeGame 是一个多智能体系统,通过程序化奖励与谱系记忆,在版本迭代中显式规划、追踪并演化游戏机制,持续生成 HTML5 游戏。
Chain-of-Procedure: 面向程序问答的分层视觉语言推理
本文提出了ProcedureVQA,一个面向视觉程序问答的基准测试,以及Chain-of-Procedure(CoP),一种分层推理框架,通过视觉线索检索相关指令,并借助语义分解细化步骤,相较于基线方法实现了最高13%的性能提升。
@zheyuanzhang99:发布 AgentOdyssey——一款面向测试时持续学习智能体的开放式长程文本游戏生成引擎
AgentOdyssey 是一款开放式文本游戏生成引擎,专为持续学习智能体设计,打破训练与测试的界限。
Buildcraft 是一个编译器问题
本文提出将 ARPG 构建视为编译器管线,其中创作者内容被编译为运行时数据,从而避免为技能-辅助交互编写特殊代码,并使用基于 Zig 的示例进行说明。
Procgen Benchmark
OpenAI推出Procgen Benchmark,这是一套程序生成的环境套件,旨在评估强化学习智能体在多样化任务中的泛化能力,解决Atari等传统基准中的过拟合问题。