18.11.2013 Aufrufe

Particle Systems used for Visualization - ZIB

Particle Systems used for Visualization - ZIB

Particle Systems used for Visualization - ZIB

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Particle</strong> <strong>Systems</strong> <strong>used</strong> <strong>for</strong> <strong>Visualization</strong><br />

René Siewert<br />

Berlin, 29. Dezember 2008


Inhaltsverzeichnis<br />

1 Einleitung 2<br />

2 Dual Poisson-Disk Tiling 3<br />

2.1 Wang Kacheln . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

2.2 Modifikationen der Wang Kacheln . . . . . . . . . . . . . . . . . 3<br />

2.3 Dual Surface . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4<br />

2.4 Poisson Disks und Dart Throwing . . . . . . . . . . . . . . . . . 5<br />

2.5 Konstruktion der Kacheln . . . . . . . . . . . . . . . . . . . . . . 6<br />

2.5.1 Erzeugung der Eckkacheln . . . . . . . . . . . . . . . . . 6<br />

2.5.2 Erzeugung der Kantenkacheln . . . . . . . . . . . . . . . 7<br />

2.5.3 Erzeugung der innere Kacheln . . . . . . . . . . . . . . . 8<br />

2.6 Zusammensetzen der endgültigen Kachel . . . . . . . . . . . . . 8<br />

2.7 Verteilung der Kacheln . . . . . . . . . . . . . . . . . . . . . . . 9<br />

3 General Purpose GPU 10<br />

3.1 Eingabe der Daten . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

3.2 Verarbeitung der Daten . . . . . . . . . . . . . . . . . . . . . . . 11<br />

3.3 Ausgabe der Daten . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

4 Partikelbasierte Illustration 12<br />

4.1 Punktierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />

4.2 Schraffur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />

4.3 Konturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />

5 Abschließende Bemerkungen 14<br />

1


1 Einleitung<br />

Polygonbasierte Darstellungen von Oberflächen sind mittlerweile gut verstanden<br />

und beherrschbar, doch in letzter Zeit gewinnen auch partikelbasierte Methoden an<br />

Bedeutung. Mit ihnen können Oberflächen mit dem gleichen Detailgrad darstellen<br />

wie Gitternetze.<br />

Exakte Darstellungen sind für manche Anwendungen gar nicht so geignet. Vielmehr<br />

möchte man durch Abstraktion besondere Eigenschaften hervorheben. Ausreichend<br />

dicht verteilte Partikel eignen sich für solche Zwecke, da sie diese Bereiche homogen<br />

und anschaulich hervorheben können. Auch stilistische Darstellungen ziehen<br />

Vorteile aus Partikelsystemen. Punkte, welche gleichmäßig über der Oberfläche<br />

verstreut werden, können Krümmungen durch ihre scheinbare Dichteveränderung<br />

gut darstellen. Der Nachtei dieser Methoden ist jedoch der höhere Rechenaufwand.<br />

Um diesen effizient zu gestallten werden nun im Folgenden einige geignete Methden<br />

vorgestellt.<br />

Besonderes Augenmerk soll hier auf die Art der Verteilung, sowie der effizienten<br />

Verarbeitung der Partikel gelegt werden. Der erste Punkt unterstützt<br />

die Glaubwürdigkeit, mit der eine Oberfläche dargestellt werden kann [1]. Je<br />

gleichmäßiger die Partikel diese bedecken, umso besser können sie ihre Struktur<br />

und Eigenschaften hervorheben.<br />

Der zweite Punkt richtet sich auf die Interaktivität der Darstellung. Manchmal<br />

müssen Parameter zur optimalen Darstellung angepasst werden [4]. Lange Berechnungszeiten<br />

erschweren diesen Prozess, so dass es sinnvoll erscheint, die nötigen<br />

Berechnungen Zeitoptimiert ablaufen zu lassen.<br />

Die einfachste Möglichkeit Partikel gleichmäßig auf einer Oberfläche zu verteilen<br />

ist es, viele Partikel zufällig zu positionieren und anschließend zu versuchen, ihre<br />

