随机地形生成
玩过 矮人要塞 Dwarf Fortress 的同学都会惊叹于它的随机地形生成系统。如果你对 ascii art 无感,那么可以 google 一下 stonesense 的图片。
矮人要塞是 3d 的地形系统。在游戏 wiki 上有介绍地形生成系统的参数细节 。
大体上是这样的: 首先有一张高度图(Elevation),决定了每个坐标的高度。然后给出一张降雨图 (Rainfall),来影响当地的植被和河流。通常降雨图是根据高度图(海岸和季风影响)计算出来的。这里有一篇文章简单描述了这个过程。
温度图(Temperature)一般根据纬度以及当地的海拔计算出来,也会影响当地的动植物。
地质的排水情况(Drainage)可以影响当地能否形成湖泊、湿地和河流。同样影响了当地的土质(进一步影响植被)。
另外还有,火山的分布情况(Volcanism),以及野生物分布图(Savagery) 会改变当地的矿产和动物分布。
其实这些参数图都是可以从外部导入游戏的(而不使用游戏里随机出来的)。有玩家制作了更好的地图生成工具 PerfectWorldDF。 玩一玩这个工具更能体会到这些参数是如何组合到一起的。
在 PerfectWorldDF 里,高度图是用一张湍流图加上 perlin noise 合成的。PerfectWorldDF 不开源,但是可以从另一个开源库 libnoise 中了解到类似的过程的算法。libnoise 的 Tutorials 图文并茂的诠释了随机地形的生成过程和算法。
ps. 关于地形生成,还可以看看这里:Artificial Terrain Generation。
最后简单提一下随机地下迷宫的生成算法。比较常用的是 Herringbone Wang Tiles。
写这篇东西主要是最近又玩了不少沙盒游戏。简单记录一下这几天的研究。
Comments
我想,如果在一个64*64(假设)的地形中,随机点2到3个点,然后以此为最高点,每个点向下延伸这样可以形成波谷,是否可以模拟出比较真实的河流走向
Posted by: Lichang | (5) November 13, 2018 08:49 PM
simblob 新的这篇文章更专业一些 http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/
Posted by: Mutoo | (4) October 24, 2014 11:40 PM
哈~~~我最近也迷上沙盒游戏了,无论矮人要塞,tome4,cdda,dcss,nethack等都玩过,不过这种游戏太耗时间了,只能浅尝辄止。另外一款叫做elona都也不错,起码画面和操作感要简单多了
Posted by: wzh | (3) September 29, 2014 05:11 PM
还有重要的伪随机数: 种子(seed) 没有提到.
Posted by: Zack | (2) September 29, 2014 09:26 AM
不错,正在设计的新游戏正好要用到随机地下迷宫。每周浏览1次你的博客真是受益匪浅。感谢分享。
Posted by: Ephay | (1) September 28, 2014 04:48 PM