Minecraft 设计思想
卷二 · 游戏设计系统如何互相咬合

世界生成即内容生产

噪声、群系、结构各司其职,产出的不是内容而是差异;种子是无限的修辞,远地是无限的裂缝,「找不到」是探索的燃料。程序内容的设计合同是可探索,不是可通关。

本章命题:世界生成的设计合同是「可探索」而非「可通关」——生成器不生产内容,生产有质量底线的差异;无限的承诺由种子这个修辞兑现,由边界这个工程兜底。若玩家普遍在有限时间内穷尽了世界的差异、把「探索」降级为「清单」,本命题就是错的。

1问题

每隔几小时,就有玩家把一座程序生成的悬崖、洞穴或岛屿截图发到社区,配文里带着真的兴奋。这些地形没有一处出自设计师的手——设计师甚至不知道它们存在。更奇怪的是:这些山从原理上说「都差不多」,同一套规则生成了十四年,为什么还在源源不断地产生值得截图的东西?

传统的内容生产回答不了这个问题。手工内容是「一个场所」:设计师做一个副本,玩家消费一次,消费完就是消费完了。生成内容是「一套规则」:规则本身不占内容预算,它负责的是源源不断地产生场所。前者卖出的是体验,后者卖出的是差异——这是两种完全不同的生意,设计合同也完全不同。本章把这份合同逐条读出来:差异从哪来(噪声、群系、结构各管什么)、无限是怎么许诺的(种子)、在哪里露馅的(远地与边界)、以及「找不到」为什么是这份合同最精妙的条款。

2为什么同样的山可以看一辈子

先修正问题的提法。不是「一座山被看了一辈子」,而是山永远不一样。玩家一辈子看的其实是无数座彼此不同的山——生成系统的本事是把「不同」做到廉价,把「不同之中有秩序」做到稳定。

把「不同」拆开,它由三样东西相乘:地形的起伏(这里陡还是缓)、区域的面貌(这是沙漠还是雪原)、以及上面有什么(有没有村庄、神殿、露头的矿洞)。三者独立变化,组合数就大到任何人都走不完——这是组合爆炸,几乎所有程序生成系统的共同原理。但组合爆炸只是必要条件:真正难的是第二条——差异要有质量底线。随机地形如果只是随机,会生成不可能生存的绝境、无法阅读的混乱、以及大量「生成等于没生成」的废话地形。Minecraft 的生成结果几乎每一座都能住、能读、能改造:平原平得能盖房,山地陡得有戏剧性,洞穴深处危险但通着。

所以设计合同的第一个条款是:生成器不生产内容,生产「合格差异」。内容(某个具体的山洞长什么样)是执行的产物;设计投入全部在规则上——什么算一座山、什么算一条河、村庄该在什么样的地上出现。这份合同可以证伪:如果哪天玩家普遍觉得「新地形只是旧地形换色」,差异的供给就断了,合同即告失效——洞穴与山崖之前的几年,社区确实发出过这种抱怨,而回应它的正是那份更新的重做(本章第四节)。

3噪声、群系、结构的职责

合同的三位执行者,各管一层,互不越权。

噪声管几何。大地的起伏由一层平滑连续的噪声函数决定:取任何一点,它和邻居的高度不会突变,于是山有山脊、谷有走向、平原自然延展。噪声的功劳是连续性——它保证世界的每一块都「像地形」,而不是随机数的乱码。这是最底层的一层:不产生意义,只产生合法的地形。

群系管语义。光有起伏还不够,玩家需要「这里是沙漠」「那是针叶林」这样的区域身份——群系把连续的地形切成有名字、有统一材质、有专属生物的气候分区。群系是生成器的语义层:它让玩家可以口述世界(「往北穿过沙漠就是雪原」),也让差异可以被期待——走进新群系,你知道大概会遇到什么,又不知道具体会遇到什么。期待加悬念,正是探索的情绪配方。

结构管叙事。村庄、沉船、遗迹、要塞——这些「人类(或类人)痕迹」是生成器扮演的第三种角色:讲故事。噪声和群系产出的是自然,结构产出的是曾经有人的暗示:一张桌子、一个箱子、半塌的墙。自然地形是风景,结构是问句——谁住过这里?发生过什么?探索欲在这个问句上换了性质:从「看风景」升级为「找线索」。

三层的分工可以合写成一句:噪声保证地形合法,群系保证区域可读,结构保证世界有故事。三层都不生产具体内容——它们生产内容出现的条件。这就是「生成即内容生产」的准确含义:生产的是内容的产地,不是内容本身。这套管线在机器里怎么跑、区块按什么顺序生成,实现卷另有专门一章(见《世界生成管线》),本章不展开公式。

把三层合在一段旅程里读一遍。你出生在一片桦树林(群系给了身份),向东走,地势缓缓抬升(噪声给了形状),翻过山脊是一片恶地(群系切换了语义),崖壁上露出一个废弃矿道入口(结构给了故事)。你决定下去——矿道意味着木头、箱子,可能还有宝藏,也可能有它当年没关好的东西。整个过程里没有任何一处是「设计师放在那里的」,但你读到的每一步都有意义:山是山,界是界,废墟是废墟。生成器的全部手艺,就是让你在无人设计的地方,读出设计的错觉。

4无限的修辞:种子、远地、边界

「无限」是 Minecraft 最著名的许诺,也是最需要拆穿的一个词。