Abstände untereinander anzugleichen (eine “Relaxierung” durchzuführen). Dieses<br />

Vorgehen ist jedoch unflexibel wenn man die Parameter für die Verteilungsdichte<br />

nachträglich ändern möchte. Dies würde bedeuten, den gesamten Prozess erneut<br />

auszuführen. Außerdem ist eine solche Verteilung nur für diese eine Oberfläche<br />

gültig.<br />

Ein weiterer Ansatz ist es, die Partikel mit Hilfe einer Textur auf die Oberfläche<br />

abzubilden. Die Koordinaten der Partikel im Texturraum werden dann in baryzentrische<br />

Koordinaten eines jeden Flächenstücks umgewandelt. Es ist außerdem leichter<br />

2


die Verteilungsparameter auf der Textur interaktiv anzupassen. Jedoch kommt es<br />

hierbei schnell zu Wiederholungen im Verteilungsmuster und zu Artefakten an den<br />

Rändern der Textur.<br />

Daher wird nun ein Verfahren vorgestellt, welches unabhängig gegenüber einer<br />

Oberfläche ein aperiodisches Verteilungsmuster generieren kann.<br />

2 Dual Poisson-Disk Tiling<br />

2.1 Wang Kacheln<br />

Abbildung 1: Ein Satz Wang Kacheln [3]<br />

Das Grundprinzip leitet sich aus den sog. Wang Kacheln ab [5]. Dies sind<br />

Rechtecke, deren Seiten unterschiedliche Farben aufweisen. Mit ihnen soll eine<br />

Ebene Fläche vollständig belegt werden, mit der Vorschrift, dass die Seiten mit der<br />

zwei benachbarte Kacheln aneinander grenzen, die selbe Einfärbung haben. Die<br />

verwendeten Kacheln dürfen dabei weder gedreht, gespiegelt oder skaliert werden.<br />

Wang nahm ursprünglich an, dass es irgendwann immer zu einer Periode im Muster<br />

kommt. Doch Culik [2] konnte später zeigen, dass es bereits mit einem kleinen Satz<br />

von 13 Wang Kacheln möglich war aperiodische Kachelungen zu erzeugen.<br />

Je mehr Farben man für die Einfärbung der Seiten zulässt, umso unregelmäßiger<br />

erscheint das gelegte Muster. Allerdings steigt dadurch in der Regel wieder die<br />

Anzahl der benötigten Kacheln.<br />

2.2 Modifikationen der Wang Kacheln<br />

Dieses Prinzip kann nun in abgewandelter Form auch auf die Verteilung von Partikeln<br />

auf der Oberflächen von beliebigen Körpern angewendet werden. Auf jeder<br />

Kachel werden diese gleichmäßig verteilt, so dass es zwar im kleinen Bereichen zu<br />

Wiederholungen kommen kann (genau dann, wenn eine Kachel erneut verwendet<br />

wird), im Ganzen das Verteilungsmuster aber aperiodisch ist.<br />

3


Abbildung 2: Eine Fläche belegt mit Wang Kacheln<br />

Anders, als bei den beschriebenen Wang Kacheln, müssen diese nun nicht mehr<br />

Rechteckig sein und können rotiert werden. Auch sind nicht mehr die Kanten eingefärbt,<br />

sondern ihre Ecken. Eine fertige Kachel besteht also aus ihren eingefärbten<br />

Ecken, den dazwischen liegenden, passenden Kanten und der Fläche die davon<br />

umschlossen ist. Jedes dieser drei Segmente wird in einzelnen Schritten erzeugt<br />

und aus ihnen dann der komplette Satz an Kacheln generiert. Da es sich dabei<br />

um jeweils Teilbereiche einer ganzen Kachel handelt, kann man diese Einzelteile<br />

selbst als Kacheln betrachten (vgl. Abbildung 4a). Im Folgenden werden daher der<br />

Bereich um eine Ecke herum als Eckkachel, der Bereich um eine Kante herum als<br />

Kantenkachel und der von den Ecken und Kanten umschlossene Bereich als innere<br />

Kachel bezeichnet.<br />

2.3 Dual Surface<br />

