在gamedev.SE,我们发现flash implementation of Perlin-noise似乎与其他实现有很大差异 .
我没有在网上找到任何实现细节,但我想知道是否有人可以告诉哪些算法用于闪存中的Perlin噪声 .
使用 bitmapData.perlinNoise(32, 32, 1, 200, false, false, 7, true);
生成这样的图像,其中只更改 numOctaves
参数( 1
, 2
, 4
从左到右):
然而,Perlin噪声的其他实现看起来完全不同 . 例如Wikipedia article about Perlin-noise中的图像:
另外this Actionscript Implementation of Perlin-noise会产生完全不同的结果,如下图所示(Octaves 1
, 2
和 4
从左到右):
我最感兴趣的是只有一个八度的噪音 . 在闪存实现中,您可以清楚地看到,噪声正在形成像分离的斑点 .
Important :闪存中生成的噪声使用 false
作为 fractalNoise
参数 . 如果 fractalNoise
设置为 true
,则结果实际上与维基百科和其他实现中的结果非常相似 .
参数说明如下:
布尔值 . 如果该值为true,则该方法生成分形噪声;否则会产生湍流 . 具有湍流的图像在梯度中具有可见的不连续性,这可以使其更好地近似更清晰的视觉效果,如火焰和海浪 .
我们可以看到,他们谈到湍流来描述产生噪音的方法 . 所以我想问题是:闪存产生的输出是否仍然是Perlin-noise?或者那种噪音还有另一个名字吗?最重要的是:在哪里可以找到一个像这样产生噪音的实现?
2 回答
显然,术语存在一些混乱 . 但从技术上讲,佩林所描述的噪音只是一个八度,而没有任何总和 . 它看起来像是第一个维基百科图像 .
我很确定几乎没有人真正使用它 . 每个人都加起来几个八度,通常在较低的频率下使振幅变大 . “有多大”是持久性 . 无论如何,当你把它加起来时,它被称为分形噪声 .
“Perlin噪音”实际上只意味着你制作了一堆随机渐变,并插入它们 . 但人们将分形噪声称为Perlin噪声,因为它是几个Perlin噪声波的总和 .
请注意,通常,如在参考实现中,Perlin和Simplex噪声函数输出值以0为中心并且(有时)缩放为[-1,1] . 此外,这些相似但不完全相同 - 单工噪声看起来有点不同 . 它们有时被称为Perlin噪音,因为Ken Perlin最初想到Perlin噪音(他称之为“噪音”),然后通过去除一些冗余并产生单纯噪声(他称之为“改善的噪音”)来加速它) . Simplex本身看起来有点暗(网格不同,所以显然看起来不同),而且高维噪声的部分与Perlin的行为不同 .
自从我进行任何图像处理以来,这是一个漫长的时间,但也许其中一些会有所帮助:
参考文献:(以及知道答案的人......)http://www.kelvinluck.com/assets/perlin_noise_experiments/,http://www.quasimondo.com/archives/000672.php,http://www.sjeiti.com/?p=305
我的理解是Flash实现是基于整数计算而不是浮点数输出结果 . 这可以解释为什么渲染速度快,但外观略有不同 .
希望至少让你朝着正确的方向前进......