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> 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.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!