Eine weiter Veränderung der Ausgangsbedingungen ist, dass man nicht mehr davon<br />

ausgehen kann auf einer ebenen Fläche zu arbeiten. Die hier betrachteten Oberflächen<br />

können jede beliebige Form annehmen, was dazu führt, dass sich an einer<br />

Ecke nicht mehr nur vier Flächen treffen. Für die Erstellung eines gültigen Kachelsatz<br />

wäre dies sehr kompliziert, da sich jede Kachel zusammensetzt aus den<br />

Teilkacheln ihren Kanten und Ecken. Ohne ein weiteres vorgehen müsste nun die<br />

gesamte Oberfläche zuvor betrachtet werden und für jede Art von möglicher Ecke<br />

4


eine eigene Eckkachel erstellt werden. Dadurch steigt die Komplexität und der<br />

Speicherverbrauch der Aufgabe deutlich an. Für jede mögliche Eckkachel in allen<br />

möglichen Farben müsste ein Vertreter generiert und gespeichert werden. Durch<br />

eine einfache Um<strong>for</strong>mung lässt sich dieses Problem aber umgehen. Für die Oberfläche<br />

wird in einem Vorverarbeitungsschritt ein “dual surface” erstellt. Dieser hat<br />

die Eigenschaft, dass jede Ecke genau zu vier Flächen benachbart ist. Es genügt<br />

dann, für jede gewünschte Farbe eine einzige Eckkachel zu erzeugen. Erstellt wird<br />

dieser “dual surface” indem man jede Kante der Oberfläche in ihrer Mitte Teilt<br />

und eine neue Ecke einfügt. Alle neuen Ecken werden dann durch neue Kanten<br />

miteinander verbunden, wodurch auch neue Flächen umrandet werden. Der einzige<br />

Nachteil dieser Methode ist, dass die neuen Flächen nun nicht mehr eben sind.<br />

Die Kachelung wird anschließend nur auf den neuen Ecken, Kanten und Flächen<br />

durchgeführt.<br />

Abbildung 3: Umwandlung in den “dual surface“<br />

2.4 Poisson Disks und Dart Throwing<br />

Wie sollen aber nun die Partikel auf diese Kacheln aufgebracht werden? Zunächst<br />

speichert eine Kachel nicht den Partikel der auf ihr liegt, sondern ein Merkmal,<br />

welches eine Position, auf der später ein beliebiger Partikel liegen kann, beschreibt.<br />

Jedes Merkmal erhält außerdem einen Radius R zugewiesen, der die Ausdehnung<br />

des Partikels bezüglich eines Einheitsquadrats beschreibt. Die Ausdehnung eines<br />

Partikels ist der Platz, den er für sich beansprucht und in dem kein weiterer Partikel<br />

hineinreichen darf. Der Partikel liegt hierbei also vollständig in dem durch den<br />

Radius definierten Kreis. Dieses Gebilde wird auch “poisson disk” genannt. Bei der<br />

5


Verteilung verstreut man diese Scheiben nun auf der Oberfläche mit der Randbedingung,<br />

dass sich keine zwei Scheiben überlappen dürfen. Dieses Vorgehen ähnelt<br />

dem Werfen von Wurfpfeilen auf eine Zielscheibe. Auch hier ist es nicht möglich<br />

einen weiteren Pfeil in die direkte Nähe eines anderen zu werfen, da der sich bereits<br />

dort befindende Pfeil den anderen durch seine Ausmaße ablenken würde. Daher<br />

stammt wahrscheinlich die bildhafte Benennung dieses Vorgehens als “dart throwing<br />

algorithm”. Meistens werden die so verteilten Partikel anschließend relaxiert,<br />

wodurch sie gleichmäßiger auf der Oberfläche auftreten.<br />

Mit Hilfe von R kann man später leicht dich Dichte der Partikel verstellen. Ein<br />

niedriges R verringert den mittleren Abstand zwischen zwei Merkmalen. Natürlich<br />

bringt dies nur etwas wenn man gleichzeitig auch die Anzahl der zu verteilenden<br />

Merkmale erhöht.<br />

2.5 Konstruktion der Kacheln<br />

Ein besonderer Vorteil dieser Methode ist, dass die Generierung der Kacheln unabhängig<br />

ist, von der Form der Oberfläche. Es reicht also, einmal einen Kachelsatz<br />

zu erzeugen. Den gesamten Prozess kann man in drei Phasen unterteilen, welche<br />

nun näher erläutert werden.<br />

2.5.1 Erzeugung der Eckkacheln<br />

Als erstes wird ein Satz von Eckkacheln erstellt. Diese werden später auf die Eckpunkte<br />

des “Dual Surface“ gelegt (siehe Abbildung 3). Hierbei ist zu beachten,<br />

dass die Anzahl an benötigten Kacheln direkt von der Anzahl der gewünschten<br />

Farben bestimmt wird. Für jede Farbe wird genau eine Kachel generiert. Je mehr<br />

Farben es gibt, umso größer wird der nötige Kachelsatz sein. Gleichzeitig verringert<br />

sich dadurch die Wahrscheinlichkeit von lokalen Wiederholungen im Verteilungsmuster.<br />

Die Form aller Eckkacheln entspricht einem regulären Achteck. Wegen<br />

der Um<strong>for</strong>mung in den “Dual Surface“ kann man sicher gehen, dass jede der neuen<br />

Ecken höchstens acht Kanten in direkter Nachbarschaft hat. Jede Seite dieses<br />

Achteck hat eine Kantenlänge von 2R. Warum dies so ist, erkennt man bei der<br />

Generierung der inneren Kacheln (siehe Abschnitt 2.5.3). Dieses Achteck wird nun<br />

in ein Einheitsquadrat gelegt auf das man nun mittels eines Dart-Wurf Verfahrens<br />

Merkmalspunkte verteilt. Wie eingangs erwähnt wurde, ist jeder Merkmalspunkt<br />

von einer Scheibe mit dem Radius R umgeben, die sich nicht überlappen dürfen.<br />

6


Am Ende werden diese Punkte noch relaxiert, so dass sich ihre Abstände zueinander<br />

annähern und ein gleichmäßigeres Ergebnis erzielt wird. Alle Merkmalspunkte<br />

die sich nun noch innerhalb des Achtecks befinden werden für die Generierung<br />

der Eckkachel weiterverwendet; alle anderen werden verworfen. Dieser Prozess<br />

wiederholt sich nun für anders eingefärbte Kacheln, wobei darauf geachtet werden<br />

muss, dass sich keine zwei Kacheln ähneln, weder ihre Identitäten noch ihre um<br />

90 ◦ , 180 ◦ und 270 ◦ rotierten Abbildungen. Ließe man diesen schritt weg, so könnte<br />

man nachher nicht mehr für eine aperiodische Verteilung der Merkmale garantieren.<br />

2.5.2 Erzeugung der Kantenkacheln<br />

Nach der Generierung der Eckkacheln werden die Kantenkacheln erstellt. Da jede<br />

Kante zwei Ecken miteinander verbindet, ist es nötig, für jedes Paar an Eckkacheln<br />

auch eine dazu passende Kantenkachel zu erstellen. Das Vorgehen zur Verteilung<br />

der Merkmale ist ähnlich dem der Eckkacheln, bis auf eine Randbedingung. Auf die<br />

Mittelpunkte zwei gegenüberliegender Seiten des Quadrats werden die Eckkacheln<br />

gelegt, für die eine Kantenkachel erstellt werden soll. Auch ihre Merkmale werden<br />

in das Einheitsquadrat eingebracht. Bei der Verteilung der neuen Merkmale gelten<br />

diese als Fixiert, d.h. Ihre Lage kann nicht mehr durch Relaxierung verändert<br />

werden. Auch darf kein neues Merkmal mit seinem Mittelpunkt innerhalb der<br />

Eckkacheln liegen. Sobald ein gültiger Satz an Merkmalen vorliegt, werden die<br />

Mittelpunkte der Eckkacheln miteinander verbunden. Jedes Merkmal, welches<br />

einen kleineren Abstand zu dieser Linie hat als R wird für die Generierung der<br />

Kantenkachel weiterverwendet; alle anderen werden verworfen. Dieser Balken<br />

zwischen den Kantenkacheln, welcher die Zone um die Verbindungslinie beschreibt,<br />

wird als Kantenkachel für dieses Paar an Eckkacheln abgespeichert. Danach fährt<br />

man mit dem nächsten Paar an Eckkacheln <strong>for</strong>t. Es ist zu beachten, dass es nicht<br />

ausreicht, nur Kantenkacheln für jede mögliche Kombination aus den Identitäten<br />

der Eckkacheln zu erstellen. Auch deren um 90 ◦ , 180 ◦ und 270 ◦ rotierten Abbilder<br />

müssen betrachtet werden. Dadurch steigt die nötige Anzahl an Kantenkacheln auf<br />

(4C) 2 an. Da es jedoch innerhalb dieser Kombinationen zu Symmetrien kommen<br />

kann, müssen nicht alle Abgespeichert werden, sondern nur deren Repräsentanten.<br />

Einzig für die Kanten, die zu sich selbst symmetrisch sind muss auch die Verteilung<br />

der Merkmale symmetrisch sein, da es sonst mehrere Möglichkeiten geben würde,<br />

wie man eine Kantenkachel zwischen zwei Eckkacheln platziert.<br />

7


2.5.3 Erzeugung der innere Kacheln<br />

Nach den Eckkacheln und den Kantenkacheln gilt es nun die verschiedenen inneren<br />

Kacheln zu erzeugen. Eingangs wurde erwähnt, dass die meisten Flächenkacheln<br />

drei, vier oder fünf Ecken haben (vgl. Abbildung 3). Flächenkacheln mit mehr<br />

Ecken sind auch möglich, aber so selten, dass sie zunächst vernachlässigt werden<br />

können. Die Gruppe, welche erwartungs gemäß am häufigsten auftritt, sind innere<br />

Kacheln mit vier Ecken. An ihrem Beispiel soll wird demonstriert, wie alle inneren<br />

Kacheln erzeugt werden. Dieses Verfahren ist bei allen inneren Kacheln fast gleich.<br />

Es wird für jede denkbare Kombination aus vier Eckkacheln eine innere Kachel<br />

erzeugt. Nachdem die Eckkacheln ausgewählt wurden, verbindet man diese durch<br />

geeignete Kantenkacheln. Der Bereich, der nun von den Kanten eingeschlossen ist<br />

wird nun wieder mit einem Dart-Wurf Verfahren mit Merkmalspunkten gefüllt. Es<br />

gilt wieder: Bereits bestehende Merkmale der Eck- und Kantenkacheln gelten als fixiert<br />

und dürfen nicht mehr verändert werden. Auch darf kein neuer Merkmalspunkt<br />

in den Bereich einer Eck- oder Kantenkachel gesetzt werden. Nun zeigt sich auch,<br />

warum die Kantenkacheln eine Breite von 2R haben müssen. Dies garantiert, dass<br />

sich Merkmale “benachbarter“ inneren Kacheln nicht zufällig überlappen können.<br />

Anschließend wird überprüft, ob die neu erzeugte innere Kachel rotationssymmetrisch<br />

zu einer bereits bestehenden inneren Kachel ist. Sollte dies der Fall sein, so<br />

muss die Kachel neu generiert werden, damit eine möglichst wiederholungsfreie<br />

Verteilung der Merkmale garantiert werden kann. Die Erzeugung von inneren Kacheln<br />

mit mehr oder weniger Ecken folgt dem gleichen Schema.<br />

Bei allen inneren Kacheln, besonders aber bei denen mit einer von vier verschiedenen<br />

Eckenzahl kommt es vor, dass sie auf nicht ebene Flächen gelegt werden.<br />

Dadurch kann sich die Dichte der Merkmale in solchen Bereichen erhöhen, da die<br />

Kacheln gestreckt oder gestaucht werden. Häufig fällt dies nicht stark ins Gewicht.<br />

Doch in manchen Fällen muss abschließend eine Oberflächenweite Relaxierung<br />

