总起
本文主要基于Procedural Content Generation in Games第四章介绍地形生成,给游戏角色提供可以站立的地面。
关于PCG in Games之前的笔记可见:
第一章读书笔记 PCG in Games 程序化内容生成 介绍 - 知乎
第二章读书笔记 PCG in Games 程序化内容生成2 基于搜索的方法 - 知乎
第三章读书笔记 PCG in Games 程序化内容生成3 构造性方法,针对地牢式关卡 - 知乎
本章首先会介绍菱形方块分型算法和柏林噪声,接着介绍基于代理可以创造更复杂的地面,最后介绍基于搜索的算法生成地图和一些具体的游戏元素。
地形无处不在,几乎所有的3D游戏都会提供可以站立或驾驶的地面,并且这些地面都会拥有一些变化,如不同类型的植被、不同的海拔。
在飞行模拟游戏中,地形不需要严丝合缝,但需要巨大的区域覆盖;开放世界,如《上古卷轴5天际》和《GTA》系列,地形扮演了力学和美学的角色;而《光环》和《使命召唤》系列,更类似于我们之前讨论的关卡。
噪声将一些微小的改变添加到表面上(或者一些看起来像是表面的东西),例如天空盒、灰尘、水的某些方面(尽管水的模拟本身就是一个复杂的主题)、火、血浆、皮肤和皮毛的颜色等。还有我们可以将地面的一些微小变化看作噪声,这使我们了解到噪声和地形的联系。
在噪声中使用强度图,在地形中使用高度图,这两种表现形式实际是相同的,都使用二维实数矩阵进行表示,因此任何用于生成造成噪声的方法都可以用于生成地形,反之亦然。
随机地形
我们先考虑生成个完全随机的地形,如果使用高度图,生成的效果像是随机的“钉子”:没有平原、山脉、丘陵或者其他典型的陆地风景。