« ejoy2d shader 模块改进计划 | 返回首页 | skynet 服务的过载保护 »

随机地形生成

玩过 矮人要塞 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个点,然后以此为最高点,每个点向下延伸这样可以形成波谷,是否可以模拟出比较真实的河流走向

simblob 新的这篇文章更专业一些 http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/

哈~~~我最近也迷上沙盒游戏了,无论矮人要塞,tome4,cdda,dcss,nethack等都玩过,不过这种游戏太耗时间了,只能浅尝辄止。另外一款叫做elona都也不错,起码画面和操作感要简单多了

还有重要的伪随机数: 种子(seed) 没有提到.

不错,正在设计的新游戏正好要用到随机地下迷宫。每周浏览1次你的博客真是受益匪浅。感谢分享。

Post a comment

非这个主题相关的留言请到:留言本