我正在开发蠕虫风格的游戏,并希望以程序方式生成一些地形。以前,我已经使用Perlin噪声完成了很多地形生成,而这正是我在此游戏中开始使用的。唯一的问题是它太简单又无聊,给了我一些麻烦,但没有我想要的复杂性。我想拥有诸如洞穴和悬空山脉之类的功能,而且我不介意漂浮的岛屿之类的东西。这样的事情,甚至更疯狂也可以:
我想到先使用经典的Perlin噪波生成地形,然后才移除零件以创建洞穴,但并非如此,但是我很难指导移除这些零件。生成这样的地形还有其他选择吗?
我正在开发蠕虫风格的游戏,并希望以程序方式生成一些地形。以前,我已经使用Perlin噪声完成了很多地形生成,而这正是我在此游戏中开始使用的。唯一的问题是它太简单又无聊,给了我一些麻烦,但没有我想要的复杂性。我想拥有诸如洞穴和悬空山脉之类的功能,而且我不介意漂浮的岛屿之类的东西。这样的事情,甚至更疯狂也可以:
我想到先使用经典的Perlin噪波生成地形,然后才移除零件以创建洞穴,但并非如此,但是我很难指导移除这些零件。生成这样的地形还有其他选择吗?
Answers:
我建议您从2D Perlin噪声开始。像这样:
然后在图像上应用阈值,以便获得几个孤立的岛,如下所示:
我选择了0.04的阈值,高于该阈值的所有内容都会变为蓝色。其余的保持黑色。然后在那之后,是时候确定要保留哪些“岛”和丢弃哪些“岛”了。
一种可能的方法是在不同的高度从左到右遍历图像,并以给定的概率选择相交的“岛”。在示例图片中,最低线的概率为100%,因此将选择它穿过的每个岛(填充为白色)。第二行的概率为50%,最上面的行的概率为10%。
标记完岛后,您可以通过应用形态学操作(dilate)来缩小两者之间的差距
并且有可能的景观。
噪声的“粒度”将确定您的世界中的细节将有多小。因此,最好对这些值进行试验。
同样,您的“选择线”位于何处以及以何种概率定位,结果将大不相同。如果您在图像顶部附近有一条线很可能“选择”一个岛,那么您可以构建某种洞穴景观,等等。
我先从Perlin噪音开始,仔细过滤。您将以问题所附图片中的类似内容结束,带有浮岛。中庸之道删除浮岛以后使用计数算法喜欢讨论的一样在这里
我实际上是从bummzack出色的答案开始实施的。
这是我最终完成的步骤: