Particle Systems used for Visualization - ZIB
Particle Systems used for Visualization - ZIB
Particle Systems used for Visualization - ZIB
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