2011-12-11 102 views
10

gamedev.SE我們發現flash implementation of Perlin-noise似乎偏離了其他實現。Flash中的Perlin噪聲如何實現?

我沒有在網上找到任何實現細節,但我想知道是否有人可以告訴哪種算法被用於閃存中的珀林噪聲。

使用bitmapData.perlinNoise(32, 32, 1, 200, false, false, 7, true);產生這樣的圖像,其中僅numOctaves參數已經改變(124從左至右):

perlin noise in flash

但是培林噪聲的其他實現方式是另一番光景。例如從Wikipedia article about Perlin-noise圖像:

Perlin noise as depicted on Wikipedia

而且this Actionscript Implementation of Perlin-noise產生完全不同的結果,因爲你可以在下面的圖片看到(倍頻124從左至右):

Perlin noise AS3

我最感興趣的是隻有一個八度音的外觀。在閃存實現中,您可以清楚地看到,噪聲正在形成像分離的斑點之類的東西。

重要:閃存中產生的噪聲使用false作爲fractalNoise參數。如果fractalNoise設置爲true,則結果實際上與來自維基百科和其他實現的結果非常相似。

的參數的說明的內容如下:

一個布爾值。如果該值爲真,則該方法產生分形噪聲;否則,它會產生湍流。具有湍流的圖像在漸變中具有可見的不連續性,可以使其更接近火焰和海浪等更加銳利的視覺效果。

正如我們所看到的,他們說動盪來描述產生噪聲的方法。所以我想這個問題是:閃存產生的輸出仍然是Perlin噪聲嗎?或者還有那種噪音的另一個名稱?最重要的是:在哪裏可以找到一個實現來製造這樣的噪音?

回答

1

它一直以來我所做的任何圖像處理的looong時間,但也許一些這將幫助:

參考:(誰知道答案的人......)http://www.kelvinluck.com/assets/perlin_noise_experiments/http://www.quasimondo.com/archives/000672.phphttp://www.sjeiti.com/?p=305

我的理解是Flash的實現是基於整數計算輸出結果而不是浮點數。這可以解釋爲什麼渲染速度很快,但外觀也略有不同。

希望至少能讓你朝着正確的方向前進......

+0

對不起,但那不是。我甚至用你的鏈接的代碼來生成我不感興趣的噪聲圖像。Flash的實現沒有什麼不同,因爲它是基於整數的(不是),如果你最終輸出圖像,你會有整數,這是沒有辦法的。閃光燈實施可讓您在「湍流」和「常規」噪音之間進行選擇。我感興趣的是**湍流**算法。如果你搜索谷歌圖片「湍流噪音」和「珀林噪音」,你會看到不同之處。 – bummzack

4

顯然,術語存在一些混淆。但從技術上講,Perlin所描述的噪音是一個單一的八度,沒有任何總結。它看起來像第一個維基百科圖像。

我很確定幾乎沒有人真正使用這一點。每個人都加了幾個八度,通常在較低的頻率上使幅度變大。 「多大」是持久性。無論如何,當你添加它時,它就被稱爲分形噪聲。

「佩林噪聲」實際上只意味着你做了一堆隨機梯度,並對它們進行插值。但人們將分形噪聲稱爲柏林噪聲,因爲它是幾個柏林噪聲波的總和。注意,通常,與參考實現中一樣,Perlin和Simplex噪聲函數的輸出值集中在0和(有時)縮放爲[-1,+1]。此外,這些是相似的,但不完全相同 - 單純形噪聲看起來有點不同。它們有時被稱爲佩林噪聲,因爲肯佩林最初認爲佩林噪聲(他稱之爲「噪聲」),然後通過消除一些冗餘並創建單工噪聲(他稱之爲「改善噪聲」 )。單純形本身可能看起來有點暗(網格不同,所以顯然它看起來不同),並且高維噪聲的部分與Perlin的表現不一樣。