Verwendung von Real-Time Shadern zur statischen und dynamischen Partikel- und Strömungsvisualisierung

Diplomarbeit von Oliver Kutter

Motivation

Die Darstellung von einer großen Menge an Teilchen (Partikel) erfolgt in der Computergrafik durch unterschiedliche Techniken. Partikelsysteme werden bei Simulationen natürlicher Phänomene wie Feuer und Rauch oder bei der Visualisierung von Strömungen eingesetzt. Die Darstellung von Strömungen erfolgt häufig in Verbindung mit Strömungslinien. Die Anzahl vieler einzelner Partikel für eine Animation war bis vor einiger Zeit noch auf ca. 20.000 begrenzt, da die Berechnung aller Partikel sehr rechenintensiv ist. Hinzu kommt, dass für das Rendering der Datentransfer von der Anwendung zum Grafikprozessor (Graphics Processing Unit, GPU) relativ viel Zeit benötigt.

Zur Lösung dieses Problems wurden bereits einige GPU-basierte Partikelsysteme entwickelt. Durch die Benutzung von Vertex und Fragment Shadern werden die Partikel berechnet und die Ergebnisse direkt an die Geometrien zugewiesen, wodurch der Datentransfer von der Anwendung zur GPU eingespart wird. Dadurch konnte die Leistung auf ca. eine Million Partikel erhöht werden.

Die häufigsten Partikelsysteme dieser Art sind Simulationen, deren Berechnungen anhand von physikalischen Gesetzen durchgeführt wird. Bei der Visualisierung von Strömungen werden Datensätze als Grundlage für die Berechnung der Partikel benötigt. Die Speicherung der Datensätze erfolgt in Texturen, die als Eingabe für die Shader dienen.

Ein Problem ist die Visualisierung großer zeitvarianter Daten, da die Texturen nur begrenzt Speicherplatz bieten. Des Weiteren werden häufig texturierte Punkte (Point Sprites) bei der Visualisierung eingesetzt, die jedoch bei einer Animationspause ihre Wirksamkeit und Ausdruckskraft verlieren.

Aufgabenstellung und Ziel der Arbeit

Das vorliegende Visualisierungssystem OpenVisaar bietet bereits einige statische Visualisierungstechniken wie Glyphen und Isoflächen. Das Ziel dieser Diplomarbeit ist die Erweiterung von OpenVisaar um eine statische und dynamische Partikel- und Strömungsvisualisierung. Dabei soll untersucht werden, in wie weit neben einer CPU-basierten Lösung auch eine GPU-basierte Variante möglich ist. Für die Visualisierung soll außerdem eine effektivere Darstellung der Partikel entwickelt werden. Da der vorliegende Datensatz eine zeitvariante Eigenschaft besitzt, soll des Weiteren ein Verfahren zum dynamischen Nachladen der Eingabedaten entwickelt werden.

Realisierung

Da OpenVisaar mit Hilfe von OpenSG entwickelt wurde, erfolgte die Implementierung des Partikelsystems ebenfalls unter Zuhilfenahme dieser 3D Szenegraphen Bibliothek. In dem entwickelten Partikelsystem werden Point Sprites und Dreiecke als Partikel verwendet. Zusätzlich stellen Pathlines die zurückgelegte Strecke der Partikel dar. Somit werden auch bei einer Animationspause weiterhin die gewünschten Informationen dargestellt. Neben der zurückgelegten Strecke und der Windrichtung visualisiert die Farbe der Partikel je nach Darstellungsmodell die Temperatur oder die Geschwindigkeit.

Für die Berechnung der Partikel als Dreiecke wurde ein Verfahren entwickelt, das aus der gegebenen Partikelposition und dem Richtungsvektor eine dreieckige Geometrie erzeugt. Neben der Geometrie lässt sich dadurch auch für einen besseren Tiefeneindruck die Beleuchtung für Partikel und Pathlines berechnen.

Bei der Datenverwaltung des Systems wurden unterschiedliche Verfahren untersucht, wie die Daten von der Festplatte geladen werden können. Eine bereits bestehende Implementierung ist die des DataStore Managers, der die Daten einzeln von der Festplatte liest. Dieser wurde durch den DataImage Manager erweitert, der die Daten in Paketen (komplette Speicherung der Daten für einen Zeitschritt) nachlädt. In Hinblick auf die GPU-basierten Lösungen handelt es sich hierbei um das OpenSG-eigene Bildformat MTD (Multi Texture Data), aus dem zur Laufzeit Texturen als Eingabe für die Shader erzeugt werden können. Bei einer Visualisierung über mehrere Zeitschritte können die Pakete nachgeladen werden, und somit kann theoretisch eine Visualisierung über unendlich viele Zeitschritte erfolgen.

Die ersten CPU-basierten Methoden für die Berechnung der Partikel und der Pathlines basieren auf dem DataStore und dem DataImage Manager. Die erste GPU-basierte Methode ist eine Kombination aus Hardware und Software, wobei die Ergebnisse durch Shader berechnet, in eine Textur gespeichert und dann in der Anwendung wieder ausgelesen werden. Die letzte Methode ist ein rein GPU-basiertes Verfahren, wobei die Ergebnisse ebenfalls in Texturen gespeichert, jedoch durch Vertex Shader an die Geometrien zugewiesen werden.

Abbildung 1 zeigt OpenVisaar und seine Komponenten. Der blau gestrichelte Bereich zeigt die Komponenten, die in dieser Arbeit entwickelt wurden.