使用 4D OpenSimplex Noise 而不是 2D Perlin Noise 来创建循环噪声的目的是什么?

问题描述

在我学习创建循环生成艺术 GIF 的方法时,我遇到了两种不同的制作噪音循环的方法

  1. Etienne Jacob 在其 tutorial 中的示例代码使用 4D OpenSimplex Noise,如下所示。

    (float)noise.eval(scl * x,scl * y,R * cos(TWO_PI * t),R * sin(TWO_PI * t));

  2. Daniel Shiffman 在他的 tutorial 中的示例代码使用 2D Perlin Noise,如下所示。

    噪声(cos(a) + 1,sin(a) + 1);

Golan Levin's work

我的理解是,两者都通过在噪声空间中“绕圈走”来实现循环,如上面的 gif。但我不清楚两者之间的区别。选择 4D OpenSimplex 而不是 2D Perlin Noise 来创建循环噪声的意图是什么?

解决方法

二维噪声可以产生一维循环。 4D 噪声可以产生双向循环的 2D 平面(不同的示例),或具有循环时间轴的非循环的 2D 平面(本示例)。基本上,需要两个非循环维度才能创建一个循环维度。

4D 示例在图像上的每个 (x,y) 点处生成一条循环的 1D 线,但不同之处在于您可以改变 (x,y) 以生成本身随时间动画的 2D 图像。对于由 2D 噪声产生的循环线,您只有那条线本身。 (x,y) 来自 4D 噪声的两个额外维度。

此外,Perlin 显示出很多 45 度和 90 度偏差。 Simplex 在这方面要好得多,我设计了 OpenSimplex 来满足这一点。 Perlin 适用于循环的 1D 线,但如果您使用 2D 噪声生成 2D 结果,那么您会看到偏差。

不过,我建议您现在使用 OpenSimplex2 而不是 OpenSimplex(无耻插件),因为它应该在空间上更加统一。特别是OpenSimplex2S,它是 2014 OpenSimplex 的直接替代品。