如何生成类似于《帝国时代II》随机地图的随机地图?


18

我喜欢《帝国时代II》生成随机地图的方式(种类繁多,生物群落过渡不错,地图感觉随机而不混乱),但仍在努力复制样式。我尝试使用例如Perlin噪声,但是所有结果要么太均匀,要么不一样,Perlin值->地形启发法过于敏感和脆弱,无法创建各种世界类型。

我记得AoE2地图类型“未知”广告了“ 100,000张可能的地图”,暗示了一些种子编号的用法,但是我不确定如何使用种子编号来产生我所看到的品种。

我可以使用什么算法和启发式方法来生成类似于AoE2随机图的随机图?

编辑更具体:

进一步思考我的问题,并研究我对AoE2随机地图引擎的喜欢,我认为我最大的问题是管理地图上水和植物生命的分布。我现在看到我也将其与“有意义的生物组转换”联系在一起,但这是一个不同的问题(尽管我希望继续使用Perlin噪声将使其难以解决)。

我添加了几张AoE2随机映射,突出显示了我对它们的映射引擎的喜好,但我自己的努力未能重现。所有屏幕截图均取自随机地图类型“自定义”->“未知”。我没有指示游戏使用特定地理位置,例如群岛。

以下是来自我自己的地图引擎的图像。每个像素对应一个AoE2地图图块。

我的项目的一个难题是我希望地图比AoE2地图大很多倍。因此,无论我使用哪种引擎,都必须能够在每个地图中创建完整的生物群系,而不能像AoE2那样在每个地图中创建一组狭窄的生物群系。

帝国时代II地图

内陆湖泊

这是一个具有内陆湖泊和类似河流的事物的示例。我喜欢地图上包含大量散布的水的方式,但是水仍然有些集中-有大量土地可用于建立帝国。您无需花费整个游戏就可以在水上规划城市。

相连的岛屿

这是一个类似的示例,其中游戏足够聪明,可以将岛屿与可穿越的沼泽相连。我无法想象基于噪声的算法将如何在那以及只有那些地方造成沼泽。另外,请注意游戏是如何创造土地的,以便每个玩家都拥有自己的私人大片土地。它并没有创造出一片随机的土地,然后就每位玩家开始时哪怕是最糟糕的猜测。

岛屿

我喜欢这张地图也大量使用水,但其中包括许多内陆湖泊。将其与第一个图像进行对比。我喜欢AoE2使用相同的构建块创建完全不同的地理位置的方式。我尝试使用Perlin噪音的尝试在这里失败了-我要么获得了广阔的海洋,使陆地或10,000个湖泊的土地相形见war。我还发现很难同时到达岛屿相连的大洲(想想北美/南美)。

干,郁郁葱葱 干燥,沙漠

将此图像与其上方的图像进行对比。他们表明地图的干旱度不取决于水位。第一张图片的地图几乎没有水,但包含森林和草丛。第二张图像的水量适中,却是沙漠。我喜欢那是可能的(想想您的世界既有新墨西哥,又有撒哈拉和哥斯达黎加)。

我自己的地图

我在很多地方都读到,构建地图的一种好方法是对Perlin噪声的多个级别进行分层,每个级别代表不同的数据维度。按照流行的建议,我选择了海拔和湿度,并从此处的Whittaker表中选择了地形类型。

我拍了两个珀林图,通过一个简单的量化每个值成整数if perlin_val < x { i=some_int } else if perlin_val < y...,然后将(海拔,湿度)整数对映射到地形类型表(例如[1,0]->热带沙漠,[1,1 ]->草原)。该系统中包括海洋-海拔= 0定义的海洋。

g1_成功

有很好的变化,并且在许多方面感觉都像真实世界,但是存在一些问题:

  • 首先,海洋深度没有规律。您可能希望靠近岸边的浅水区和更远的深水区,没有哪个韵律或原因

  • 第二,所有的水都集中在海洋中。没有湖泊或河流,因为Perlin噪声不会在大洲中部突然下降到较低的值。

  • 在每个生物群落的数量之间取得平衡非常非常困难。我将此归因于:

    • Perlin噪声遵循正态分布,因此很难估计如何调整每个尺寸映射的概率

    • 试图平衡多个维度很困难-也许我想要更多(2,3),所以我提高了获得(n,3)的几率。好吧,现在我有太多(3,3)了,一切看起来都错了。

    • 当我将噪声放大到足够接近以获取平滑数据时,我没有得到非常完整的Perlin值样本。因此,我需要调整我面前地图的分布,重新加载新的随机地图,并获得截然不同的结果。