durchgeführt werden. Dann würden die Merkmale die Grenzen ihrer Kacheln verlassen.<br />

Dennoch wäre selbst dann ihr Einsatz sinnvoll, da die Relaxierung mit deutlich<br />

weniger Schritten ein gutes Ergebniss erzielen kann.<br />

2.6 Zusammensetzen der endgültigen Kachel<br />

Liegen alle diese Einzelteile vor, können die passenden Teile zusammengesetzt<br />

werden (siehe Abbildung 4a). Für eine innere Kachel mit vier Ecken werden also<br />

8


die passenden Eck- und Kantenkacheln ausgewählt und alles zusammengefügt (Abbildung<br />

4b). Danach werden die Kantenkacheln der Länge nach halbiert und die<br />

Eckkacheln gevierteilt. Alle Teile die nun nicht mehr die innere Kachel berühren<br />

werden verworfen. Hierbei muss beachtet werden, was mit Merkmalspunkten passiert,<br />

die genau auf einer Schnittkante liegen. Das entstehende Gebilde ist eine<br />

vollständige Kachel, die nun in den Satz an verfügbaren Kacheln wandert (Abbildung<br />

4c).<br />

Abbildung 4: Erzeugung einer fertigen Kachel aus ihren Komponenten<br />

2.7 Verteilung der Kacheln<br />

Sobald ein kompletter Satz an Kacheln zur Verfügung steht, kann ihre Verteilung auf<br />

der Oberfläche beginnen. Als erstes werden die Kacheln mit fünf Ecken zufällig über<br />

alle passenden Positionen verteilt. Der Grund hierfür ist, dass es verhältnismäßig<br />

wenige von ihnen gibt, und daher kaum Beschränkungen bezüglich ihrer Platzierung<br />

existieren. Sollte der Fall eintreten, dass diese Art von Kacheln zahlenmäßig<br />

häufig ist, weicht man auf eine andere, seltenere Art aus. In jedem Fall bilden diese<br />

sporadischen Kacheln den Ausgangspunkt für das weitere Vorgehen.<br />

Die inneren Kanten mit vier Ecken werden im zweiten Schritt, gemäß den passenden<br />

Kantenfarben, auf die Oberfläche gelegt. Die Farbe der Ecken und deren Rotation<br />

muss bei benachbarten Kacheln übereinstimmen. Da zuvor für alle möglichen<br />

Kombinationen eine Kachel erzeugt wurde, lässt sich immer ein passender Partner<br />

finden.<br />

Als letztes werden dann die exotischeren Kacheln verlegt (solche mit sechs und<br />

mehr Ecken). Danach ist die Verteilung abgeschlossen und die Merkmale sind<br />

gleichmäßig über der Oberfläche verteilt. Abschließen muss nun nur noch auf jedem<br />

Merkmal ein Partikel zugeordnet werden.<br />

9


Abbildung 5: Beispiel einer fertigen Kachelung<br />

3 General Purpose GPU<br />

Es wurde nun eingehend beschrieben, wie man eine effiziente Verteilung der Partikel<br />

garantieren kann. Doch kann es immer noch durch ungünstige Darstellungsalgorithmen<br />

zu langen Wartezeiten kommen. Ein wichtiger Schritt um dies zu vermeiden<br />

ist es, so viel Berechnungsschritte wie möglich auf der GPU selbst durchzuführen.<br />

Dadurch wird vermieden, dass die GPU auf Ergebnisse der CPU, des RAM oder der<br />

Festplatte warten muss. Erreichen kann man dies dank der Flexibilität mit der moderne<br />

GPU entworfen werden. In der Regel ähneln diese einer CPU welche darauf<br />

spezialisiert wurde, eine Operation gleichzeitig auf mehreren Datensätzen ausführen<br />

zu können. Gesteuert wird sie hierbei von Mikroprogrammen, den Shadern. Ein<br />

solcher Shader kann von einem Programmierer leicht selbst entworfen werden.<br />

Es ist also möglich, durch einen geschickten Entwurf alle Algorithmen auf der GPU<br />

ausführen zu können, wodurch sie quasi zu einem vollwertigen Coprozessor wird.<br />

