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> 1<br />

1 Einführung<br />

<strong>Rauschfunktionen</strong> auf Basis pseudo-zufälliger Gradientenwerte finden zahlreiche<br />

Anwendungen, speziell in der Bildsynthese. Bekannt wurden diese Methoden<br />

nicht zuletzt durch Ken <strong>Perlin</strong>, der für seine eindrucksvollen Arbeiten<br />

1997 einen „Oscar“ (Academy Award for Technical Achievement) erhielt.<br />

Gradientenrauschen ist natürlich nur eine mögliche Form der Erzeugung von<br />

<strong>Rauschfunktionen</strong>. Eine Übersicht zu alternativen Ansätzen findet sich beispielsweise<br />

in [4].<br />

Obwohl die Details der <strong>Perlin</strong> <strong>Noise</strong> Methode vielfach publiziert wurden<br />

[1,4,5,7,9] <strong>und</strong> eine konkrete Referenzimplementierung auf Ken <strong>Perlin</strong>s<br />

eigener Website 1 vorliegt, lässt die verfügbare Information überaschend viele<br />

Fragen offen. In der Tat gehört der <strong>Perlin</strong>-Algorithmus (aus persönlicher<br />

Sicht des Autors) zu den dürftigst dokumentierten Verfahren in diesem Bereich<br />

überhaupt. Eine Implementierung ist auf dieser Basis mühevoll, weil<br />

einige wichtige Details nur aus dem Quellkode der (äußerst „kompakten“)<br />

Referenzimplementierung abgeleitet werden können.<br />

Diese Dokument ist eine Zusammenfassung der wesentlichen Gr<strong>und</strong>lagen<br />

<strong>und</strong> Implementierungsschritte zur Erzeugung 1-, 2- <strong>und</strong> N-dimensionaler<br />

<strong>Rauschfunktionen</strong> mit der <strong>Perlin</strong>-Methode. Die gezeigten Algorithmen sollten<br />

leicht in einer konkreten Programmiersprache wie Java oder C umzusetzen<br />

sein. Eine prototypische Java-Implementierung dazu ist online verfügbar.<br />

2 Eindimensionale <strong>Noise</strong>-Funktionen<br />

Ziel ist die Erzeugung einer kontinuierlichen, eindimensionalen Zufallsfunktion<br />

noise(x) : R → R, (1)<br />

basierend auf einer diskreten Folge von vorgegebenen (aber ebenfalls zufälligen)<br />

Werten<br />

gu ∈ R, (2)<br />

für die diskreten Raster- oder Gitterpunkte u ∈ Z. Die Werte gu in Gl. 2<br />

spezifizieren also die kontinuierliche Rauschfunktion noise(x) an den diskreten<br />

Positionen x = u ∈ Z. Es können dies u. a. die vorgegebenen Werte<br />

(values) der Funktion sein oder auch der Anstieg (gradient) der Funktion an<br />

diskreten Stellen (siehe Abb. 1). Im ersten Fall spricht man von „Value <strong>Noise</strong>“,<br />

im zweiten Fall von „Gradient <strong>Noise</strong>“ [4, S. 70]. Der Wert von noise(x)<br />

an einer beliebigen kontinuierlichen Position x ∈ R ergibt sich durch lokale<br />

Interpolation in der Form<br />

1 http://mrl.nyu.edu/~perlin<br />

noise(x) = F(x,gp,gp+1) = F(x,g ⌊x⌋,g ⌊x⌋+1) (3)

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!