Studiengang: Informatik, Vertiefung in Computer Perception and Virtual Reality CPVR
Diplomand: Roland Bruggmann, roland.bruggmann@students.bfh.ch
Betreuer: Urs K¨unzler, urs.kuenzler@bfh.ch
Experte: Federico Fl¨uckiger, federico.flueckiger@gs-efd.admin.ch
Datum: 16. Juni 2016
Berner Fachhochschule | Haute ´ecole sp´ecialis´ee bernoise | Bern University of Applied Sciences
Unity®
Volume Rendering
Plug-in zum Rendern von medizinischen Daten
Benutzerhandbuch
Inhaltsverzeichnis
1 Einleitung 1
2 Installationshinweise 2
2.1 Systemanforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.2 Download . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.3 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3 Plug-in 3
3.1 Datens¨atze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.1.1 DICOM-Datensatz importieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.1.2 Datensatz aus Selektion erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.1.3 Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2 Volumen-Objekt erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.3 Die Komponente Bounding Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.4 Die Komponente Volume Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.5 Die Komponente Region of Interest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.6 Rendermethode und Transferfunktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.6.1 Textur als Transferfunktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.6.2 Liste von Farben als Transferfunktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.7 Benutzerhandbuch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 i
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

Unity® Volume Rendering - Benutzerhandbuch

  • 1.
    Studiengang: Informatik, Vertiefungin Computer Perception and Virtual Reality CPVR Diplomand: Roland Bruggmann, roland.bruggmann@students.bfh.ch Betreuer: Urs K¨unzler, urs.kuenzler@bfh.ch Experte: Federico Fl¨uckiger, federico.flueckiger@gs-efd.admin.ch Datum: 16. Juni 2016 Berner Fachhochschule | Haute ´ecole sp´ecialis´ee bernoise | Bern University of Applied Sciences Unity® Volume Rendering Plug-in zum Rendern von medizinischen Daten Benutzerhandbuch
  • 2.
    Inhaltsverzeichnis 1 Einleitung 1 2Installationshinweise 2 2.1 Systemanforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2.2 Download . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2.3 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 3 Plug-in 3 3.1 Datens¨atze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3.1.1 DICOM-Datensatz importieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3.1.2 Datensatz aus Selektion erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.1.3 Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.2 Volumen-Objekt erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.3 Die Komponente Bounding Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.4 Die Komponente Volume Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.5 Die Komponente Region of Interest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.6 Rendermethode und Transferfunktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.6.1 Textur als Transferfunktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.6.2 Liste von Farben als Transferfunktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.7 Benutzerhandbuch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Unity®Volume Rendering – Benutzerhandbuch, Version 1.0, 16. Juni 2016 i
  • 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.1DICOM-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 ausSelektion 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-Viewvon 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 DasErstellen 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 KomponenteBounding 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 einGameObject 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 KomponenteVolume 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 kannman 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 KomponenteRegion 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 undTransferfunktion 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 alsTransferfunktion 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 vonFarben 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-Editormit 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