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

W26*_*268 3 processing generative-art perlin-noise simplex-noise p5.js

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

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

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

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

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

戈兰·莱文的作品

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

小智 5

2D 噪声可以产生 1D 环路。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 的直接替代品。