Da die Entwicklung neuer GPUs durch die Nachfrage schnell voranschreitet ist es<br />

sinnvoll diese Rechenleistung auch zu nutzen.<br />

Wie muss nun aber ein solches Shadermodell aufgebaut werden, damit man eine<br />

“General Purpose GPU” (kurz: GPGPU) erhält?<br />

Jeder Algorithmus besteht aus drei “Komponenten”:<br />

• einer Eingabe<br />

• einem Verarbeitungsschritt<br />

• einer Ausgabe<br />

10


Es ist also nötig, all diese Schritte auf GPU-Prozesse abzubilden.<br />

3.1 Eingabe der Daten<br />

Normalerweise erhält eine GPU als Eingabe Texturen und Listen von Eckpunkten.<br />

Eine Textur ist eigentlich nichts anderes als ein Array von numerischen Werten.<br />

Ähnlich verhält es sich bei den Listen von Eckpunkten. Wenn man nun die Eingabedaten<br />

so um<strong>for</strong>mt, dass sie in diese “Container“ passen, kann man jede beliebige<br />

Eingabe einschleusen.<br />

Im allgemeinen wird ein Puffer Objekt benötigt, welches die Eingabedaten enthält.<br />

Man wählt am besten ein eindimensionales Array, welches als Textur interpretiert<br />

wird. Hinzu kommt ein imaginäres Objekt, dessen Ecken Verweise auf die Daten in<br />

Puffer Objekt kodiert. Beide Objekte werden von der CPU erzeugt und dann in den<br />

Speicher der GPU geladen.<br />

3.2 Verarbeitung der Daten<br />

Verarbeitet werden diese Daten dann in den einzelnen Shader-Prozessen. Von diesen<br />

gibt es nach dem neusten unified shader model drei Arten: Vertex Shader, Geometry<br />

Shader und Fragment Shader. Die ersten beiden verarbeiten Texturen und Listen<br />

von Eckpunkten und reichen somit unseren Ansprüchen aus. Der dritte Typ kann<br />

daher verworfen werden.<br />

Da alle Shader frei modifizierbar sind, können alle Programme die eine CPU<br />

ausführen kann, auch von der GPU auf diese weise ausgeführt werden.<br />

3.3 Ausgabe der Daten<br />

Die Ausgabe der Shader-Prozesse ist ein Datenstrom, der ja nach An<strong>for</strong>derung<br />

weiterverarbeitet oder abgespeichert werden kann. Moderne Geometry Shader sind<br />

in der Lage Ecken der Eingabemenge zu löschen oder neue zu erstellen. Somit kann<br />

die Ausgabe beliebig umgestaltet werden. Die Formatierung der Ausgabe ähnelt der<br />

der Eingabedaten. Ein Puffer Objekt mit den möglichen Ausgabewerten und einer<br />

Liste von Ecken, welche Verweise auf diese Daten kodieren wird erzeugt.<br />

Auf diese Weise können alle wichtigen Ausführungsschritte eines Algorithmus in<br />

11


der GPU ausgeführt werden. Besonders vorteilhaft ist es natürlich, wenn die Architektur<br />

der GPU in den Entwurf des Algorithmus mit einfließt, so das Operationen<br />

möglichst parallel auf vielen Datensätzen gleichzeitig ausgeführt werden können.<br />

4 Partikelbasierte Illustration<br />

Die beiden hier vorgestellten Verfahren arbeiten weitgehend unabhängig voneinander.<br />

Der einzige Berührungspunkt, ist die anfängliche Verteilung der Partikel auf<br />

der Oberfläche. Diese wird Vorab durch die Kachelung erzeugt und dient nun als<br />

Ausgangsbasis für die Visualisierung der Oberfläche, welche durch GPGPU Berechnungen<br />

beschleunigt durchgeführt werden kann. Die Verteilung der Kacheln selbst<br />

eignet sich nicht für die GPU, da die Kacheln nicht unabhängig voneinander verlegt<br />

werden können (sobald eine Kachel plaziert wurde, schränkt dies die Möglichkeiten<br />

für die nächste Kachel ein).<br />

