生物群系的历史回顾

在历史上生物群系发生了许多重大的变迁。下面我们一起走进历史,领略一下过往的经验与教训。

这一部分资料部分整理自 Minecraft 官方维基百科

Alpha 1.2

生物群系正式加入,主世界有 10 种,下界 1 种,2 种未使用。在这个版本中,温度降水量的概念已经有所体现。生物群系的布局根据温度和降水量有关,因此不会出现突兀的温度变化。但是也由于温度和降水量基于噪声算法,导致你会看到犬牙交错的边界,而非平滑的过渡,因此可以认为边缘宏观平滑,微观破碎。同时由于这个版本的生物群系生成的普遍较小,导致破碎的根绝更为明显。丘陵、断崖、海洋、沙滩并非作为生物群系出现,而是用算法在生成好的生物群系上进行的二次创作。

我相信这样的破碎可能不会适用于拥有大好风光的主世界,但是如果是一个本来就混沌、荒芜的世界呢?谁能想到,多年之后,这样的生成方式经过一些改进,被用于下界的生物群系生成?

Beta 1.8 - 1.1

生物群系重写。采用了基于分形(Fractal)的算法,这实际上奠定了长期以来世界生成的方法,一直沿用至今。生物群系变得更大,海洋变得更广更深。河流会在生物群系里或者生物群系之间流动并注入海里。河流、丘陵、山地、海洋、沙滩也先后成为生物群系。除了原有的山地(Mountains),还加入了各色的丘陵(Hills),积雪的生物群系又被重新加入。相邻生物群系的温度降雨量的渐变不再体现,常有河流间隔。此外水和植被的颜色有了平滑的过渡。因此可以认为边缘宏观破碎,微观平滑

1.2

采用了全新的世界格式 Anvil。 与过去不同的是,生物群系信息不再动态计算,而是被储存在了区块文件中:世界一旦生成,这一数值就不会发生改变。这种做法的提高了游戏运行效率,当然这也给外部修改提供了可能。

加入了丛林,预留给树木的四个数据值占满了,大家都以为树木“齐了”,以后还会有更多树吗?

1.7

迪斯科山!(Jeb 语) 平顶山的奇丽景色可能让人第一时间让人关注到这次更新上来。

此次更新加入的生物群系比以前所有版本加入的生物群系加起来还要多,引入了大量的变种生物群系。变种是多样化生物群系的好手段。比如在 1.6 时移除的沙漠湖泊,被作为沙漠的一个变种——一种带湖泊的沙漠重新加入。

相邻的生物群系会尽可能的避免突变(从最热到最冷,从最干到最湿),宏观上平滑度有所增加。但也只是尽可能的,所以也比较有限。

移除了过多的海洋、加入了深海。更新前的几乎无尽的海洋不复存在,世界超过半数面积变为了陆地,为新加入的生物群系提供了空间。而深海的加入使海洋的层次更为分明。更新前,玩家分明是生活在一座座被无限大海洋的包围的巨型岛屿上的;更新后,反而成了海洋破碎分布在大陆之间。

重磅回归的热带草原上长着新加入游戏的树木。新树木,Mojang 开了几个新的类,分配了几个新的 id。新沙石,方块好说,台阶却满了,于是又给红砂石台阶分配了新的 id。而在开发平顶山的时候,Mojang 发现之前地表构造器的完全无法复用,索性写了一个完全不同于其他所有生物群系的。

附录里收录了我还原的当年维基百科上挂过的一张表。当时这样的安排可以认为是故意的——显然在 Mojang 看来,获取某个生物群系的变种只不过是 +128 那么简单罢了。新生物群系的命名也极度诡异,诸如M、F、+此类莫名其妙的记号,后来到了扁平化的时候背悉数消灭(但到了最后还是留下了一个+),就连标志性的平顶山也被重命名为“恶地”,让很多人误以为是机翻。

从我前面的描述,你可以感受到的是一副宏伟的画卷在逐步展开,可当你驻足观望,不难发现一片盛景之下潜伏的是无处不在的种种危机。扁平化呼之欲出,重写的腥风血雨正在降临。

1.13