种子是无限的修辞。每一个世界由一串字符(种子)唯一决定:同一种子生成同一个世界,不同种子绝无雷同。种子解决了一个看似无解的矛盾——世界要「对每个人不同」,又要「对每个人确定」。你的世界我永远走不完,但你的世界可以一字不差地出现在我的电脑上:把种子发给我即可。于是社区长出了种子文化:分享一座绝佳出生地的种子,像分享一首诗;速通玩家为找一条完美的种子翻检成千上万个随机数,像淘金。种子把「无限」从一个规模声明,变成了一种可以传递的具体物。

**远地是无限的裂缝。**许诺归许诺,工程终有边界。在旧版本里,走到离家千万格之外,浮点数的精度耗尽,地形开始崩坏:山不成山,地面裂成锯齿,墙与虚空交错——这片破碎的地带被社区命名为远地(Far Lands)。它不是彩蛋,是「无限」这个修辞露出的工程马脚;而社区对马脚的反应是把它供成圣地——远征远地成了传奇,破碎本身就是风景。远地在后期版本的地形重写中消失,但它留下的问题是永恒的:无限走到尽头,你打算让玩家看见什么?

远地地形:正常的世界在极远处崩坏成层叠破碎的悬浮结构与锯齿裂缝
远地(Far Lands):浮点精度耗尽后,生成器给出的「世界尽头」。社区没有把它当 bug 处理,而是把它当成了圣地。图源:Minecraft Wiki。

**边界是无限的兜底。**如今的世界有一个硬性边界:距离原点约三千万格处,世界墙立在那里,走不过去1。三千万格什么概念?按玩家的脚程,走到边界需要以年计的现实时间——边界在体验上等于无限,在工程上是有限。这就是这份合同最诚实的地方:无限由修辞负责,有限由边界负责,两者不冲突。玩家从不需要走到边界;玩家需要的是「还有」这个许诺始终成立。

5生成当卖点:洞穴与山崖的设计含义

合同订立之后十几年,一次更新证明了它还可以反过来用:生成系统本身就是内容生产线,而且是可以召开发布会的那种。

2021 年的洞穴与山崖(卷一第 9 章讲过它的治理故事),把主世界的生成规则推倒重做:世界上下限扩展,洞穴从细走廊变成三种尺度的巨大空间,山峦第一次高耸入云,矿石按深度分布。注意这次更新卖的是什么——没有新玩法系统(没有新战斗、没有新职业),卖的几乎纯粹是世界的形状。它的市场效果是十几年老玩家的大规模回坑:大家回来不是为了学新规则,是为了「看看新的世界长什么样」。

这件事的设计含义比商业含义更深。传统内容更新的成本曲线是线性的:一个副本一份工,内容量与人力成正比。而生成系统的更新是指数释放:改一次规则,之后每一个新世界的每一座山都是新内容,边际成本近乎零。同时它把「老内容」温柔地作废了——旧世界的经典地貌成为绝版,新世界等每个玩家从头探索。生成当卖点的本质,是让「世界」本身成为最大的可更新资产。此后每次生成规则的调整(每几年一次)都能复用这条曲线,卷一第 9 章写到的更新节奏变化,底层正是这条经济学。

6「找不到」作为探索燃料

合同的最后一个条款最反直觉:生成器承诺「存在」,但不承诺「给你」。

要塞藏在地下,没有任何地图标注;林地府邸可能离出生点几万格;稀有结构之间的距离没有下限保证。设计者完全可以把一切都放在玩家身边——早期版本确实曾经把要塞做得更容易找——但最终留在这份合同里的写法是:值得找的东西,必须真的需要找。

「找不到」是燃料,不是缺陷。它产生了三层连锁反应。第一,导航成为玩法:探险前带够床和食物、沿路做记号、记坐标,这些第 3 章讲过的生存技艺,全部因为「目的地不保证在附近」才有意义。第二,信息成为社区货币:种子分析、结构查找工具、探险日志——「哪里有什么」的知识成了玩家之间真实的礼物与商品(社区查找工具是现象级的第三方贡献,本书如实记录其存在)。第三,找到成为事件:第一座被找到的林地府邸、第一次亲眼看见要塞图书馆,在玩家的记忆里都是「事件」而非「路标」——稀缺把发现升格成故事。

对照面同样成立:如果一切都唾手可得,探索这个词就死了。清单式的设计(「收集十个古代残骸」)把探索降级为跑腿,因为它把「存在」和「给予」写成了同一句话。Minecraft 的生成合同把两句话拆开:世界保证有,但从不保证给——剩下的部分,正是玩家自己的故事需要的位置。

7这一章留下什么

  • 爱好者:你截过图的那座山、你找了一个月的那座府邸,都是同一份合同在你身上的兑现——它没给你内容,它给了你「还有」。
  • 开发者:能抄走的是生成合同的四条款——生产合格差异而非内容、几何/语义/叙事三层分权、无限用修辞讲而用边界兜底、「存在」与「给予」分开承诺。抄不走的是差异的时间复利:十五年积累的种子库、探险故事和「绝版地貌」,新产品的生成器再好,第一天也是空的。

注释

  1. Minecraft Wiki,《World border》(默认边界位于距原点约 29,999,984 格处,越过即无法前进),minecraft.wiki,检索于 2026-09-18;见 https://minecraft.wiki/w/World_border ↩

On this page