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> 23<br />
Ein N-dimensionaler Hyperwürfel besitzt entlang jeder Dimension k genau<br />
2 N−1 Kanten, die jeweils zwei seiner Eckpunkte p a,p b verbinden. Die<br />
Koordinatenvektoren dieser Endpunkte unterscheiden sich nur bezüglich der<br />
Dimension k, d. h.,<br />
p a[k] = p b[k] <strong>und</strong> p a[l] = p b[l] für l = k, 0 ≤ k < N.<br />
In jedem Interpolationsschritt wird zwischen den Werten der Tangentenfunktionen<br />
wa = ha(x) <strong>und</strong> wb = hb(x) von zwei in Dimension k benachbarten<br />
Eckpunktenp a,p b desxumschließenden Hyperwürfels interpoliert, <strong>und</strong> zwar<br />
in der bereits bekannten Form<br />
¯wa,b = (1−s(xk))·wa +s(xk)·wb, (73)<br />
wobei xk die k-te Komponente von x ist <strong>und</strong> s() die nichtlineare Überblendungsfunktion<br />
(Gl. 24 bzw. Gl. 27) bezeichnet. Bei jeder einzelnen Interpolation<br />
werden also die Werte von zwei Nachbarknoten auf einen Wert reduziert.<br />
Die so entstehenden Zwischenwerte können wiederum als Eckpunkte<br />
eines Hyperwürfels interpretiert werden, dessen Dimension gegenüber dem<br />
ursprünglichen Würfel um eins reduziert ist.<br />
Wir benötigen also N Interpolationsschritte, um die ursprünglich 2 N<br />
Knotenwerte eines N-dimensionalen Hyperwürfels auf einen Skalarwert (entspricht<br />
Dimension null) zu reduzieren. Es sollte belanglos sein, in welcher<br />
Reihenfolge entlang der einzelnen Dimensionen interpoliert wird. 14 Beispielsweise<br />
könnte die schrittweise Interpolation in folgender Sequenz über die<br />
Dimensionen k = 0,1,...N−1 ausgeführt werden:<br />
w (N) ← (w0,...w 2 N −1) = (hj(x),...h 2 N −1(x))<br />
w (N−1) ← interpolate(x,w (N) ,0)<br />
w (N−2) ← interpolate(x,w (N−1) ,1)<br />
.<br />
.<br />
w (N−k−1) ← interpolate(x,w (N−k) ,k) (74)<br />
.<br />
.<br />
w = w (0) ← interpolate(x,w (1) ,N−1)<br />
Dabei ist w (n) jeweils ein Vektor der Länge 2 n ; die Länge des Vektors w<br />
wird also in jedem Schritt um die Hälfte verkleinert. Das finale Ergebnis der<br />
Interpolation an der Position x, w = w (0) , ist ein skalarer Wert (bzw. ein<br />
null-dimensionaler Vektor).<br />
14<br />
Es wäre zu überprüfen, inwieweit konkret bei der <strong>Perlin</strong>-Interpolation das Ergebnis<br />
von der Reihenfolge der Dimensionen abhängt.