3. 1 Einleitung
F¨ur die ¨arztliche Diagnose und Therapie kommen heutzutage computergest¨utzte Verfahren zur Anwendung. Medizi-
nische Bilddaten werden dabei per Computertomograph aquiriert und in einer Bildanalyse aufbereitet. Das Resultat
wird schliesslich als Volumengrafik dargestellt. Solche Visualisierungen k¨onnen auch der Wissensbildung dienen und
in Schulungen Verwendung finden. Dazu betreibt das cpvrLab am Institute for Human Centered Engineering (Hu-
CE) der BFH-TI ein Cave Virtual Environment (CAVE). Das System wurde vormals als Umgebung f¨ur Simulationen
eingesetzt, um Arbeitsabl¨aufe im Operationssaal zu lernen und lehren. Seither besteht die Vision, in der virtuellen
Trainingsumgebung auch medizinische Bilddaten als Volumengrafik einbinden zu k¨onnen.
Seit Ende Herbstsemester 2015/16 werden die 3D-Szenerien im cpvrLab mit Unity gerendert, so auch f¨ur das
CAVE. Der Diplomand hat deshalb im Rahmen der Bachelor Thesis 2016 f¨ur Unity ein Plug-in zum Rendern von
Volumengrafiken aus medizinischen Daten erstellt.
In diesem Benutzerhandbuch zu finden sind die Systemanforderungen und Installationshinweise (siehe Kapitel 2).
Das Manual in Kapitel 3 soll Spiele-Entwicklern bei der Verwendung des Plug-ins im Unity-Editor Unterst¨utzung
bieten.
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 1
4. 2 Installationshinweise
2.1 Systemanforderungen
ˆ Betriebssystem: Microsoft Windows 8 oder neuer, 64-Bit, mit .NET 2.0
ˆ Visualization Toolkit (VTK): ActiViz .NET, mindestens Version 5.8.x;1
bin-Ordner in der PATH-Systemvariable
ˆ Unity:2
Mindestens Version 5.3.x
2.2 Download
Das Plug-in wird auf einer Online-Plattform als Unity-Paket bereitgestellt (Dateinamenerweiterung *.unitypackage)
und kann ¨uber folgende Internetadresse heruntergeladen werden:
https://github.org/brugr9/unityvolumerendering/02_Prototyp/cpvrLab-VolumeRendering.unitypackage
2.3 Installation
Die Installation des Plug-ins in ein Unity-Projekt erfolgt ¨uber den Asset-Workflow von Unity als Import eines
Custom-Packages:
1. Starten Sie Unity und ¨offnen Sie ein Projekt, in welchem Sie das Plug-in verwenden m¨ochten.
2. W¨ahlen Sie das Men¨u Assets > Import Package > Custom Package ..., um den Datei-Explorer zu
starten (siehe Abbildung 2.1).
3. W¨ahlen Sie im Explorer das Paket cpvrLab-VolumeRendering.unitypackage unter dem Ihnen bekannten
Pfad. Danach wird der Dialog Import Unity Package angezeigt.
4. W¨ahlen Sie alle Elemente des Paketes aus und dr¨ucken anschliessend Import. Unity installiert den Inhalt des
Paketes in den Asset-Ordner.
Abbildung 2.1: Men¨u Import Package
1ActiViz .NET, URL: http://www.kitware.com/products/activiz.html (besucht am 9. Mai 2016).
2Unity Technologies. URL: https://unity3d.com/ (besucht am 9. Mai 2016).
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 2
5. 3 Plug-in
3.1 Datens¨atze
3.1.1 DICOM-Datensatz importieren
Um medizinische Daten zu rendern, kann mit diesem Plug-in ein DICOM-Datensatz importiert werden. Dazu kann
in der Project-View ¨uber das Kontext-Men¨u (RMT) der Eintrag ’Import DICOM-Dataset...’ gew¨ahlt werden (siehe
Abbildung 3.1). Danach ¨offnet sich ein Datei-Explorer, mit dem ein Ordner auf dem System angegeben werden
kann, welcher einen DICOM-Datensatz enth¨alt (Dateinamenerweiterung *.dcm). Zu beachten ist, dass die Dateien
im Datei-Explorer leider nicht angezeigt werden (siehe Abbildung 3.2).
Abbildung 3.1: Kontext-Men¨u der Project-View mit dem Eintrag ’Import DICOM-Dataset. . . ’
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 3
6. Abbildung 3.2: Datei-Explorer ’Import DICOM-Dataset. . . ’ zur Wahl eines Ordners mit *.dcm-Dateien
W¨ahrend des Imports werden folgende Schritte durchgef¨uhrt:
ˆ In der Assets-Datenbank wird ein neuer Ordner erstellt. Er erh¨alt denselben Namen wie der im Datei-Explorer
angegebene Ordner.
ˆ Aus dem Datensatz werden Metadaten gelesen und in eine JSON-Datei geschrieben, zu finden im neuen
Ordner.
ˆ Aus dem Datensatz werden Bilder als *.png in den neuen Ordner gespeichert (siehe Abbildung 3.3).
ˆ Aus den Bildern wird eine 3D-Textur (Texture3D) als Asset erstellt. Die JSON-Datei enth¨alt nebst den
Metadaten auch eine Liste der PNG-Dateien, aus welchen die 3D-Textur erstellt wurde sowie die GUID der
3D-Textur selber.
Abbildung 3.3: Inspector-View mit den Einstellungen eines Bildes nach dem Import
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 4
7. 3.1.2 Datensatz aus Selektion erstellen
Mit dem Plug-in kann aus einer Auswahl von CT-Bildern aus den Assets 3D-eine Textur erstellt werden (siehe
Abbildung 3.4). Dies bietet den Vorteil, dass aus einem Satz von Bildern mehrere Teilbereiche als 3D-Textur
gehalten werden k¨onnen.
Vorallem aber kann auf diesem Wege auch eine Texture3D aus einem Satz von Bildern erstellt werden, welche nicht
mit dem DICOM-Import in die Asset-Datenbank gelangt sind, sondern schon davor als PNG oder JPG auf dem
System vohanden waren, ¨uber den ¨ublichen Workflow von Unity importiert wurden und somit bereits als 2D-Textur
vorhanden sind.
Abbildung 3.4: Kontext-Men¨u der Project-View mit dem Eintrag ’Create > Texture3D from selection’
3.1.3 Templates
Das Plug-in verwendet per Default einen Datensatz ’Default-VolumeDataset’ (JSON-Datei) und ein ’Default-
Volume3D’ (Texture3D, siehe Abbildung 3.5). Das Plug-in h¨alt aber auch Beispiel-Datens¨atze bereit, erstellt aus
Bildern vom SLProject und aus den Beispieldaten von VTK (siehe Abbildungen 3.6 und 3.7).
Abbildung 3.5: Inspector-View von Datensatz und 3D-Textur als Default-Werte
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 5
8. Abbildung 3.6: Inspector-View von Datensatz und 3D-Textur, erstellt aus den Beispieldaten vom SLProject
Abbildung 3.7: Inspector-View von Datensatz und 3D-Textur, erstellt aus den Beispieldaten von VTK
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 6
9. 3.2 Volumen-Objekt erstellen
Das Erstellen eines Volumen-Objektes erfolgt ¨uber das Men¨u GameObject mit dem Eintrag ’Volume’. Derselbe
Eintrag ist auch in der Hierarchy-View ¨uber das Kontext-Men¨u (RMT) erreichbar (siehe Abbildung 3.8). Das
Volumen-Objekt kann aber auch mit der Tastenkombination Ctrl + Shift + V erstellt werden.
Abbildung 3.8: Men¨u GameObject (links) und Kontext-Men¨u der Hierarchy-View (rechts) mit dem Eintrag ’Volume’
Zum Rendern einer Volumengrafik wird ein kombiniertes Objekt aus zwei GameObjects erstellt: ein GameObject
’Volume’ und dessen Child-GameObject ’Region of Interest’ (siehe Abbildung 3.9).
Abbildung 3.9: Das GameObject ’Volume’ und dessen Child-GameObject ’Region of Interest’ in der Hierarchy-View
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 7
10. Das GameObject ’Volume’ enth¨alt die in Unity ¨ubliche Transform-Komponente, eine Bounding-Box und einen
’Volume Filter’. Der Filter liest ein als JSON-Datei zugewiesenes Dataset und l¨adt die entsprechende 3D-Textur
ins Shader-Programm. Im Flyout ’Volume Info’ werden die Metadaten des Datensatzes angezeigt (siehe Abbil-
dung 3.10).
Abbildung 3.10: Inspector-View von GameObject ’Volume’
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 8
11. Dem GameObject ’Volume’ untergeordnet wird eine Region of Interest (ROI) erstellt. Das GameObject erh¨alt die
in Unity ¨ubliche Transform-Komponente, einen Mesh-Filter f¨ur einen ’Cube’, den dazu geh¨orenden Mesh-Renderer
mit einem Material ’Default-Volume’ und die Komponente ’Region of Interest’ (siehe Abbildung 3.11). Mit diesem
GameObject kann der zu rendernde Bereich manuell festgelegt werden. Das Material dient als Transferfunktion
(TF).
Abbildung 3.11: Inspector-View von GameObject ’Region of Interest’
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 9
12. 3.3 Die Komponente Bounding Box
Den GameObjects ’Volume’ und ’Region of Interest’ wird automatisch eine Komponente ’Bounding Box’ hinzugef¨ugt
(siehe Abbildung 3.12). Die Komponente kann nicht editiert werden – sie dient lediglich zur r¨aumlichen Orientierung
in der Scene-View. Die Ausdehnung der GameObjects wird in der Szene-View mit non-axis-aligned Bounding Boxen
(BB) dargestellt: Die ¨aussere BB zeigt die Ausdehnung des GameObjects ’Volume’ (Farbe: weiss), die innere BB
geh¨ort zum GameObject ’Region of Interest’ (Farbe: gelb) (siehe Abbildung 3.13).
Abbildung 3.12: Inspector-View der Komponente Bounding Box
Abbildung 3.13: Darstellung der Bounding Box von GameObject ’Volume’ und GameObject ’Region of Interest’ in
der Scene-View
Die Bounding Box kann ¨uber das Men¨u ’Component > Custom > Bounding Box’ auch anderen GameObjects
hinzugef¨ugt werden (siehe Abbildung 3.14). Dasselbe ist auch ¨uber den Knopf ’Add Component’ in der Inspector-
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 10
13. View f¨ur ein GameObject m¨oglich (siehe Abbildung 3.15). Pro GameObject kann aber nur eine Bounding Box
verwendet werden (siehe Abbildung 3.16).
Abbildung 3.14: Eintrag Bounding Box im Men¨u Component
Abbildung 3.15: Eintrag Bounding Box in der Komponenten-Maske der Inspector-View
Abbildung 3.16: Meldung ’Invalid Operation’ f¨ur das mehrfache Hinzuf¨ugen einer Bounding Box
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 11
14. 3.4 Die Komponente Volume Filter
Dem GameObject ’Volume’ wir automatisch eine Komponente ’Volume Filter’ hinzugef¨ugt. In dessen Inspector-
View kann im Feld ’Dataset’ ein vormals als JSON-Datei erstellter Datensatz ausgew¨ahlt werden. Ist dies erfolgt,
werden im Flyout ’Info’ Kenndaten des Datensatzes angezeigt (siehe Abbildung 3.17). Zudem wird die in der
JSON-Datei angegebene Texture3D zum Rendern auf die Grafikprozessoren geladen. ¨Uber das Kontext-Men¨u der
Komponente kann die Gr¨osse des Objektes automatisch gesetzt werden (siehe Abbildung 3.18). Dabei wird die
gr¨osse der 3D-Textur mit den Werten des ’Pixel Spacing’ multipliziert und die so erhaltenen x-, y- und z-Werte in
der Transform-Komponente untere ’Scale’ eingetragen.
Abbildung 3.17: Inspector-View der Komponente ’Volume Filter’ mit dem Feld ’Dataset’ und den Kenndaten im
Flyout ’Info’
Abbildung 3.18: Kontext-Men¨u der Komponente ’Volume Filter’ mit dem Eintrag ’Set scale’
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 12
15. Als User kann man aber auch ein ’Empty GameObject’ erstellen und diesem ¨uber das Men¨u ’Component’ einen
’Volume Filter’ hinzuf¨ugen (siehe Abbildung 3.19). Dasselbe ist auch ¨uber den Knopf ’Add Component’ in der
Inspector-View des ’Empty GameObjects’ m¨oglich (siehe Abbildung 3.20). Pro GameObject kann aber nur ein
’Volume Filter’ verwendet werden (siehe Abbildung 3.21).
Abbildung 3.19: Eintrag ’Volume Filter’ im Men¨u Component
Abbildung 3.20: Eintrag ’Volume Filter’ in der Komponenten-Maske der Inspector-View
Abbildung 3.21: Meldung ’Invalid Operation’ f¨ur das mehrfache Hinzuf¨ugen eines ’Volume Filter’
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 13
16. 3.5 Die Komponente Region of Interest
Dem GameObject ’Region of Interest’ wir automatisch eine Komponente mit demselben Namen hinzugef¨ugt. Die
Komponente ’Region of Interest’ kann nicht editiert werden – sie ist lediglich Zust¨andig f¨ur das Einschr¨anken des
Editierens der Transform-Komponente sowie f¨ur das Laden der Werte aus der Transform-Komponente auf den
Volumen-Shader (siehe Abbildung 3.22). Nat¨urlich ist der Gebrauch der Komponente nur sinnvoll als Child-Objekt
eines GameObjects mit Komponente ’Volume Filter’ sowie in Kombination mit einem Volumen-Material resp. eines
Volumen-Shaders.
Abbildung 3.22: Inspector-View der Komponente ’Region of Interest’
Als User kann man aber auch ein ’Empty GameObject’ erstellen diesem und ¨uber das Men¨u ’Component’ eine
Region of Interest hinzuf¨ugen (siehe Abbildung 3.23). Dasselbe ist auch ¨uber den Knopf ’Add Component’ in der
Inspector-View des ’Empty GameObjects’ m¨oglich (siehe Abbildung 3.24). Pro GameObject kann aber nur eine
Region of Interest verwendet werden (siehe Abbildung 3.25).
Abbildung 3.23: Eintrag ’Region of Interest’ im Men¨u Component
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 14
17. Abbildung 3.24: Eintrag ’Volume Filter’ in der Komponenten-Maske der Inspector-View
Abbildung 3.25: Meldung ’Invalid Operation’ f¨ur das mehrfache Hinzuf¨ugen einer Region of Interest
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 15
18. 3.6 Rendermethode und Transferfunktion
Das Rendern der Volumengrafik als GameObject erfolgt ¨uber den in Unity ¨ublichen Workflow mit einem Material und
der Wahl eines Shaders. Das Material kann vom Benutzer kopiert, editiert und gespeichert werden. Per default wird
ein Material namens ’Default-Volume’ aus den Ressources-Assets des Plug-ins verwendet (siehe Abbildung 3.26).
Abbildung 3.26: Inspector-View des Materials ’Default-Volume’ mit einer Auswahl von Volumen-Shader
Die Volumengrafik wird mit einen Raycaster als Rendermethode berechnet. Die dazu ben¨otigte Transferfunktion
kann im Material-Editor festgelegt werden. Dazu stehen folgende Shader-Varianten zur Verf¨ugung:
ˆ Transferfunction Texture: Eine Texture2D als Transferfunktion, im Sinne einer Lookup-Tabelle (LUT).
ˆ Transferfunction Colors: Eine Liste von editierbaren Farben als Transferfunktion.
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 16
19. 3.6.1 Textur als Transferfunktion
Das Material ’Default-Volume’ verwendet eine Texture2D als Lookup-Tabelle (LUT). Dabei handelt es sich um
eine 255 x 1 Pixel grosse Textur mit den drei Farbkan¨alen rot, gr¨un und blau (RGB) sowie einem Alpha-Kanal (siehe
Abbildung 3.27). In den Material-Assets des Plug-ins sind zudem Texture- und Material-Templates zu finden, so
z.B. die 2D-Textur ’Template-TF-LUT-SLProject’. Diese wird im Material ’Template-TF-LUT-SLProject’ verwendet
(siehe Abbildung 3.28).
Abbildung 3.27: Inspector-View der Texturen ’Default-TF-LUT’ und ’Template-TF-LUT-SLProject’
Abbildung 3.28: Inspector-View des Materials ’Template-TF-LUT-SLProject’
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 17
20. 3.6.2 Liste von Farben als Transferfunktion
Mit einer weiteren Komponente ’Transferfunction Color Array’ kann die 2D-Textur, welche als LUT verwendet wird,
editiert werden (siehe Abbildung 3.29). Hinzugef¨ugt wird die Komponente ¨uber das Men¨u ’Component > Volume
> TF Color Array’ oder aber ¨uber den Knopf ’Add Component > Volume > TF Color Array’ in der Inspector-View
eines GameObjects. Auch hier gilt: Pro GameObject kann nur eine Komponente dieses Typs verwendet werden.
Abbildung 3.29: Die Komponente ’Transferfunction Color Array’
Das Plug-in stellt mit einer Color Preset Library namens ’TF-Colors’ vorparametrisierte Farben zur Verf¨ugung
(siehe Abbildung 3.30). Diese k¨onnen im Farbeditor ¨uber ein Flyout aufgerufen und angezeigt werden (siehe Abbil-
dung 3.31).
Abbildung 3.30: Inspector-View der Color Preset Library ’TF-Colors’
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 18
21. Abbildung 3.31: Color-Editor mit Preset-Library und Color-Editor-Flyout zur Wahl einer Preset-Library
3.7 Benutzerhandbuch
Dieses Benutzerhandbuch ist im Unity-Package auch als PDF-Datei vorhanden und kann ¨uber das Hilfe-Men¨u
aufgerufen werden (siehe Abbildung 3.32).
Abbildung 3.32: Men¨u ’Help’ mit dem Eintrag cpvrLab VolumeRendering Manual
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 19