08.10.2013 Aufrufe

Gradientenbasierte Rauschfunktionen und Perlin Noise - Campus ...

Gradientenbasierte Rauschfunktionen und Perlin Noise - Campus ...

Gradientenbasierte Rauschfunktionen und Perlin Noise - Campus ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Burger: <strong>Gradientenbasierte</strong> <strong>Rauschfunktionen</strong> <strong>und</strong> <strong>Perlin</strong> <strong>Noise</strong> 14<br />

noise<br />

0.5<br />

(fn) (x)<br />

0.5<br />

0.5 1 1.5 2 2.5 3 3.5<br />

<strong>Noise</strong>(x) =<br />

0.5<br />

M−1 0.5<br />

n=0 an ·noise (fn) (x)<br />

0.5 1 1.5 2 2.5 3 3.5<br />

Abbildung 9: Kombinierte <strong>Perlin</strong> <strong>Noise</strong>-Funktion <strong>Noise</strong>(x), bestehend aus<br />

M = 3 gewichteten Teilfunktionen an · noise (fn) (x), mit n = 0,1,2, den<br />

Frequenzen f0 = 1, f1 = 2, f2 = 4 <strong>und</strong> den Amplituden a0 = 1, a1 = 1<br />

a2 = 1<br />

4<br />

(Persistenz φ = 1<br />

2 ).<br />

die für jedes beliebige p ∈ Z wiederholbar <strong>und</strong> eindeutig einen pseudozufälligen,<br />

reellen Wert im Intervall [0,1] liefert. Die durch<br />

grad(i) = 2·hash(i)−1, (44)<br />

erzeugten Gradientenwerte liegen somit gleichverteilt im Intervall [−1,1].<br />

<strong>Perlin</strong> verwendet dafür eine spezielle Hashmethode, die auf der wiederholten<br />

Anwendung einer kurzen, „zufälligen“ Permutationstabelle beruht. Details zu<br />

diesem Verfahren <strong>und</strong> alternativen Hashfunktionen finden sich nachfolgend<br />

in Abschnitt 5.<br />

2.4.2 Verwendung eines vorberechneten Arrays<br />

Eine Alternative zur Verwendung einer Hashfunktion ist, alle notwendigen<br />

Gradientenwerte einmal mithilfe eines herkömmlichen Zufallsgenerators zu<br />

berechnen <strong>und</strong> in einer entsprechenden Tabelle<br />

G[i] ← random(−1,1)<br />

abzulegen <strong>und</strong> anschließend durch einfachen Tabellenzugriff<br />

grad(i) := G[i]<br />

beliebig oft <strong>und</strong> ohne Neuberechnung zu verwenden. Ein Vorteil ist u. a., dass<br />

wir zur Initialisierung des Arrays einen beliebigen Standard-Zufallsgenerator<br />

verwenden können <strong>und</strong> uns daher um die Periodenlänge keine Gedanken<br />

machen müssen.<br />

x<br />

x<br />

2 ,

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!