Profitieren können hingegen die verschiednen Visualisierungstechniken. Die Operationen<br />

um sie zu erzeugen, laufen meist unabhängig auf der Menge der Partikel.<br />

Durch geeignet geschriebene Shader können sie also schnell berechnet werden. Im<br />

Folgenden seien drei dieser Techniken vorgestellt.<br />

4.1 Punktierung<br />

Jeder Partikel wird hier durch einen Punkt Dargestellt. Die ursprüngliche Oberfläche<br />

wird nicht dargestellt. An den Stellen wo sich die Oberfläche vom Betrachter<br />

<strong>for</strong>t krümmt, erscheinen die Punkte dichter beieinander. Werden nun diese Punkte<br />

noch skaliert je nach dem, ob sie an dunklen oder hellen stellen der Oberfläche<br />

liegen entsteht bei ausreichender Punktdichte das Abbild der Oberfläche auf ein Art<br />

12


und Weise wie sie auch beim Zeitungsdruck Verwendung findet (vgl. Abbildung 6a).<br />

4.2 Schraffur<br />

Etwas aufwändiger ist es eine geignete Schraffur für eine Oberfläche zu erzeugen.<br />

Man Verbindet mehrere Partikel mit einer Linie welche entweder einer vorgegebenen<br />

Richtung folg, oder sich den Konturen der Oberfläche anschmiegt. Im<br />

zweiten Fall muss für jeden Partikel muss hier nun das Krümmungsverhalten der<br />

Oberfläche in seiner nähern Nachbarschaft überprüft werden. Je nachdem ob diese<br />

lokale Krümmung ähnlich der Vorgegebenen ist wird die Linie ihr folgen oder<br />

doch strikt nach Vorschrift weiter laufen. Nachdem dies für alle Partikel gemacht<br />

wurde bilden die erzeugten Linien eine Schraffur der Oberfläche (vgl. Abbildung 6b)<br />

(a) Punktierung (b) Schraffur (c) Umrandung<br />

Abbildung 6: Verschiedene Visualisierungstechniken<br />

4.3 Konturen<br />

Die Umrandung eines Körpers wird aus den Bereichen gebildet an denen die<br />

Sichtlinie zum Betrachter als Tangente auf der Oberfläche liegt. Wird für jede<br />

Partikelposition auch die Normale gespeichert welche die Oberfläche an diesem<br />

Punkt aufweist, kann leicht die Menge an Partikeln bestimmt, werden die auf (oder<br />

nahe) diesem Bereich liegen. Diese Partikel können dann miteinander zu einer Linie<br />

verbunden werden, welche dann als Kontur dargestellt werden kann (vgl. Abbildung<br />

6c).<br />

13


5 Abschließende Bemerkungen<br />

Die hier angesprochenen Techniken bilden nur eine kleine Auswahl an Möglichkeiten,<br />

die sich entwickelt haben. Der Trend GPUs als Coprozessoren zu verwenden wird<br />

sicherlich weiterhin anhalten, denn immer häufiger wird die GPU auch zur Berechnung<br />

physikalischer Effekte genutzt, vor allem für die Berechnung von Partikeln.<br />

Fast scheint es so, als sei der alte Ansatz der Voxel wieder in Mode gekommen.<br />

Bibliography<br />

Literatur<br />

[1] Man-Kang Leung Chi-Wing Fu Hongwei Li, Kui-Yip Lo. ”dual poisson-disk<br />

tiling: An efficient method <strong>for</strong> distributing features on arbitrary surfaces”, 2008.<br />

[2] Karel Culik Ii. än aperiodic set of 13 wang tiles”.<br />

[3] Stefan Hiller Oliver Deussen Michael F. Cohen, Jonathan Shade. ”wang tiles<br />

<strong>for</strong> image and texture generation”, 2003.<br />

[4] H. van de Wetering R. van Pelt, A. Vilanova. ”gpu-based particle systems <strong>for</strong><br />

illustrative volume rendering”, 2008.<br />

[5] Hao Wang. ”proving theorems by pattern recognition i”, 1960.<br />

14

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!