4

我有兴趣为我正在开发的 2D 游戏生成 3D 高度图。我正在使用它来创建像 Minecraft 或 Dwarf Fortress 中的地块。

我之前创建了 2D 高度图,但我使用了一种非常基本的算法,该算法只是在完全随机噪声数组的点之间进行插值以创建固定大小的地图。但是,这不会平铺,因为如果我尝试在其旁边添加新地图,则它不会考虑现有地图的高度。

我已经阅读了有关 Perlin 和 Simplex 噪声的信息,但我现在对如何将 Perlin 或 Simplex 噪声应用于高度值的二维数组感到困惑。

对此的任何帮助将不胜感激。我不知道该怎么办了。乐谱上没有的“八度音阶”这个词让我害怕。

4

2 回答 2

2

确切地说,您必须寻找 Perlin/Simplex 噪声。把它想象成一个函数 f(x,y,...)(尽可能多的变量),它将输出看起来随机的噪声。与纯噪声的不同之处在于它作用于梯度,因此它看起来更自然,因为它“绘制”梯度而不是具有高局部可变性的普通噪声。单纯形噪声与 Perlin 的噪声几乎相同,但它将空间划分为单纯形,而不是像 Perlin 那样在 n 维网格中运行。这减轻了计算成本并有更多的好处

这可能看起来很可怕,但实际上很简单。您害怕八度音阶,但它们与音乐中的八度音阶几乎相同:只是更高(或更低)频率的噪声与原始输出混合。说到乐谱,就像同时弹奏C4和C5一样。它仍然是 C,但它添加了一些风味(波形中的小尖峰。)不要害怕并继续研究,这并不难。

关于平铺:

如果您的意思是线性平铺(就像 Minecraft 一样),您只需为噪声算法使用相同的种子。一旦你接近你的新边界,只需生成新的数据块,它就会完美地平铺(就像你无限地填充噪音一样。)

如果您的意思是圆环平铺(重复平铺,例如 Pacman),我发现最好的解决方案是生成噪声平铺,然后在边界附近插值,就好像它是平铺的一样。噪波会变形以匹配侧面,并且完全可以平铺。

于 2012-02-07T16:50:03.577 回答
1

我认为您的问题可能措辞不正确。高度图本质上是 2D 的,您可以使用它来生成 3D 地形(网格)。

http://en.wikipedia.org/wiki/Heightmap

如果是这种情况......那么您可以使用 Perlin 噪声函数来创建 2D 图像并将其用于高度图。如果您不确定创建的是什么,您可以使用 GIMP 或 Photoshop 或类似工具在 2D 画布上创建 Perlin 噪波,例如。

Minecraft 利用 Perlin 噪声函数来创建 3D 噪声立方体。因此,在高度图是 2D Perlin 噪声的情况下,Minecraft 是 3D Perlin 噪声。您还可以生成 1D Perlin 噪声。

Perlin 噪声函数的优点在于您可以通过数学控制纹理的“分辨率”和“偏移”,从而创建无缝环境。我相信 Minecraft 使用 Perlin 噪声作为基础,然后继续使用一些元胞自动机进行最后润色。

我不熟悉单纯形噪声。

编辑:这是一个测试一些数学函数的链接(处理中) http://processing.org/learning/basics/noise2d.html

于 2011-07-08T11:58:25.233 回答