分离水

我试图通过使用第三组Perlin值制作水来解决河流/湖泊问题。根据水/土地的二元决策,然后将以上所有内容应用于土地。这使控制水的分布变得非常容易(仍然不完美,但是更好),但是引入了一个问题,那就是存在许多没有意义的生物群落过渡。例如,茂密的草原中莫名其妙的沙漠,沙滩上的雪等。由于上述原因,仍然很难控制陆地生物群落的比例。

一维故障

考虑到上述问题,我尝试了一种更简单的算法,该算法仅将Perlin噪声映射到一个维度。我现在有一系列的地形类型,从0 =深海-> 1 =浅海-> 2 =沙滩...-> N =雪。虽然这产生了岛屿和大洲,并且使平衡每个地形的比例变得容易得多,但地形类型却过于聚集。每个陆地块看起来都像一张海拔图,通常没有分散在其表面的地形类型。每个陆地块都具有大致相同的特征,始终具有相同的顺序,并且始终具有相同的环形形状。


我不确定原始开发团队中没有的人是否真的可以回答您的问题,但是我建议种子的数量比您预期的要低得多。种子几乎可以肯定会针对每种基本地图类型生成不同的地图,并且以任何组合形式将其全部包含在内,很有可能使其达到100,000。
Magus 2014年

这个问题似乎不合时宜,因为它是在询​​问有关特定的现有游戏的实现细节,而不是有关创建游戏的信息。
Trevor Powell

@TrevorPowell在查看了有关本网站的主题问题的准则后,我对问题进行了重新表述。
spiffytech 2014年

您在我发表评论后约十秒钟发布了该修改内容。现在就是服务!;)
Trevor Powell

1
-1我认为仍然太宽泛。您需要具体说明“感觉就像地图”的含义。回答此问题需要您正在谈论的特定示例。程序生成比人们通常认为的更具艺术性。艺术创作和感知是一个主观的话题。选择您要关注的特定事物,然后仅询问有关问题。这个问题的范围目前非常广泛。
MichaelHouse

Answers:


9

看看Amit Patel的出色文章,我觉得它是地形生成过程的一种典型资源...

http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/

他所做的关键是使用图形结构来建模其地形,而不是直接绘制噪声图(Perlin等人)。我不会嵌入他的插图,但请阅读该文章,并且我认为您会发现,这有助于您考虑使用其他方法。

如果您要制作CIV / AOE类型的游戏,那么资源的放置将很重要。您不能让关键资源太稀有,或者高价值资源太普通。如果您将每个多边形都假定为具有给定特征的区域(请参阅文章的插图,这将更有意义),那么我会看到根据您选择的某种算法为每个多边形分配资源。通过使多边形中的资源受到邻域的统计偏差,可以使您变得非常聪明,这样,沙漠旁的森林可能很少见,但草原旁的森林更为常见。


2
阿米特(Amit)的指南所产生的地形对于帝国时代来说太现实了。:)
塞斯·巴丁

呵呵是的,是的。但是,我认为使用不同大小的像元(每个像元都是特定的地形类型)的基本概念可以很好地工作。从等式中删除地形高度的概念。
蒂姆·霍尔特

我查看了阿米特(Amit)的文章,但由于只有一个岛而对其进行了过于严格的优化。将海拔高度设为距海岸的距离的简单函数,会在多个岛屿或更大的大陆上产生尴尬的结果,他的水分配方法假设景观中有一个突出的山峰,最终流向海洋。如果要从Amit的方案中删除地形高度,我不确定如何使他的生物群系分配理念适应我的项目。
spiffytech 2014年

5

我为《帝国时代2》创建了随机的地图脚本。我最近的一个是高清版本。

如果您想了解如何为《帝国时代2》创建地图,则可以找到RMS(随机地图脚本)的绝佳指南

《帝国时代》使用专家系统,允许脚本编写生成规则的例程,您可以从中学到很多东西。至于区域,我想这可能只是掩盖区域并相应地对掩盖区域应用不同的脚本/例程的情况。通过在文本编辑器中打开现有地图脚本的生成规则,您可以轻松查看它们。我在记事本中写我的

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.