《Caves of Qud》中的端到端程序化生成(2019)

Lobsters Hottest 事件

摘要

自由游戏(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)

相似文章

Chain-of-Procedure: 面向程序问答的分层视觉语言推理

arXiv cs.CL

本文提出了ProcedureVQA,一个面向视觉程序问答的基准测试,以及Chain-of-Procedure(CoP),一种分层推理框架,通过视觉线索检索相关指令,并借助语义分解细化步骤,相较于基线方法实现了最高13%的性能提升。

Buildcraft 是一个编译器问题

Hacker News Top

本文提出将 ARPG 构建视为编译器管线,其中创作者内容被编译为运行时数据,从而避免为技能-辅助交互编写特殊代码,并使用基于 Zig 的示例进行说明。

Procgen Benchmark

OpenAI Blog

OpenAI推出Procgen Benchmark,这是一套程序生成的环境套件,旨在评估强化学习智能体在多样化任务中的泛化能力,解决Atari等传统基准中的过拟合问题。