Algorithm 二维平铺贴图生成

Algorithm 二维平铺贴图生成,algorithm,2d,tile,procedural-generation,Algorithm,2d,Tile,Procedural Generation,我正在开发一个2D平铺引擎,目前我正在研究地图生成算法 我尝试了一些基本的生成高度图的方法,比如 山一代 柏林噪声 钻石广场 但我总是遇到同样的问题:这种算法似乎适合处理同样具有高度分量的平铺贴图,但这不是我的情况 我基本上有像草、海、沙漠等精灵,但它们不应该根据生成的高度放在地图中,而是 一切从海洋开始 岛屿放置在地图的中间(这是我尝试失败的算法) 生成沙漠(它们应该像周围的随机点) 山和山的锁链被产卵(它们应该像蛇) 我应该尝试什么样的方法 我通过开发专门的算法来解决子组件问题(如沙

我正在开发一个2D平铺引擎,目前我正在研究地图生成算法

我尝试了一些基本的生成高度图的方法,比如

  • 山一代
  • 柏林噪声
  • 钻石广场
但我总是遇到同样的问题:这种算法似乎适合处理同样具有高度分量的平铺贴图,但这不是我的情况

我基本上有像草、海、沙漠等精灵,但它们不应该根据生成的高度放在地图中,而是

  • 一切从海洋开始
  • 岛屿放置在地图的中间(这是我尝试失败的算法)
  • 生成沙漠(它们应该像周围的随机点)
  • 山和山的锁链被产卵(它们应该像蛇)
我应该尝试什么样的方法

我通过开发专门的算法来解决子组件问题(如沙漠、丘陵和山脉),以满足我的需要(例如,山脉从一个点开始,然后沿着一个方向转弯),但我在生成基本岛屿方面失败了(可以定制为一个盘古大陆或多度大小)

给你一个实用的想法我要找的是文明算法:

[hill generation、perlin、diamond square]……这种算法似乎适用于处理同样具有高度分量的平铺贴图,但这不是我的情况

但这是你的情况。山比平原高,平原比水高

                        ___/
                    ___/ ___ Mountain cutoff
                ___/
         ______/
    ____/ ___ Water cutoff
__/
您可以量化数据,这样,如果数据在一组级别之间,它将被视为一种类型的平铺,而当数据在不同的范围内时,它将是一种不同类型的平铺。您将丢弃一些细节,但仍然可以获得与生成的噪波类型相匹配的轮廓


这可能需要大量的调整,并且需要您自己生成其他陆地要素(除了不可通行的山脉),但您必须对任何内容生成解决方案进行大量调整。

我使用了一种其他人称为使用“蚂蚁”的方法用于创建随机地形。所用方法的说明:

首先,我使用一个专门的tile类的二维矩形数组(x,y)生成了一个tilemap

然后我创建了一个特殊的“ant”类,可以将其视为一个执行“步骤”的无形实体在tilemap周围。每次蚂蚁移动到一个新的瓷砖上,底层的地形类型都会改变。蚂蚁可以朝8个方向移动,每次移动一个瓷砖时都会改变方向。每一步后的方向都是随机的

我用固定或随机的生命周期产卵固定或随机数量的蚂蚁。生命周期是在移除之前它可以穿过/步进到的瓷砖数量

为了能够控制最常见的地形类型,我创建了一个“地形类型”数组。若要在所有类型的地形之间获得相等的平衡,请仅将每种地形类型中的一种添加到地形类型数组中。如果希望某个地形类型更常见,请使用该特定地形类型向数组中添加更多条目

然后,当蚂蚁需要确定要更改的地形时,可以在地形类型数组中使用随机整数作为数组索引进行查找

需要对参数(蚂蚁数量、蚂蚁寿命、地形类型数组)进行一些调整,但到目前为止,我已经获得了一些非常好的地形

它可以通过使用更复杂类型的蚂蚁类来进一步增强,例如以专门模式遍历的蚂蚁类等。为了在海洋中建造可信的岛屿,您可能需要修改蚂蚁的行为,以便它们在移动方式方面有一些限制(这样您就不会随机获得长的“尖峰”指陆地、非常分散的小岛等)

下面是一个森林的tilemap示例,它是由我使用ant方法制作的一个小应用程序按程序生成的。希望这能让你上路

您可以在以下位置获取应用程序的源代码(VB.NET)


如果你想了解更多关于程序性内容生成算法、技术、体验等的信息,我最近发布了。这似乎是一个很好的资源,涵盖了你在问题中提到的hightmap算法。我的网站没有,我也没有以任何方式参与其中-它看起来很棒,所以我想插上它:)+1;这是一种有趣的方法,有点类似于。看起来你基本上得到了一个随机的分组分布,从表面上看,这似乎是你想要的。我认为这种方法不太可能获得平滑的渐变,尤其是与柏林噪声相比,尽管我觉得对于某些瓷砖类型(例如树木),它可能更具吸引力。至于你的“数字表”,这与我的答案相似。在询问时,我认为这并不存在。现在有