如何使用3d perlin噪声函数生成地形?

时间:2011-05-22 23:16:28

标签: terrain procedural-generation minecraft perlin-noise

我可以使用2D Perlin噪声函数来包围我的头来生成高度值,但我不明白为什么会使用3D Perlin噪声函数。在Notch's blog中,他提到使用3D Perlin噪声函数在Minecraft上生成地形。有谁知道这将如何做以及为什么它会有用?如果您传递xyz值并不意味着您已经拥有高度?

3 个答案:

答案 0 :(得分:43)

文章说明了他使用3D噪音的确切原因:

  

我使用了2D Perlin噪声高度图...   ......但是相反的缺点   沉闷。具体来说,没有办法   这种方法可以产生任何悬垂。

     

所以我把系统换成了   基于3D Perlin的类似系统   噪声。而不是采样“地面   高度“,我将噪音值视为   “密度”,任何更低的   空气和任何东西都是0   高于或等于0将是   地面。

答案 1 :(得分:13)

嗯,我的世界是关于地雷。所以,Notch试图解决的问题是:“我如何在我的世界中获得漏洞/悬空?”

由于2D perlin噪音会产生漂亮/平滑的山丘,3d perlin噪音会在你的3D体素网格中产生漂亮/平滑的山丘和漂亮的洞。

可以找到here的实现(虽然这是一个N维解决方案)。

在其他用例中,3D perlin噪声的Z分量设置为当前时间。通过这种方式,您可以在不同的2d perlin噪声之间实现平滑过渡,并且可以用作流体纹理的基础。

答案 2 :(得分:5)

您应该查看Minetest来源,特别是文件noise.cppmap.cpp