如何实现闪光灯中的Perlin噪声?

时间:2011-12-11 21:35:45

标签: flash implementation perlin-noise

gamedev.SE,我们发现flash implementation of Perlin-noise似乎与其他实现有很大差异。

我没有在网上找到任何实现细节,但我想知道是否有人可以告诉哪个算法用于闪存中的Perlin噪声。

使用bitmapData.perlinNoise(32, 32, 1, 200, false, false, 7, true);生成此类图片,其中只有numOctaves参数已从左到右更改为124:< / p>

perlin noise in flash

然而,Perlin噪声的其他实现看起来完全不同。例如Wikipedia article about Perlin-noise

中的图片

Perlin noise as depicted on Wikipedia

同样this Actionscript Implementation of Perlin-noise会产生截然不同的结果,您可以在以下图片中看到(从左到右的八度划分124):

Perlin noise AS3

我最感兴趣的是只有一个八度的噪音。在闪存实现中,您可以清楚地看到,噪声正在形成像分离的blob。

重要:Flash中生成的噪音使用false作为fractalNoise参数。如果fractalNoise设置为true,则结果实际上与维基百科和其他实现中的结果非常相似。

参数说明如下:

  

布尔值。如果该值为true,则该方法生成分形噪声;否则会产生湍流。具有湍流的图像在梯度中具有可见的不连续性,这可以使其更好地近似更清晰的视觉效果,如火焰和海浪。

正如我们所看到的,他们谈到湍流来描述产生噪音的方法。所以我想问题是:闪存产生的输出是否仍然是Perlin噪声?或者那种噪音还有另一个名字吗?最重要的是:在哪里可以找到一个像这样产生噪音的实现?

2 个答案:

答案 0 :(得分:4)

显然,术语存在一些混乱。但从技术上讲,佩林所描述的噪音只是一个八度,而没有任何总和。它看起来像是第一个维基百科图像。

我很确定几乎没有人真正使用它。每个人都加起来几个八度,通常在较低的频率下使振幅变大。 “有多大”是持久性。无论如何,当你把它加起来时,它被称为分形噪声。

“Perlin噪音”实际上只意味着你制作了一堆随机渐变,并插入它们。但人们将分形噪声称为Perlin噪声,因为它是几个Perlin噪声波的总和。

请注意,通常,如在参考实现中,Perlin和Simplex噪声函数输出值以0为中心,(有时)缩放为[-1,+ 1]。此外,这些相似但不完全相同 - 单工噪声看起来有点不同。它们有时被称为Perlin噪音,因为Ken Perlin原本想到Perlin噪音(他称之为“噪音”),然后通过去除一些冗余并产生单一噪音(他称之为“改善的噪音”)来加速它)。 Simplex本身看起来有点暗(网格不同,所以很明显看起来不同)而且高维噪声的部分与Perlin的行为不同。

答案 1 :(得分:1)

自从我进行任何图像处理以来,这是一个漫长的时间,但也许其中一些会有所帮助:

参考文献:(以及知道答案的人......)http://www.kelvinluck.com/assets/perlin_noise_experiments/http://www.quasimondo.com/archives/000672.phphttp://www.sjeiti.com/?p=305

我的理解是Flash实现是基于整数计算而不是浮点数输出结果。这可以解释为什么渲染速度很快,但外观也略有不同。

希望至少让你朝着正确的方向前进......