Gradientenbasierte Rauschfunktionen und Perlin Noise - Campus ...
Gradientenbasierte Rauschfunktionen und Perlin Noise - Campus ...
Gradientenbasierte Rauschfunktionen und Perlin Noise - Campus ...
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 ,