53

我想知道为什么在 Simplex 出现后 Perlin 噪声在今天仍然如此流行。单纯形噪声是由 Ken Perlin 自己制造的,它被假设接管了他的旧算法,该算法在更高维度上速度较慢且质量更好(没有可见的伪影)。

单纯形噪声于 2001 年问世,在这 10 年中,在生成地形高度图、创建程序纹理等方面,我只看到人们谈论 Perlin 噪声。

任何人都可以帮助我,Simplex 噪音有什么缺点吗?我听说 Perlin 噪声在 1D 和 2D 噪声方面更快,但我不知道这是否属实。

谢谢!

4

8 回答 8

30

“如果它没有坏,就不要修理它。”

看看你是否能找到任何人告诉你为什么 Simplex 更好。“它更快并且扩展到多个维度”和“简单噪声尝试降低更高维噪声函数的复杂性”是我发现的。我们中的大多数人都在 2 或 3 维中工作,如果我们足够幸运能够随着时间的推移做某事,也许是 4 维。

我认为可以公平地说,Perlin 的实时使用量太少,处理速度太慢,对于大多数目的来说,标准的 Perlin 噪声就足够了。在预渲染(例如电影行业)中,时间并不重要,因为无论如何渲染都很慢;在实时模拟中,我们有足够的方法来减少正在进行的处理范围,您不太可能每隔几纳秒/毫秒就生成大量噪声图——这只是基本的实时优化。

于 2011-08-04T16:17:21.143 回答
26

如果仅仅是因为这个名字,我一点也不感到惊讶。您必须在 Perlin 噪声和 Simplex 噪声之间进行选择。后者较新并且有一些优势。但是,你知道,这听起来像是两者的“简单”版本。我会选择更复杂的;噪音应该很复杂,不是吗?

人们往往是相当非理性的。

于 2011-06-23T19:00:12.433 回答
8

Ken Perlin 为他的单纯形噪声算法申请了专利。据我所知,他的经典算法没有专利。

于 2015-07-19T22:22:41.087 回答
7

对经典 Perlin 噪声的一些偏好可能来自能够使用已知值导致已知的视觉特征,而不是投入所需的时间来找到使用单纯形噪声获得等效输出所需的输入参数。

[simplex noise] 与它的视觉特征略有不同,因此它并不总是直接替代经典噪声的插件。依赖于经典噪声的详细特征的应用程序,例如精确的特征大小、精确的值范围或更高阶的统计数据,可能需要一些修改才能在使用单纯形噪声时看起来不错。
Stefan Gustavson 的Simplex 噪声揭秘

于 2012-11-11T20:56:05.663 回答
4

只是一些轶事经验,我使用经典 Perlin 噪声的原因是因为 Ken Perlin 有一个经典 Perlin 噪声的C 实现,同时提供了改进的 Perlin 噪声的Java 实现。听起来很傻,经典的 Perlin 噪音更容易复制并粘贴到我的程序中,所以这就是我使用它的原因。我一直打算转而移植那个 Java 实现,但经典的 Perlin 似乎工作得很好,所以我从来没有费心添加它。

Stefan Gustavson 有一些非常好的 Simplex Noise 的 C 实现,这里

于 2012-12-21T01:54:40.850 回答
2

我还没有处理过单纯形噪声,但我可以想到几个原因:

  • 也许是因为我们习惯了正方形和 90 度角?正方形、立方体……对我们来说比三角形、四边形或超四边形更自然。
  • perlin 噪声中的每一层只是一个简单的位图。
  • 柏林噪声的输出很容易平铺正方形。纹理通常是平铺的正方形。
  • 您通常使用低维噪声。根据我的经验,2D 和 3D 是最常见的。
  • 单纯形噪声更难理解和实施
  • 可能图形卡中的采样器可以对 perlin 噪声中使用的正交位图进行插值,但不能对单纯形噪声中使用的 60 度角位图进行插值。(这点可能有误,我几年没用显卡了)
于 2011-06-22T13:55:06.460 回答
1

单纯形噪声看起来更糟恕我直言,很多人认为它在更高维度上看起来“越来越糟糕”。对于大多数应用程序,我仍然会推荐它而不是 perlin,因为大多数应用程序不会只使用原始单纯形,而是使用它的八度音阶,它看起来与 perlin 的八度音阶大致相同,并且对于八度音阶来说要快得多。

于 2019-05-25T14:08:54.713 回答
1

我会直截了当地回答这个问题,我会说这是因为 Perlin 噪音非常容易让你头脑发热。另一方面,单纯形噪声是非常复杂和毛茸茸的野兽。启动和运行 Perlin 实现比 simplex 容易得多,因此得到更多使用。两者在视觉上非常相似(尤其是在您稍微操纵噪声之后)对单纯形的情况没有帮助。

Kenneth Perlin 自己为基于硬件的实现设计了单纯形算法,因此做出了使这更容易的设计决策。这方面的一个例子可以从专利中的这个引文中看到。

需要表内存:最初的 Noise 算法依赖于大量的表查找,这在软件实现中是相当合理的,但在硬件实现中是昂贵的并且构成成本瓶颈,特别是当需要多个 Noise 函数实例时在平行下。理想情况下,Noise 实现不应该依赖于存在显着大小的表。

于 2017-04-26T07:39:53.037 回答