3D Perlin噪声函数如何用于生成地形?

15

我能理解使用 2D Perlin 噪声函数来生成高度值,但是我不明白为什么要使用 3D Perlin 噪声函数。在Notch的博客中,他提到了在 Minecraft 中使用 3D Perlin 噪声函数来生成地形。有人知道如何实现以及它的用途吗?如果您传递 xyz 值,这难道不意味着您已经有了高度吗?

4个回答

44
这篇文章详细介绍了他为什么使用3D噪声:
我使用了2D Perlin噪声高度图......但它的缺点是相当沉闷。具体而言,这种方法无法生成任何凸起。
因此,我将系统切换到基于3D Perlin噪声的类似系统。不再采样“地面高度”,而是将噪声值视为“密度”,低于0的任何内容都将是空气,高于或等于0的任何内容都将是地面。

13

嗯,Minecraft是关于矿井的。因此,Notch试图解决的问题是:“如何在我的世界中获得洞穴/悬崖?”

由于2D Perlin噪声生成美丽/平滑的山丘,3D Perlin噪声将在您的3D体素网格中生成美丽/平滑的山丘和漂亮的洞穴。

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

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


1
链接已经失效,幸运的是archive.org有一个2008年的快照:http://web.archive.org/web/20081118194515/http://peter.grumpykitty.biz/perlin.html - Tyron
@Tyron 谢谢!已将其添加到答案文本中。 - jpaugh

5

2
该项目实际上托管在GitHub上 - noise.cppmapgen.cpp - new123456
@new123456 谢谢!链接已添加。 - jpaugh

0
如果您仍然感到困惑,我曾经有同样的问题,并且已经弄清楚了,并制作了可能是整个 YouTube 上在这个主题上唯一的教程视频!
我制作的关于 3D Perlin 噪声的视频解释: https://youtu.be/plLVPJJCL8w

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接