Perché è due volte più costoso realizzare una funzione di rumore che può essere piastrellata?


13

Ho visto in diversi punti che rendere il loop del rumore Perlin senza soluzione di continuità richiede di calcolarlo due volte in modi leggermente diversi e di sommare i due risultati.

Questa FAQ sulla matematica del rumore di Perlin fornisce una formula:

Floop(x,y,z)=(tz)F(x,y,z)+zF(x,y,zt)t

per fare una funzione rumore loop nella direzione . Esso menziona inoltre che tale estensione, per riprodurre in 2 dimensioni richiederebbe 4 valutazioni di e loop in 3 dimensioni prenderebbe 8 valutazioni di .FzFF

Comprendo che ciò fornisce un collegamento senza soluzione di continuità tra i riquadri che non è solo continuo ma continuamente differenziabile, ma intuitivamente mi aspetto che ciò avvenga se la funzione di rumore viene semplicemente valutata una volta con punti della griglia ridotti modulo le dimensioni del riquadro richiesto. Se la funzione noise è sempre e solo basata sui punti della griglia immediatamente circostanti (4 per il rumore 2D, 8 per il rumore 3D), sicuramente usando semplicemente i punti della griglia più a sinistra quando il punto da calcolare supera il bordo destro del riquadro, si otterrà il stessa qualità del rumore tra altri punti della griglia?

Dal momento che ho visto questo approccio di calcolo multiplo in diversi punti presumo che debba avere qualche vantaggio, ma sto lottando per vedere lo svantaggio semplicemente avvolgendo i punti della griglia all'inizio quando diventano troppo grandi. Cosa mi sto perdendo?

Risposte:


19

È un peccato che le persone lo raccomandino comunemente. La fusione tra due (o quattro, ecc.) Copie tradotte di una funzione di rumore in quel modo è una pessima idea. Non solo è costoso, non produce nemmeno risultati corretti!

Rumore di Perlin Rumore di Perlin miscelato

Sulla sinistra c'è un po 'di rumore Perlin. A destra sono due istanze di rumore Perlin, impilate e mescolate da sinistra a destra.

La differenza è piuttosto sottile, ma puoi vedere che la seconda immagine ha un contrasto più basso in una colonna verticale che corre verso il centro. Ecco dove c'è una fusione del 50% tra due diverse istanze della funzione noise. Una tale fusione non sembra l'originale funzione del rumore: sembra solo un pasticcio fangoso.

OK, quindi non è poi così male solo guardando il rumore grezzo ... ma se poi fai delle trasformazioni non lineari sull'immagine, il contrasto non uniforme può causare problemi. Ad esempio, ecco quelle immagini con soglia al 60%. (Pensa a generare isole in un oceano, per esempio.)

Rumore perlinato con soglia Rumore di Perlin miscelato con soglia

Ora puoi vedere chiaramente come l'immagine a destra ha meno aree bianche più piccole nel mezzo.

Come hai menzionato, per il rumore basato sulla griglia come Perlin, un modo migliore è quello di affiancare i gradienti pseudocasuali nei punti della griglia. È facile ed economico da fare, quindi puoi applicare l'algoritmo di interpolazione ai gradienti come al solito (proprio come l'interpolazione bilineare di una trama di piastrellatura). Questo produce rumore di piastrellatura senza strani artefatti, perché funziona con l'algoritmo del rumore sottostante piuttosto che sopra di esso. Puoi usare una strategia simile con il rumore di Worley (rumore cellulare) piastrellando i punti casuali della funzione che usa come base.

Tuttavia, con più ottave di rumore non è sempre così facile. Se la scala relativa tra le ottave (aka "lacunarity") non è un numero intero o un numero razionale semplice, allora potresti non essere in grado di trovare un comodo punto di affiancamento in cui tutte le griglie delle ottave coincidono. È possibile affiancare ciascuna ottava in modo indipendente, ma in questo caso il rumore complessivo non sarebbe ancora piastrellabile.


4
Le immagini affiancate fanno davvero la differenza per avere un'idea intuitiva della spiegazione. Lo terrò a mente per le mie risposte.
trichoplax,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.