2

在学习创建循环生成艺术 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 Noise,如下所示。

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

戈兰·莱文的作品

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

4

1 回答 1

3

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 的直接替代品。

于 2021-01-03T00:17:42.143 回答