2011-12-11 16 views
10

Oltre allo gamedev.SE abbiamo scoperto che lo flash implementation of Perlin-noise sembra deviare parecchio dalle altre implementazioni.Come è implementato il flash Perlin-noise?

Non ho trovato nessun dettaglio di implementazione in linea, ma mi chiedevo se qualcuno può dire quale algoritmo viene usato per il rumore Perlin in flash.

Utilizzando bitmapData.perlinNoise(32, 32, 1, 200, false, false, 7, true); genera immagini come questa dove solo il parametro numOctaves è stato cambiato (1, 2, 4 da sinistra a destra):

perlin noise in flash

Tuttavia altre implementazioni di Perlin rumore sembrano abbastanza diversa. Per esempio l'immagine dal Wikipedia article about Perlin-noise:

Perlin noise as depicted on Wikipedia

anche this Actionscript Implementation of Perlin-noise produce risultati molto diversi, come si può vedere nelle immagini seguenti (Ottave 1, 2 e 4 da sinistra a destra):

Perlin noise AS3

Quello che mi interessa maggiormente è l'aspetto del rumore con una sola ottava. Nell'implementazione flash è possibile vedere chiaramente che il rumore sta formando qualcosa come blob separati.

Importante: il disturbo generato in flash utilizza false per il parametro fractalNoise. Se fractalNoise è impostato su true, i risultati sono in realtà molto simili a quelli di Wikipedia e altre implementazioni.

La descrizione del parametro recita:

valore booleano. Se il valore è true, il metodo genera rumore frattale; altrimenti, genera turbolenza. Un'immagine con turbolenza ha discontinuità visibili nel gradiente che possono rendere meglio l'approssimazione di effetti visivi più nitidi come fiamme e onde dell'oceano.

Come possiamo vedere, si parla di turbolenze per descrivere il metodo che genera il rumore. Quindi immagino che la domanda sia: l'output generato dal flash è ancora Perlin-noise? O c'è un altro nome per quel tipo di rumore? E soprattutto: dove si può trovare un'implementazione per creare rumore come questo?

risposta

1

E 'stato un momento luuungo da quando ho fatto alcuna elaborazione delle immagini, ma forse un po' di questo vi aiuterà:

Riferimenti: (e le persone che conoscono le risposte ...) http://www.kelvinluck.com/assets/perlin_noise_experiments/, http://www.quasimondo.com/archives/000672.php, http://www.sjeiti.com/?p=305

La mia comprensione è che l'implementazione di Flash sta generando risultati basati su calcoli integer anziché su float. Questo spiegherebbe perché il rendering è veloce, ma anche leggermente diverso nell'aspetto.

Spero che almeno ti metta nella giusta direzione ...

+0

Siamo spiacenti, ma non è quello. Ho persino usato il codice di uno dei tuoi link per generare le immagini del rumore a cui non sono * interessato *. L'implementazione flash non è diversa perché è basata su un numero intero (non lo è) e se si esegue l'output di un'immagine alla fine, avrai numeri interi, non c'è modo di aggirarlo. L'implementazione del flash ti consente di scegliere tra "turbolenza" e "normale" rumore. Quello che mi interessa è un algoritmo per ** turbolenza **. Se cerchi immagini di Google per "rumore di turbolenza" e "perlin noise" vedrai la differenza. – bummzack

4

C'è una certa confusione sulla terminologia, a quanto pare. Ma tecnicamente, il rumore descritto da Perlin era di una sola ottava, senza alcuna sommatoria. Sembrava la prima immagine di Wikipedia.

Sono quasi sicuro che quasi nessuno lo usa davvero. Ognuno aggiunge poche ottave, di solito aumentando l'ampiezza a frequenze più basse. Il "quanto più grande" è la persistenza. Ad ogni modo, quando lo aggiungi, si chiama rumore frattale.

"Perlin noise" in realtà significa solo che si creano una serie di gradienti casuali e li si interpola. Ma la gente fa riferimento al rumore frattale come rumore di Perlin, perché è una somma di diverse onde sonore di Perlin.

Si noti che spesso, come nelle implementazioni di riferimento, le funzioni di disturbo Perlin e Simplex hanno valori di uscita centrati su 0 e (a volte) ridimensionati a [-1, +1]. Inoltre, questi sono simili ma non esattamente identici - il rumore Simplex sembra un po 'diverso. A volte sono entrambi definiti rumore di Perlin, perché Ken Perlin originariamente pensava al rumore di Perlin (lo chiamava solo "rumore"), e in seguito lo accelerò rimuovendo alcune ridondanze e creando il rumore simplex (che chiamò "rumore migliorato").). Simplex può sembrare un po 'più scuro da solo (la griglia è diversa, quindi ovviamente ha un aspetto diverso) e anche le sezioni attraverso il rumore di dimensione superiore non si comportano come con Perlin.

Problemi correlati