Commit de1a8995 by wester

das ist ein commit

parent 8bbaf25f
Pipeline #315 passed with stage
in 42 seconds
......@@ -5,4 +5,6 @@
\todo{TODO}
\section{VR}
\subsection{vive}
......@@ -12,49 +12,92 @@ Die gesammte Rendering ist Abstrahiert und aus der Engine hat man keinen direkte
Das Unreal Engine Materialsystem ist der vorgesehene Weg um Shader zu Implementieren.
Im Stil der UE4 Blueprints lassen sich damit grafisch Materialiern definieren die von der Engine in zugehörige Shader umgewandelt werden.
\todo{Bild}
\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 einer 2D Textur umgewandelt.
Als Alternative wurde das eindimensionale Buffer 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.
Farbwerte sind im Wetebereich $[0-1]$ und werden in unterschiedlichen Datenformaten gespeichert.
Für die Implementierung wurde das HDR Datenvormat der Unreal Engine verwendet.
Dabei wird jeder Farbkanal in einer 10 Bit Integer codiert und ergibt damit pro Farbkanal $2^10$ diskrete Farbwerte. \todo{Bits überprüfen köntne auch 16 sein}
Das bedeute auch für eine Punktwolke die wir als eine Textur codieren haben wir eine Maximale Auflösung pro Achse.
Dabei wird jeder Farbkanal in einer 16 Bit Integer codiert und ergibt damit pro Farbkanal $2^16$ diskrete Farbwerte.
Das bedeute auch für eine Punktwolke die wir als Farbtexture codieren haben wir eine maximale Auflösung pro Achse.
Um die Daten in eine Textur zu überführen müssen wir diese vorbereiten.
Zunächst wird das Minimum und die Größe entlang jeder Achse bestimmt.
Mit diesen Daten lässt sich die gesamte Punktwolke in den Einheitswürfel transformieren.
$$ min = Minimum(p) \forall p \in Punktwolke \\$$
$$max = Maximum(p)\\$$
$$size = max-min $$
$$Result =\frac{ p-min}{size}$$
\begin{equation}
\begin{split}
\label{eq:Bounding}
\forall p \in Punktwolke \\
min = Minimum(p) \\
max = Maximum(p)\\
size = max-min \\
p_{Einheitswürfel} =\frac{ p-min}{size}
\end{split}
\end{equation}
Die so codierten Punkte lassen sich in einer Textur abspeichern und im Shader wird diese Transformation umgekehrt.
Die so codierten Punkte lassen sich in einer Textur abspeichern und im Shader wird die Transformation in den Einheitswürfel umgekehrt.
Das Aufbereiten der Farbtextur ist einfach.
Die Farben sind im 3D Tile als byte große Integer gespeichert.
Diese können direkt in eine Unreal Textur konvertiert werden.
Die Farben sind im 3D Tile als Byte große Integer gespeichert und können direkt in eine Unreal Textur konvertiert werden.
Die erzeugten Texturen sind immer quadratisch aber die Anzahl Punkte ist nicht vorgegeben.
Für die Implementeirung wurde immer die Quadratische Textur bestimmt die genug Platz für alle Punkte bietet und die nicht verwendeten Punkte haben in der Farbtextur einen $\alpha$ Wert (4. Farbkanal, Transparenz) von 0 sonst 1.
\section{Rendering}
In der Unreal Engine ist
Quadchain
Shader
aus x pos des Meshes uv berehcnen
texturen (pos udn rgb auslesen9
position setzen udn quad zum betrachter drehen
Sphern funktion drauf (rund machen)
zusätzlichen quads discarden
extraquads
wxtrapountke in der textur
An die richtge position schiebern und rotieren
In der Unreal Engine ist das Rendern von Punktwolken nicht vorgesehen und deshalb gibt es keinen Punkt Modus wie in OpenGL.
Als Basis für den Rederingprozess wurde deshalb eine Quadchain verwendet (Siehe Abbilduung \ref{ing:quadchain})
Diese Quadchain besteht aus $2^20$ einzelnen Quadraten entlang der Z Achse.
Jedes Quad ist dabei an einer Ganzzahligen Z Position und die Ecken sind bei 1 und -1.
\begin{figure}
\begin{center}
\label{img:quadchain}
\includegraphics[width=\textwidth]{Bilder/Quadchain32.png}
\caption{Ein Quadchain mit 32 Quads}
\end{center}
\end{figure}
Beim eigentlichen Rendervorgang kann im Shader, also in UE4 Material jedes Quad an eine Position einse Punktes geschoben werden.
Hierbei wird die X-Position des Quads als Index in die Punktwolke verwendet.
Aus der größe der quadratischen Textur und dem Index können die Texturkoordinaten (uv) in der 2D Textur berechnet werden.
\todo{Formel?}
Mit den Texturkoordinaten kann die Position und die Farbe des Punktes ausgelesen werden.
bevor die Position verwendet werden kann muss diese aus dem Einheiswüfel 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.
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 Weltpositon setzt.
Für die Sichtbarkeit wird der Quads zu dem Betrachter gedreht und in der Größe skaliert.
Zusätzlich wird das Quad noch durch eine runde Maske zu einem kleinen Kreis umgewandelt und mit der entsprechenden Farbe texturiert.
Die Quadchain hat eine feste Länge und die Punktwolke hat eine veränderbare Größe.
Deshalb werden größere Punktwolken in 2 aufgeteilt.
Bei kleineren Punktwolken werden die nicht verwendeten Quadrate verworfen.
\section{Ergebnisse}
Performance
Bidler
Die resultiernden Punktwolken sehen gut aus und die in dieser Arbeite verwendeten relativ kleinen Punktwolken sind in VR visualisierbar.
Außer das 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.
Bei 4 einzelnen Punktwolken mit 443175 Punkten ( 110369, 115991, 110377, 106438; 4 Instanzen der Quadchain) erreicht dieses vorgehen ca 44 fps.
Für eine Große Punktwolke mit 1797690 Punkten gesplittet in 2 Instanzen sind es ebenfalls 44 fps.
\begin{figure}
\begin{center}
\label{img:Pnts1}
\subfigure[Gesamte Punktwolke]{\includegraphics[width=\textwidth]{Bilder/Punktwolke1.png}}
\subfigure[Nahaufname ]{\includegraphics[width=\textwidth]{Bilder/Punktwolke2.png}}
\caption{Punkwolke mit 1596685 Punkten. Die Textur im Hintergund ist die zugehörige Positionstextur, Rechts oben ist FPS und die Renderzeit in ms zu sehen }
\end{center}
\end{figure}
......@@ -3,4 +3,94 @@
\section{Versuchsablauf}
\section{Probanden}
Statistik
Etwas erfahrung mIt VR
AR erfahrung quasi ncih vorhanden
Pokemaon Go
Rot grün schwäche (genauen Namen erfragen)
ha keine Probleme gemacht, Farbbend der Steine war kräftig genug
\section{Ergebnisse}
\subsection{Stein Finden}
\subsubsection{Bilder}
\subsubsection{VR}
Punktwolken teilweie usncharf (feedback merherer Probanden
nciht ersichtlicch aus zeiten
siehe Grafik
\subsection{Nutzung der vorhanden Hilfsmittel}
\subsection{Kommunikation}
GRafik
\subsubsection{Videostream}
teilweise IGnoriert weil verwirrend
nur am anfang um sich auf Bezeichern zu einigen
links rechts
merkmale wie der schwarze turm
teilweise asl feedback genutz
auf Turm Zeigen ``derda?''
\subsubsection{VR}
Viel genutzt
teilweise kontne der Versatz im Kopf ausgeglichen werden (Neben dem Turm)
guter orientierungsanfang
wenn trackign ideal reicht der rote stein
Wackelige hand +tracking
Feedback wäre interessssanter ohne erlaubte kommunikation
\subsection{Fehleranzah}
Satistik
überwiegend fehelrfrei
Allgemeine Fehler
im Stein verutsch
letzter stein der sequenzn, nicht der davor
Sprachliche ungenauigkeitne
der 2. schwarze stein vs der 2. stein der schwarze
FehlerquellenVR
falsche kalibrierung ca 2 steine drüber-> stein mit gelicher Farbe
Fehlerquelle Video
links rechts schwäche
verstärkt durch gegebenfalls ander perspektive
\subsection{Timings}
Gruppen signifikaten schnelelr in
vr: 2
video:2
Durschnitt overall gleich
Person Selber eien zu große beinflussung
erkenne der Farbsequenz schwankt stark zwischen den personen
Beim Ablesne positionierung und finden des LAbels
\subsection{Unabhängigkeit}
Mießt Positiv
die kamera zeigt nicht dahin wo es gebraucht wird, wacklet, perspektive anders als in den Bidlern
Aber einzelne sehr schelchte bweertungen da es zu fehlern führt
kein gewohntes links rechts mehr
zeigen quer durch den Turm -> erste aufzeigepunkt gemeint, steht auf der andern Siete udn sieht den austritspunkt
todo nachscuane ob hololens da mit raum mesh schneidet
\subsection{NASA TLX uind UEQ}
TLX:
Experte median schwieriger
Video experte geringste körüpercliche anstrengung
UEQ
Atraktivität Stimulation Ooginalität in VR besser
durchschaubarkeit, effizez, steuerbarkeitne kein Statisch signifiknter unterschied
trends???
\subsection{Allgemeines}
Hololens
kliense FOV
schwer
schlechte Auflösung
\ No newline at end of file
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment