Eine wichtige Transformation ist die zwischen dem Koordinatensystem der Kinect und dem des Vive Controllers.
Ist zum Beispiel die Transformation entlang der X Achse der Kinect verschoben, so verstärkt sich der Fehler, wenn man das Objekt von der anderen Seite, also um 180\degree gedreht aufnimmt (siehe Abb, \ref{img:KinecOffset}). % @@@ Leertaste hinter \degree fehlt
Ist zum Beispiel die Transformation entlang der X Achse der Kinect verschoben, so verstärkt sich der Fehler, wenn man das Objekt von der anderen Seite, also um 180\degree gedreht aufnimmt (siehe Abb, \ref{img:KinecOffset}).
Der Fehler im lokalen Koordinatensystem wird in das globale transformiert und ist in dem Fall dann in genau entgegengesetzter Richtung.
\begin{figure}
...
...
@@ -102,7 +102,7 @@ Der Fehler im lokalen Koordinatensystem wird in das globale transformiert und is
\end{figure}
In der offiziellen Dokumentation der Kinect ist beschrieben, dass der Ursprung von Punktwolken in dem Tiefensensor liegt (siehe \cite{KinectDoku}).
Leider fehlt die exakte Positionsangabe dennoch.
Leider fehlt die exakte Positionsangabe in dem Gehäuse.
Im Bild \ref{img:KinectOrigin} aus dem chinesischen Microsoft Forum ist eine von Benutzern vermessene schematische Darstellung der Kinect abgebildet.
Der Tiefensensor liegt hinter der kleineren runden Öffnung, aber Fertigungsungenauigkeiten lassen keine exakten Daten finden.
Für die Implementation wurde angenommen, dass er sich mittig hinter der Öffnung befindet.
...
...
@@ -142,7 +142,7 @@ Der Versatz zwischen den Punktwolken ist leider nicht konstant und ändert sich
Das Vive Tracking ist hierfür ein Grund.
Vergleicht man mit einem 2m Zollstock die reale Distanz zu der in VR gemessenen dann wird daraus 1,98-2m virtuelle Distanz.
Die Distanz ist hierbei abhängig von der Orientierung zu den Basisstationen und der aktuellen Kalibrierung des Lighthous Tracking Systems.
Dieses Problem erschwert es, die Kalibrierung zwischen Vive und Kinect zu überprüfen, die zusätzlich für einen Versatz der Punktwolke verstärken kann. %@@@ der letzte Relativsatz ist unverständlich
Dieses Problem erschwert es, die Kalibrierung zwischen Vive und Kinect zu überprüfen.
Die Rotation der einzelnen Aufnahmen war kein Problem und hat keine sichtbaren Probleme produziert.
3D Tiles \cite{3DTiles} ist eine neue offene Spezifikation für das Streamen von massiven, heterogenen, geospatialen 3D Datensätzen.
Die 3D Tiles können genutzt werden, um Gelände, Gebäude, Bäume und Punktwolken zu streamen und bieten Features wie Level of Detail (LOD).%@@@ richtig korrigiert?
Die 3D Tiles können genutzt werden, um Gelände, Gebäude, Bäume und Punktwolken zu streamen und bieten Features wie Level of Detail (LOD).
Für die Arbeit wurde erwartet, das insbesondere LOD notwendig werden könnte, es wurde aber nicht verwendet.
\subsection{Tileset und Tiles}
Als Basis der 3D Tiles wird JSON formatiertes Tileset verwendet, das auf die eigentlichen Daten in Tiles verweist.
Das Tileset hat eine baumartige Struktur aus Tiles und deren Metadaten.
Jedes Tile hat hierbei ein 3D Volumen, das den geografischen Bereich beschreibt und einen geometrischen Fehler zur Echtwelt.
Außerdem können Kinder und deren Transformationen zu dem Elternteil angegeben werden. % @@@ Elterntile oder Elternteil?
Außerdem können Kinder und deren Transformationen zu dem Elterntile angegeben werden.
Alle Kinder liegen hierbei in dem Volumen des Elternknotens und können mit verschiedenen Datenstrukturen, wie K-D Bäumen Quadtrees oder ähnlichem die Region genauer spezifizieren (siehe Bild \ref{img:nonunifomQuad}.
Hierbei können die Kinder das Elterntile ersetzen (replace, z.B. ein genaueres Mesh) oder das bestehende Tile ergänzen (refine, zusätzliche Gebäude oder Details).
Die eigentlichen Daten der Tiles sind durch eine URL verlinkt und können dynamisch nachgeladen werden.
...
...
@@ -48,7 +48,7 @@ Das kann zum Beispiel für Bäume genutzt werden.
\item[ Point Cloud]
Format um Punktwolken zu übertragen. Das Tileformat enthält einen kleinen Header mit allgemeinen Metadaten.
Danach folgt ein JSON String, in dem steht, welche Daten wie in dem Binärteil vorliegen.
Außerdem ist enthalten, ob Daten wie Postion und Farbe dabei sind und wie diese gespeichert sind. % @@@ stimmt meine Korrektur?
Außerdem ist enthalten, ob Daten wie Postion und Farbe dabei sind und wie diese gespeichert sind.
Die eigentlichen Daten werden als Binärdaten übertragen und können so ohne Parsen direkt in den Speicher und Grafikspeicher geladen werden.
\item[ Composite]
Tileformat zum gleichzeitigen Übertragen mehrerer einzelner Tileformate in einem. Es lässt sich zum Beispiel ein Batched3D Modell für Gebäude mit Instanced3D Modell für Bäume verbinden und als ein Tile überragen.
@@ -13,8 +13,8 @@ Das Unreal Engine Materialsystem ist der vorgesehene Weg, um Shader zu implement
Im Stil der UE4 Blueprints lassen sich damit grafisch Materialien definieren, die von der Engine in zugehörige Shader umgewandelt werden.
\section{3D Tiles laden und vorbereiten}
Die Punktwolken könne als Array direkt geladen werden, jedoch lässt die Unreal Engien nicht zu, diese auch direkt auf die Grafikkarte zu laden und zu verwenden.
Als Alternative wurde das eindimensionale Buffer in eine quadratische 2D Textur umgewandelt. %@@@ das Buffer? Klingt außerdem nicht logisch 1D --> 2D...
Die Punktwolken könne als Array direkt geladen werden, jedoch lässt die Unreal Engien nicht zu, diese auch direkt als 1D Buffer auf die Grafikkarte zu laden und zu verwenden.
Als Alternative wurde der Array in eine quadratische 2D Textur umgewandelt.
Jeder Pixel der Textur besteht aus 3 Werten, jeweils einen für die 3 Farbkanäle Rot, Grün und Blau.
Ein Punkt im 3D Raum besteht ebenfalls aus 3 Werten für die Achsen X,Y und Z.
Um die Daten auf die Grafikkarte zu laden, codieren wir die Positionen in den Farbkanälen.
...
...
@@ -70,7 +70,7 @@ Aus der Größe der quadratischen Textur und dem Index können die Texturkoordin
Mit den Texturkoordinaten kann die Position und die Farbe des Punktes ausgelesen werden.
Bevor die Position verwendet werden kann, muss diese aus dem Einheitswürfel in die wirklichen Koordinaten zurück transformiert werden.
Das Minimum und die Größe aus Gleichung \cite{eq:Bounding} der Vorbereitung lässt sich das einfach zurückrechnen. %@@@ Satz bitte prüfen
Die in der Vorberitung errechnete Größe udn das Minimum können verwendet werden um die Gleichung \ref{eq:Bounding} umzukehren.n
Anschließend fehlt nur noch die Translation und Rotation der Punktwolke in der Welt.
Auch hier lässt die Unreal Engine nicht zu, das direkt eine Matrix als Parameter für das Material übergeben werden kann, aber durch eine Postion und eine Rotation lässt sich die Transformation im Material ausrechnen.
Die berechnete Endpostion wird als WorldPositionOffset an die Grafikkarte weitergegeben, die damit den Punkt an die richtige Weltposition setzt.
...
...
@@ -83,7 +83,7 @@ Deshalb werden größere Punktwolken in 2 aufgeteilt.
Bei kleineren Punktwolken werden die nicht verwendeten Quadrate verworfen.
\section{Ergebnisse}
Die resultierenden Punktwolken sehen gut aus und die in dieser Arbeite verwendeten relativ kleinen Punktwolken sind in VR visualisierbar. %@@@ sieht ``gut'' aus. Musst du konkret sagen was dir gefällt? Wissenschaftlicher Anspruch
Die resultierenden Punktwolken funktionieren für den Anwendungsfall und die in dieser Arbeit verwendeten relativ kleinen Punktwolken sind in VR visualisierbar.
Außer dem Deaktivieren von Schattenberechnungen wurden keine Performance Optimierungen vorgenommen.
Die Beispielwerte wurden mit einem i7 6700 und eine GTX 1070 aufgenommen. Eine genaue Analyse ist nicht erfolgt.
Eine Punktwolke mit 1596685 einzelnen Punkten erreicht ca 60fps (siehe Bild \ref{img:Pnts1}. Hierbei ist zu bedenken, das die ganze Quadchain von $2^20$ Punkten gerendert wird und überflüssige Geometrie erst im Shader/Material verworfen wird.
@@ -73,12 +73,29 @@ Der Gesamtablauf der Evaluation erfolge immer im ähnlichen Ablauf.
Vor dem Test wurden der allgemeine Fragebogen ausgefüllt, das grundlegende Szenario erklärt und eine Beispielaufgabe an einem seperaten Turm erklärt.
Anschließen wurden die beiden Szenarien evaluiert.
Die Reihenfolge VR und Video und die Turmpaare wurden hierbei zwischen den Team gewechselt, sodass diese selber nicht die Messung beeinflussen.
Ein Team startet hierbei entweder mit dem Video Szenario oder dem VR Szanario und einem Turmpaar.
Beim 2. Szenaro wurden dann Rollen getauscht und das andere Turmpaar genutzt um die Ergebnisse nicht zu verfälschen.
Außerdem wurde darauf geachtet das beide Turmpaare in VR und Video verwendet wurden.
Nach jedem Szenario wurden die Fragebögen zu dem Test ausgefüllt. Hierbei wurden eigene Fragen, NASA-TLX und der User Experience Questionnaire (UEQ) verwendet.
Abschließend gab es noch einen weiteren Fragebogen mit einer allgemeine Frage und freien Kommentaren.