15

我可以使用 2D Perlin 噪声函数来生成高度值,但我不明白为什么要使用 3D Perlin 噪声函数。在Notch 的博客中,他提到在 Minecraft 上使用 3D Perlin 噪声函数生成地形。有谁知道如何做到这一点以及为什么会有用?如果您正在传递x,yzvalues ,这是否意味着您已经拥有高度?

4

3 回答 3

43

这篇文章准确地说明了他使用 3D 噪声的原因:

我使用了 2D Perlin 噪声高度图……但缺点是相当沉闷。具体来说,这种方法无法生成任何悬垂。

所以我将系统切换到基于 3D Perlin 噪声的类似系统。我没有对“地面高度”进行采样,而是将噪声值视为“密度”,其中任何低于 0 的都是空气,任何高于或等于 0 的都是地面。

于 2011-05-22T23:20:39.913 回答
13

好吧,我的世界是关于地雷的。因此,Notch 试图解决的是:“我如何在我的世界中找到漏洞/悬垂?”

由于 2D perlin 噪声会生成漂亮/光滑的山丘,因此 3d perlin 噪声将在 3D 体素网格中生成漂亮/光滑的山丘和漂亮的洞。

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

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

于 2011-05-22T23:28:17.710 回答
5

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

于 2011-05-27T16:42:53.733 回答