2011-05-22 193 views
13

我可以使用2D Perlin噪声函数来生成高度值,但我不明白为什么会使用3D Perlin噪声函数。在Notch's blog中,他提到使用3D Perlin噪声函数来处理Minecraft上的地形生成。有谁知道如何做到这一点,为什么它会有用?如果您通过xyz这些数值并不意味着您已经拥有身高?三维柏林噪声函数如何用于生成地形?

回答

12

那么,Minecraft是关于矿山。所以,诺奇试图解决的问题是:“我的世界如何获得洞/突出物?”

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

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

在其他用例中,3D珀林噪声的Z分量设置为当前时间。这样你就可以在不同的二维珀林噪声之间平滑过渡,并且可以用作流体纹理的基础。

+1

链接已损坏,archive.org幸运地拥有2008年的快照:http://web.archive.org/web/20081118194515/http://peter.grumpykitty.biz/perlin.html – Tyron 2015-10-20 12:31:22

+0

@Tyron谢谢!将其添加到回答文本 – jpaugh 2015-12-02 22:28:49

41

文章说究竟为什么他使用3D降噪:

我用一个2D Perlin杂高度图... ... 但觉得挺 沉闷的缺点。具体而言,这种方法无法生成任何突出部分。

因此,我将系统切换为基于3D Perlin 噪音的类似系统。我没有采样“地面 高度”,而是将噪声值视为 “密度”,其中任何低于0的任何东西都将是空气,并且任何高于或等于0的东西都将是 地面。

+6

仇恨的人必须讨厌! – Brian 2011-06-05 16:26:04

4

你应该看一下Minetest的来源,特别是在文件noise.cppmap.cpp

+1

该项目实际上托管在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)。 – new123456 2013-08-05 13:11:55

+0

@ new123456谢谢!链接添加。 – jpaugh 2015-12-02 22:31:47