1.13 Mojang 做出的努力使我眼前一亮,世界生成可以说是最重要的一部分,Mojang 迈出了第一步,希望这不是最后一步。

——Yaossg《浅析1.13世界生成》

扁平化(The Flattening),世界生成重写。详见前作《浅析1.13世界生成》

末地的生物生物群系不再全是 sky 扁平化后:the_end,在末地外岛,不同的地形对应了不同的生物群系,这也就贯彻了生物群系的设计初衷。与主世界的层层叠加不同,末地生物群系的生成比较简单。

水域更新让海洋拥有了温度,根据噪声算法来决定。温度不同——生物群系不同,这贯彻了生物群系的设计初衷。

这次Mojang代码的重构采用了全新的设计模式,增加了代码的可扩展性,主要体现在:

  • 将世界生成的功能被集中在了区块生成器和生物群系两部分上面,而不是离散在方方面面,更便于对代码之间的关系进行分析。

——Yaossg《浅析1.13世界生成》

生物群系开始把握了世界生成的大量内容。毫无疑问,五彩斑斓的世界正是生物群系所赐。同时我们也应该注意到区块生成器在协调区块与生物群系生成关系方面的作用。

删除了自定义世界类型,Mojang 说它一定会在将来的某个版本回归的。取而代之的自选世界,相比之下自由度少了很多,因而似乎不那么收欢迎——曾经沧海难为水嘛。

1.14

在 1.13 更改的基础上进行了强化。

重写了主世界的生成系统,最终不再是三个层,而是一个。不再使用数组,而是改用套娃的方法。

1.15

当然,生物群系和高度无关。

——ustc-zzzz《答知乎提问:Minecraft 的地形生成算法是什么?》

加入了生物群系的在 y 轴上的支持,并在末地和下界更新中被使用。当然了,主世界依然与高度无关。采用的新的生物群系缓存方式。

20w14∞

愚人节快照...无限的维度、无限的生物群系?!有没有搞错?

看似是愚人节快照,实际上透露了接下来最大的两个方向——自定义维度和生物群系。这项内容的准备工作持续了好几个大版本:当你读到世界生成代码的时候,发现的到处都是的 Deserializer,看似莫名其妙,细品实在不简单。

1.16

我相信这样的破碎可能不会适用于拥有大好风光的主世界,但是如果是一个本来就混沌、荒芜的世界呢?谁能想到,多年之后,这样的生成方式经过一些改进,被用于下界的生物群系生成?

——Yaossg《再析世界生成:生物群系》生物群系的历史回顾:Alpha 1.2

下界更新!引入了气候参数,用来生成下界的生物群系。等会……这方法,好像在 Alpha 1.2 见过?

自定义维度!当年 Mojang 删除自定义世界类型的时候,曾放言说它一定会回来的。它终于回来了。

1.16.2

1.16.2,又名 1.17

——Yaossg 看代码前调侃道

1.16.2 之于 1.16,相当于 1.15 之于 1.14

为什么这么说?因为 1.16.2 的更改,太像一个 major version 了。

  • 新的生物
  • 资源包版本提升
  • 命令、数据包修改
  • 自定义生物群系等(也引发了生物群系相关代码大改)

好家伙,估计是 1.15 被骂惨了才让 1.16.2 承受了不该承受的重量。

最值得本文注意的是自定义生物群系了:情理之中,意料之外。本来以为会是 1.16 的内容,结果 1.16 没有。是不是 1.17?也不是。1.16.2 就离谱。“小版本,大更新”说的就是 1.16.2。前面也提到过:它对我的教程的打击是毁灭性的。


最终,我的教程是基于 1.16.5 的。不必继续往下看了。某种意义上,也不必往回看了。

1.17

空白

什么,为什么是空白?这指的是 1.17 的更新内容,不是我的文章。这是一个巨大的落差,他们几乎删除了 1.17:真正的内容还要等 1.18。

好像当时不少人并没有意识到问题的严重性...算了吧,无所谓。

1.18+

Mojang 最终放弃了这套系统。又是一个新的开始!

我很难想象我亲历了这一切;此后之事,就留待后人罢。