Im Rahmen der Diplomarbeit "Interaktive Volumenvisualisierung auf
hierarchischen, unstrukturierten Gittern" ging es darum, den bei
Volumendaten besonders großen Anteil an redundanten Informationen zur
reduzieren und mit der so erreichten geometrischen Vereinfachung
interaktive Bildwiederholraten zu erreichen. Zum einen wurde das
wohlbekannte Verfahren der Zellprojektion implementiert. Dabei wird
ein beliebiges Gitter in Tetraeder zerlegt, deren volumetrische
Darstellung mittels Hardwareunterstuetzung sehr schnell berechnet
werden kann. Bei der Projektion eines Tetraeders treten jeweils zwei
verschiedene Topologien auf, die mit der vorhandenen OpenGL-Hardware
beschleunigt gezeichnet werden koennen. Die korrekte exponentielle
Abschwaechung wird durch die Verwendung einer zweidimensionalen Textur
erreicht, die die exponentielle Funktion in Abhaengigkeit von Dichte
und Durchdringungslaenge wiedergibt. Zum anderen wurde auf der Seite
der Gittergenerierung ein Modell weiterentwickelt, das bereits fuer
die Terrainvisualisierung gute Dienste geleistet hatte (siehe
"Real-Time Generation of Continuous Levels of Detail for Height
Fields", WSCG '98). Hierbei wurde ein Ausgangshexaeder hierarchisch
solange unterteilt bis der globale Fehler unter Beruecksichtigung des
Augpunktes einen gewissen festzusetzenden Schwellwert
unterschreitet. Die Abschaetzung des globalen Fehlers geschieht durch
die Berechnung und Propagierung der einzelnen lokalen Fehler von unten
nach oben innerhalb des vollstaendigen Quadtrees. Wegen der
rectilinearen Struktur des Unterteilungsbaumes, gestaltet sich die
notwendige Sortierung der einzelnen Tetraeder von hinten nach vorne
relativ einfach. Schwieriger wird es, wenn curvilineare Gitter
eingesetzt werden. Fuer diesen Einsatzzweck verwendeten wir einen
statischen Gittergenerator der von Grosso et al. entwickelt wurde
(siehe "The Multilevel Finite Element Method for Adaptive Mesh
Optimization and Visualization of Volume Data", Vis '97). Dieses
Verfahren verfolgt eine andere Strategie, indem es eine a priori
Abschaetzung des globalen Fehlers errechnet. In der Praxis geht man so
vor, daß probeweise eine Unterteilung vorgenommen wird, der so
induzierte Fehler durch die Kenntnis der Stetigkeit der
zugrundelegenden Funktion abgeleitet wird, und basierend darauf das
Gitter weiter verfeinert wird oder eben nicht. Die notwendige
Sortierung nach Sichtbarkeit fuer die Volumenvisualisierung verlangt
in diesem Fall aber nach einem Algorithmus, der auch unstrukturierte
Tetraederwolken sortieren kann. Im Rahmen der Diplomarbeit entstand so
ein schnelles heuristisches Verfahren, das die Eigenschaften von
hierarchischen Gittern nutzt, um eine hohe Sortierleistung zu
erzielen. Im Vergleich zu Methoden, die eine absolut korrekte
Sortierung gewaehrleisten, und deswegen die Komplexitaet der Geometrie
durch Zellschnitte erhoehen muessen, nimmt unser Verfahren gezielt
Sortierartefakte zugunsten der Sortiergeschwindigkeit in
Kauf. Experimentelle Tests haben gezeigt, daß diese Artefakte bei
hierarchischen Gittern erstens nur in ganz seltenen Faellen auftreten,
und zweitens im Vergleich zum Approximationsfehler des Gitters
verschwindend gering sind. Somit wurden zwei Verfahren zur
Volumenvisualisierung vorgestellt, die einerseits die
augpunktabhaengige Gittergenerierung und andererseits eine beliebige
Gittertopologie erlauben.
Volumenvisualisierung auf rectilinearen Gittern
Ein 3-dimensionale Gitter in zwei verschiedenen
Aufloesungsstufen.
Einige CT-Aufnahmen eines Aneurysmas.
Die Roentgenaufnahme eines Motorblocks und eine MR-Aufnahme eines
Kopfes.
Aufloesung
8.0
16.0
32.0
64.0
128.0
256.0
Frames/sec
9.23
2.42
1.14
0.37
0.19
0.18
#Tetraeder
9159
43951
93629
307631
529154
628226
#Vertices
51302
246191
524434
1722976
2963682
3518934
Tabelle 2: Graphikdurchsatz bei der
Zellprojektion am Beispiel des Aneurysma-Datensatzes (SGI Octane mit
250 MHz MIPS R10k).
Volumenvisualisierung auf beliebigen Gittern
Aneurysma und Motorblock: die Gitter wurden mit der von Grosso et
al. beschriebenen Methode erzeugt.
Mehrere Aufnahmen des Blunt-Fin-Datensatzes, die den Ablauf des
Zeichenvorgangs wiedergeben.
Blunt-Fin-Datensatz: die zwei an der Flosse entstehenden
Druckwellen sind gut zu erkennen.
Blunt-Fin-Datensatz: die GUIs von apProcessor und apViewer.
Der DLR-Fluegel: dargestellt ist die Druckverteilung um einen
Flugzeugfluegel.
Ein Stroemungskanal mit Stufe und innenliegender Isoflaeche, der
Abdomen eines Menschen und ein Sparschwein.
#Tetra
7020
19620
37764
163344
541428
Sortieren
0.032s
0.11s
0.24s
1.16s
3.91s
Tetra/sec
219 000
178 000
157 000
141 000
138 000
Tabelle 3: Sortierzeiten fuer den
Blunt-Fin-Datensatz (SGI Octane mit 250 MHz MIPS
R10k).
#Tetra
7020
19620
37764
163344
541428
Sort+Render
0.11s
0.33s
0.67s
2.97s
10.15s
Tetra/sec
64 000
59 000
56 000
55 000
53 000
Tabelle 4: Sortier- und Renderzeit fuer den
Blunt-Fin-Datensatz (SGI Octane mit
250 MHz MIPS R10k).