PHDVR
direct volume renderer
by
Peter "Husky" Houska, e9907459, e881
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