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> 28<br />
Fall dann<br />
grad(u,v) =<br />
<br />
gradx(u,v,w)<br />
= 2·<br />
grady(u,v,w) <br />
hashx(u,v)<br />
−<br />
hashy(u,v)<br />
<br />
1<br />
. (82)<br />
1<br />
beziehungsweise im dreidimensionalen Fall<br />
⎛ ⎞ ⎛ ⎞ ⎛ ⎞<br />
gradx(u,v,w) hashx(u,v,w) 1<br />
grad(u,v,w) = ⎝grady(u,v,w)<br />
⎠ = 2· ⎝hashy(u,v,w)<br />
⎠− ⎝1⎠.<br />
(83)<br />
gradz(u,v,w) hashz(u,v,w) 1<br />
Damit liegen die Komponenten des resultierenden Gadientenvektors jeweils<br />
wiederum im Intervall [−1,1]. Im allgemeinen, N-dimensionalen Fall weist<br />
der zu erzeugende Grandientenvektor N Elemente auf, d. h.,<br />
⎛ ⎞ ⎛ ⎞<br />
grad0(p) hash0(p)<br />
⎜ grad ⎟ ⎜<br />
1(p) ⎟ ⎜ hash1(p) ⎟<br />
grad(p) = ⎜ ⎟ = 2· ⎜ ⎟<br />
⎝ . ⎠ ⎝ . ⎠<br />
gradN−1(p) hashN−1(p)<br />
−<br />
⎛ ⎞<br />
1<br />
⎜<br />
⎜1<br />
⎟<br />
⎜ ⎟ = 2·hash(p)−1.<br />
⎝.<br />
⎠<br />
1<br />
(84)<br />
Die Verknüpfung der Koordinaten (u,v,w) sowie die Implementierung<br />
der drei Hash-Funktionen ist vom jeweiligen Hash-Verfahren abhängig, wie<br />
nachfolgend gezeigt.<br />
5.1 Hashing mit Permutationstabellen<br />
In <strong>Perlin</strong>’s Methode [8] wird die Hash-Funktion aus Effizienzgründen 16 durch<br />
mehrfache Verwendung einer fixen, zufälligen Permutationstabelle P der<br />
Größe 256 realisiert. Beispielsweise wird in [8] eine Permutationstabelle<br />
P = (151,160,137,91,...,61,156,180)<br />
verwendet, mit 0 ≤ i,P[i] < 256 <strong>und</strong> P(i) = P[j] für i = j (siehe die<br />
Auflistung auf S. 31). Im eindimensionalen Fall ist dann einfach<br />
hash(u) = 1<br />
·P[u mod 256]. (85)<br />
255<br />
Dabei wiederholt sich das Ergebnis zwar zyklisch mit der (relativ kurzen)<br />
Periode 256, allerdings fällt dies in der kombinierten <strong>Noise</strong>-Funktion aufgr<strong>und</strong><br />
der Verwendung mehrerer Frequenzen nicht unmittelbar auf. Größere<br />
Periodenlängen können aber durch Kombination mehreren kurzen Permutationstabellen<br />
erzielt werden, ohne dabei auf den Vorteil der schnellen Berechenbarkeit<br />
zu verzichten [6].<br />
16 Ursprünglich gedacht zur Implementierung auf eingeschränkter Grafik-Hardware.