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

Xav*_*ier 14 procedural-generation terrain perlin-noise minecraft

我可以使用2D Perlin噪声函数来包围我的头来生成高度值,但我不明白为什么会使用3D Perlin噪声函数.在Notch的博客中,他提到使用3D Perlin噪声函数在Minecraft上生成地形.有谁知道这将如何做以及为什么它会有用?如果你是路过x,yz值没有暗示你已经拥有的高度?

Oli*_*rth 43

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

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

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

  • Hater必须讨厌! (6认同)

Mar*_*rth 13

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

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

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

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


小智 5

您应该查看Minetest源代码,尤其是noise.cppmap.cpp文件。

  • 该项目实际上托管在GitHub-[noise.cpp](https://github.com/minetest/minetest/blob/master/src/noise.cpp)和[mapgen.cpp](https://github.com) /minetest/minetest/blob/master/src/mapgen_v7.cpp)。 (2认同)