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

What is the intent of using 4D OpenSimplex Noise instead of 2D Perlin Noise to create a looping noise?

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

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

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

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

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

我的理解是,两者都是像上面的gif那样,在噪音space中“绕圈子走”来实现循环。但是我不清楚两者之间的区别。选择 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 适用于循环一维线,但如果您使用二维噪声生成二维结果,那么您会看到这种偏差。

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