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> 13<br />
Algorithmus 2: Generierung einer eindimensionalen <strong>Perlin</strong> <strong>Noise</strong>-Funktion<br />
mit mehreren Frequenzen.<br />
1: <strong>Noise</strong>(x,fmin,fmax,φ) ⊲ x,fmin,fmax,p ∈ R<br />
Returns the value of the one-dimensional, multi-frequency <strong>Perlin</strong><br />
noise function for position x. fmin,fmax specify the frequency range,<br />
φ denotes the persistence value for attenuating the amplitudes<br />
(0 < φ < 1).<br />
2: sum ← 0<br />
3: n ← 0 ⊲ n = 0,1,...<br />
4: f ← fmin ⊲ frequency fn ← fmin = f0<br />
5: a ← 1 ⊲ amplitude an ← a0 = φ 0<br />
6: while f ≤ fmax do<br />
7: sum ← sum +a·noise(f ·x) ⊲ noise() as defined in Alg. 1<br />
8: n ← n+1<br />
9: f ← 2·f ⊲ fn = 2 n ·fmin<br />
10: a ← φ·a ⊲ an = φ n<br />
11: end while<br />
12: return sum.<br />
13: end<br />
wobei der konstante Wert φ ∈ R als Persistence bezeichnet wird. Typische<br />
Werte für φ sind 0.25...0.5. Die Generierung einer eindimensionalen<br />
Rauschfunktion ist in Alg. 2 nochmals übersichtlich zusammengestellt. Abbildung<br />
9 zeigt ein Beispiel einer kombinierten Funktion bestehend aus drei<br />
Teilfunktionen mit f0 = 1 <strong>und</strong> φ = 0.5.<br />
2.4 Erzeugung der „zufälligen“ Gradientenwerte<br />
Bisher noch offen ist die Frage, wie die pseudo-zufälligen Gradientenwerte<br />
g i = grad(i) für beliebige i ∈ Z erzeugt werden. Die Abbildung grad(i) ist<br />
für eine bestimmte Rauschfunktion fix, d. h. grad(i) muss für ein bestimmtes<br />
i auch bei wiederholter Anwendung immer den selben Wert liefern. Es<br />
ist also nicht zulässig, bei jedem Aufruf von grad(i) einen beliebigen neuen<br />
Zufallswert zu berechnen.<br />
2.4.1 Verwendung einer Hash-Funktion<br />
Die übliche Methode ist die „on-the-fly“ Berechnung der Gradientenwerte für<br />
einen gegebenen Index i mittels einer Hash-Funktion<br />
hash(i) : Z → [0,1],