Flow Visualization

by Martin Ilcik


  1. Intro

    Ich habe dieses Software für die Laborübung „Visualisierung“ Programmiert. Flow visualisation war das zweite Beispiel zur Abgabe. Im Vergleich zum ersten Beispiel habe ich die benötigte Zeit zur Programmierung besser abgeschätzt. Deshalb hoffe ich, das dieses Stück Software keine Bugs enthält. Auch meine „ToDo“ Liste blieb am Ende fast Leer. Also bin ich ziehmlich zufrieden mit mir selbst :-) [edit] Bei der Präsentation habe ich festgestellt, dass bei der Visualisierung des Hurricanes mit 50 Zeitschritten mein Programm die grenzen des Graphikspeichers weit überschritten hat. Deshalb habe ich nach zwei Tagen eine neue, überarbeitete Version gebastelt. Jetzt läuft alles flüssig, der Bedarf von Festplattendpeicher stieg jedoch bei diesem zeitabhängigen Hurricane Dataset zu 1,3 Gb.

  2. Wozu ist das gut?

    Flow visualization dient als hilfe bei Untersuchungen von verschiedenen dynamischen Systemen. Als Eigabe dient ein *.gri File, in dem die geographische Information über das Vektorfeld gespeichert ist. Weiter benötigt das Programm Files mit Daten von einzelnen (mindestens einem) Zeitschritten. Die vorhandenen Daten sind meistens Geschwindigkeitsvektor und mehrere Zusatzdaten, wie z.B. Temperatur, Druck usw. Mein Programm arbeitet mit Daten maximaler Größe 600x600x1, es kann also nicht mit 3D Flüssen arbeiten. Zu den Feautures gehören interaktive Transferfunktionen, Arrowplots, Streamlines, Dynamic particles flow und Animationen von Daten mit mehreren Zeitschritten. Das Programm läuft zum Teil auf der graphischen Hardware und verwendet texture shader und register combiners. Deshalb läuft es nur an NVIDIA Graphikkarten aber das schon ab GeForce3 höher.

  3. Wie bediene ich das?

Open Dataset rechts oben öffnet neue Strömungsdaten. Falls du keine hast, einige Beispieldaten befinden sich auf der LU Visualisierung und VRVis Webpage.



Einege Daten (Box-dataset) brauchen die Byte Ordnung zu wechseln. Nach der Auswahl der Strömungsdatei wird man gefragt, ob die Bytes umgeordnet werden sollen.



Das Erste Bild ist hier... Links befindet sich die Bedienfläche, im oberen Teil das Histogramm und die dazugehörige Transferfunktion (hier des Attributs Richtung).
Mit dem Mauswheel wird die Sicht gezoomt, mit gedrücktem rechten oder mimttleren Knopf wird das Bild verschoben.


Auf der Bedienfläche befinden sich Buttons und Eingabefelder zu allen 5 Hauptkategorien:

BACKGROUND:

Background: Die obere hälfte dient zur Selektion des Angezeigten Attributs (Direktion, Geschwindigkeit, Zusätzliches Attribut 1, Zusätzliches Attribut 2)

Transferfunktionen: In der unteren hälfte befindet sich die Verwaltung der Transferfunktionen. Sie lassen sich speichern, laden, verstecken...
Wenn der Histogramm versteck ist, lässt sich die transferfunktion nicht ändern.



TransferNodes: Im oberen Bereich des Fensters wird der Histogramm angezeigt. Die Fläche unter ihm stellt die aktuelle Transferfunktion dar. Sie lässt sich leicht mit einigen Clicks verändern, um Aussagekräfige Bilder zu erzeugen.

Erzeugung von neuen Knoten: Mit einem Doppelklick auf die Fläche (nicht Histogramm) wird ein Farbedialog hervorgeufen. Ein neuer Transfernode mit der gewählten Farbe entsteht.

Änderungen an existierenden Knoten: Postion wird drag&drop mit der Maus geändert. Das Farbedialog wird mit einem Doppelklick in den Knoten hervorgrufen.

Löschen von Knoten: Das selektierte Knoten hat blaues Innere. Zum löschen einfach Delete drücken.

Zwei Beispielbilder der Transferfunktionen (mit Hide histogram gecheckt).





ARROWPLOTS:

In Arrows befinden sich die Einstellungen für die Pfeilartige Darstellung der Richtung und Stärke der Strömung. Mit length coded wird die Größe der Pfeile proportional zur Geschwindigkeit der Strömung.

Das Erste Bild stellt einen einfachen Arrowplot dar. Es ist ein 2D Feld von Pfeilen in regulären Abständen, die die Richtung oder auch Geschwindigkeit der Strömung darstellen.

Auf diesen drei Bildern habe ich lineares und nicht lineares length-coding verwendet, mit sekundären Pfeilen. Das zweite und das dritte stellen den Unterschied zwischen Linearlength Ein- und Abgeschaltet dar.





DYNAMIC PARTICLES:

Dynamic flow bietet einen einfachen Particle system zur Veranschaulichung der Strömung. Dabei wird eine große Menge von Particles auf Zufälligen Positionen erzeugt und ihre Bewegung in der Strömung simuliert. Bei statischer Strömung ist diese Veranschauichung bestimmt nicht realitätstreu. Bei zeitabhängiger Strömung entstehen aber bei höheren Geschwindigkeiten der Wiedergabe Verschiebungen, die noch zu größeren Fehlern führen. Trotzdem können die Partikel bei richtigen Einstellung gute visuelle Ergebnisse bringen. Dabei lässt sich ihre Länge, Anzahl, Helligkeit (für additives blending), Lebenserwartung, Grad der RK-Integration u.a. einstellen. Apply startet dann ein neues Particlesystem mit eigegebenen Attributen.

Dieses Bild entstand bei etwa 2 fps. Aber es lohnte sich, das Resultat ist der Vorlage sehr treu.





STREAMLINES:

Streamlines werden im Gegenzug zu Partikeln auf Distanz zu bereits existierenden Linien geprüft. So wird verhindert, dass zu dichte Konzentrationen entstehen. Diese Abstände werden durch dsep und dtest definiert. Dsep wird bei der Erzeugung vin neuen Linien benutzt, dtest beim Verlängern der Linien.

In Stramlines lassen sich mit Basiseinstellungen schnell ungenaue Streamlines erzeugen. Hier zum Vergleich herkömliche Streamlines mit Einheitslänge der Segmente. Das dt wurde absichtlich niedrig gewählt.



Mit dichteren Werten von dsep und dtest entstehen ganz genaue Bilder. Hierfür eignen sich höhere dt Werte und nicht einheitliche längen der Sengente am besten.



Das Pulsieren der Streamlines erzeugt den Effekt der Bewegung, besonders bei ganz dichten Streamlines.





  1. Screenshots


Beim programmieren...


Einige der Bilder fürs VisContest, die ich nicht so gut wie das abgesante Bild waren.













Mehr Dynamic particles

  1. Source code documentation

Author: Martin Ilcik, 0225704, iso.sk at gmx punkt net