PHDVR

direct volume renderer

by

Peter "Husky" Houska, e9907459, e881

zurück zur Hauptseite

 

Funktionsumfang von PHDVR :

SLICES:

Neben der Slicedarstellung in den 3 Hauprichtungen kann der User auch eine beliebige "allgemeine" Schnittebene wählen. Man kann die Daten im "slice-view" entweder als pure Grauwerte entsprechend ihrer Dichte oder mithilfe der Transferfunktion visualisieren.

3D-Darstellung:

Bei PHDVR handelt es sich um einen direkten Volumsvisualisierer, das heißt es wird keine "Hilfsgeometrie" (während eines preprocessing-steps) erstellt, sondern direkt (daher der Name) ein 3D-Array gesampled. PHDVR arbeitet mit klassischem "Image-Order" raycasting (perspektivisch). Ein Vorteil dieser Methode ist, daß man auch "das Innere" eines Datensatzes ohne weiteres darstellen kann.

Um die Sache ein wenig zu beschleunigen, werden Octree-ähnliche "3D Mip-maps" für empty space skipping (object space) eingesetzt. Zusätzlich kommt im "interaktiven Feedback-Mode" (sobald der User die Kamera bewegt, oder gewisse Parameteränderungen eine neue Darstellung anstoßen) eine Art adaptives Screen-sampling zum Einsatz (schieße zuerst nur 1st generation-rays auf grobem Grid -auf der Viewplane/am Screen- in die Szene, vergleiche dann die gesammelte Information -wie etwa Farbe & Distanz- und entscheide dann, ob weitere "2nd/3rd/... generation"-rays zum subdividen nötig sind). Diese "adaptive-rays" arbeiten außerdem mit exakten Grid-intersections im object space (eine Art "3D-DDA"), womit jedes voxel entlang des grid-traversals genau einmal "berührt" wird (keines wird verpaßt, keines unnötig oft gesampled) – somit ist auch der "Cuberille-Mode" (also ein 6-faced cube pro voxel) realisiert worden. Dies macht trilineare Interpolation unnötig, welche erst beim equidistanten ray-sampling für die high-quality-images zum Einsatz kommt. Beim compositing kommt "Front-to-Back" zum Einsatz, da dadurch "early ray-termination" realisiert werden kann (wenn der Strahl auf seinem Weg vom Auge durch das Volumen bereits eine Opazität nahe 1 erreicht hat). Das Sampling beginnt, selbst wenn die Kamera außerhalb liegt, immer erst innerhalb des volumes und nicht bereits in der Nähe der Kamera im "empty space" bis überhaupt erst das Objekt erreicht wird.

Der User kann die Blickrichtung interaktiv einstellen. Die Kamera erlaubt volle 6 degrees-of-freedom. Die Kamera direkt zu steuern ist oftmals intuitiver, als mittels Mausbewegungen das Objekt in die gewünschte Position zu drehen...

Neben den obligatorischen Marc-Levoy "Region Boundary Surfaces" und "Isovalue Contour Surfaces" (mit mehreren Isosurfaces gleichzeitig) [Lev88] beherrscht das Tool auch binäre Isovalue-classification ("crisp" images wie sie eigentlich eher für indirekte Volumsvisualisierungen üblich sind) wiederum mit mehreren (bis zu 5) Isosurfaces im selben Bild und Maximum-Intensity sowie Average-Intensity Projection. Um bei der binären Klassifikation keinen zu großen Kompromiß zwischen Qualität und Geschwindigkeit eingehen zu müssen, wird zuerst mit "relativ großen Schritten" nach der Position gesucht, wo der Dichtewert in den Daten das erste Mal größer oder gleich dem gewünschten Isowert ist. Dann wird zwischen dieser und der vorigen Position mittels binärer Suche weitergesampled (im konkreten Fall mit bis zu 5 weiteren Schritten, also einer Genauigkeit von bis zu 1/32 voxel).

Die Transferfunktion zur interaktiven Einstellung des Farb- und Opazitätenmappings zu den jeweiligen Dichtewerten bietet die übliche Funktionalität ohne jede Innovation ;-) Für eine mehrdimensionale Transferfunktion, wie sie etwa hier beschrieben wird [Kni02], war leider bei weitem zu wenig Zeit...

PHDVR beherrscht als kleine Spielerei neben "realistischer" lokaler Beleuchtung nach Phong -mit Schlick's Approximation für xn [Bru04]- auch nicht-photorealisitsches "toonshading" mitsamt "edge-detection". "Pencil-sketch-shading" ist der zweite NPR-Modus. Ähnlich wie beim toonshading wird die "Lichtintensität" dazu verwendet, dichtere oder weniger dichte "Linienbitmaps" für das aktuelle Pixel zu verwenden. Details dazu gibt es unter [Lak].

Um das Erscheinungsbild weiter zu verfeinern, ist es möglich, die occlusions vorauszuberechnen, um sie dann fast ohne Geschwindigkeitsverlust (ein weiterer Lookup und Test pro zu beleuchtendes voxel) zur Laufzeit als "Schatten" darzustellen.

Dem User werden einige Möglichkeiten geboten, die dem Rendering zugrundeliegenden Daten zu verändern. Einerseits kann man die Daten nach dem Laden beliebig oft "filtern", andererseits kann man das Volumen entweder mit Ebenen oder mit Kugeln schneiden. Zur genauen Schnittobjekt-Platzierung ist es möglich, in einen "schematischen" Modus wechseln, in dem nur die Schnittebene/die Schnittkugel und die bounding-box des Volumsdatensatzes dargestellt werden. Diese Schnitte funktionieren also ähnlich, wie man es von CSG gewöhnt ist, allerdings sind die Schnittoperationen -ebenso wie das Daten-filtering- in PHDVR "destruktiv" – sie können also nicht rückgängig gemacht werden. Im Gegensatz zu ausgefeilteren Programmen seiner Art kann im Speziellen auch keine andere Transferfunktion für den "ausgeschnittenen Bereich" definiert werden.

 

Referenzen:

[Bru04] Stefan Bruckner. "Efficient Volume Visualization of Large Medical Datasets Master’s Thesis", Institut of Computer Graphics and Algorithms Vienna University of Technology, 2004

[Kni02] J. Kniss, G. Kindlmann, and C. Hansen. "Multidimensional transfer functions for interactive volume rendering", IEEE Transactions on Visualization and Computer Graphics, 8(3):270–285, 2002

[Lak] Adam Lake, Carl Marshall, Mark Harris, Marc Blackstein, "Stylized Rendering Techniques For Scalable Real-Time 3D Animation", Graphics Algorithms and 3D Technologies Group (G3D), Intel Architecture Labs (IAL), University of North Carolina at Chapel Hill

[Lev88] Marc Levoy. "Volume Rendering – Display of Surfaces from Volume Data", University of North Carolina, May 1988

 

zurück zur Hauptseite