wrote gravita and prefabs sections. Still need some fine tuning

This commit is contained in:
2022-03-30 19:59:53 +02:00
parent 5d195804ef
commit 5c2ead4a6d
4 changed files with 174 additions and 6 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -37,15 +37,116 @@ Wenn der monitor Beispielsweise auf der anderen seite eingestellt wird, schaut m
\section{Code}
\label{sec:code}
\subsection{Ganzkörper-Tracking}
\subsection{Full-Body-Tracking}
\label{sec:full-body-tracking}
Für das Full-Body-Tracking verwenden wir ein Plugin namens Final IK.
Dieses Plugin ist ein kostenpflichtiges Programm.
Für die Diplomarbeit wurde das Plugin gratis zur Verfügung gestellt.
Für die Kalibrierung des Full Body Trackings verwenden wir einen Knopf auf dem Controller.
Dieser Vorgang ist bereits in dem Abschnitt~\ref{subsec:full-body-tracking-calibration} beschrieben.
Standardmäßig wird das Full Body Tracking mit der Taste C kalibriert.
Damit die Kalibration auch in VR erfolgen kann, ist eine Taste für das kalibrieren auch auf dem Controller reserviert.
Wie bereits in dem Abschnitt~\reft{subsec:full-body-tracking-calibration} beschrieben, ist diese Taste das Trackpad des Controllers.
Um das Kalibrieren auf eine andere Taste zu stellen, werden die Daten für das Full-Body-Tracking an die Script-Komponente übergeben, die für das horchen auf die gewünschte Taste verantwortlich ist.
Mit diesen Daten wird die statische Funktion \emph{Calibrate()} der Klasse \emph{VRIKCalibrator} aufgerufen, wenn die Taste auf dem Controller gedruckt wird.
Um zu checken, ob die Taste gedrückt wird, benützen wir das SteamVR Plugin.
In Listing~\ref{lst:defining-control-objects} werden die Objekte für das Kontrollieren der Tasten zugewiesen.
Mit diesen Objekten kann mithilfe der Update-Methode auf einen Tastendruck gehorcht werden.
Das Horchen auf diese Taste ist in Listing~\ref{lst:checking-for-input} ersichtlich.
\begin{lstlisting}[language={[Sharp]C},label={lst:defining-control-objects}, caption={Zuweisung der Kontroll Objekt}]{Zuweisung der Kontroll Objekte}
private readonly SteamVR_Action_Boolean _inputAction = SteamVR_Actions.default_Teleport;
private const SteamVR_Input_Sources RightController = SteamVR_Input_Sources.RightHand;
private const SteamVR_Input_Sources LeftController = SteamVR_Input_Sources.LeftHand;
\end{lstlisting}
\begin{lstlisting}[language={[Sharp]C},label={lst:checking-for-input}, caption={Auf Nutzerinput warten}]{Auf Nutzerinput warten}
private void Update()
{
if (_inputAction.GetStateDown(RightController) || _inputAction.GetStateDown(LeftController))
{
// Calibrate();
...
}
}
\end{lstlisting}
Wie bereits beschrieben werden die Daten der Script-Komponente übergeben.
Das Object welches diese Daten hält ist von dem Typen \emph{VRIKCalibrationController}.
Dieses wird schlussendlich wie in Listing~\ref{lst:vrik-calibration} verwendet.
\begin{lstlisting}[language={[Sharp]C},label={lst:vrik-calibration}, caption={Kalibrierung}]{Kalibrierung}
_calibrationControllerObject.data = VRIKCalibrator.Calibrate(
_calibrationControllerObject.ik,
_calibrationControllerObject.settings,
_calibrationControllerObject.headTracker,
_calibrationControllerObject.bodyTracker,
_calibrationControllerObject.leftHandTracker,
_calibrationControllerObject.rightHandTracker,
_calibrationControllerObject.leftFootTracker,
_calibrationControllerObject.rightFootTracker
);
\end{lstlisting}
\subsection{Beam Calibration}
\label{subsec:beam-calibration}
%TODO: (Quirin Ecker): Write the Beam Calibration Section
\subsection{Schwerkraft}
\label{subsec:gravity}
Damit die Applikation eine gewisse Spannung erhält, gibt es auch die Möglichkeit von dem Balken runterzufallen.
Dies Sollte passieren, sobald die Person auch in der physischen Realität von diesem Balken fällt.
Folgend ist die Bedingung für einen Fall und die Funktionsweise beschrieben.
\subsubsection{Bedienung}
Um ein realistisches Fallen zu gestalten ist es wichtig zu erkennen, wann eine Person nicht mehr auf den Balken ist und von dem Balek fliegt.
Die erste wichtige Bedienung ist, dass der Benutzer oder die Benutzerin über dem Abgrund ist.
Befindet sich die Person noch auf dem Haus, steht die Person zwar nicht auf dem Balken sollte aber trotzdem nicht runterfallen.
Die zweite und wahrscheinlich spannendere Bedingung ist, ab wann eine Person, welche sich über dem Abgrund befindet, von dem Balken runterfliegt.
Grundsätzlich fliegt der Benutzer oder die Benutzerin von dem Balken, wenn dieser oder diese das Gleichgewicht verliert.
Leider ist dies etwas schwierig nachzustellen, wenn sich der Balken auf dem Boden befindet.
Schlussendlich musste die Entscheidung getroffen werden, ob die Gravitation nach einem Fuß oder zwei Füßen auf dem Boden wirkt.
In der BeamVR Applikation ist die Entscheidung auf die Bediengung mit einem Fuß auf dem Boden gefallen.
Somit fällt der Benutzer die Benutzerin von dem Balken sobald ein Fuß der Person auf dem Boden ankommt.
\subsubsection{Funktionsweise}
\begin{figure}
\centering
\includegraphics[scale=0.2]{pics/gravitation_collider}
\caption{Schwerkraft Collider}
\label{fig:gravitation-collider}
\end{figure}
Um zu checken, ob ein Fuß sich auf dem Boden befindet wurde ein Collider unter den Balken Gelegt welcher in der Höhe des Bodens ist.
Diesen Collider kann man sich wie eine Unsichtbare Box vorstellen.
In Abb.~\ref{fig:gravitation-collider} ist diese Anordnung visualisiert.
Die Höhe des Bodens wird durch das SteamVR Setup ermittelt.
Hier werden die Kontroller auf den Boden gelegt und in dem Setup auf Kalibrieren gedrückt, um die Höhe des Bodens zu ermitteln.
Dies funktioniert anhand der getrackten Controller.
Weitere Informationen über das SteamVR Setup können in Abschnitt~\ref{subsec:steam-vr-setup} gefunden werden.
Kollidiert einer der Füße mit dem Collider, wird die gesamte VR Fläche mit einer Beschleunigung von 9.81 m/s nach unten bewegt.
Kurz bevor die Fläche auf dem Boden aufkommt, wird in eine GameOver Szene gewechselt.
Um die Möglichkeit zu verhindern, dass der Kopf durch das Haus fliegt, da nur die füße sich auf dem Boden befinden und der Kopf immer noch über dem Haus wurde ein weiterer Check eingebaut.
Dieser Check beinhaltet, dass das Headset sich über dem Collider sich befinden muss, damit der Spieler oder die Spielerin runterfliegt.
Befindet sich das Headset noch über dem Haus kann der Spieler oder die Spielerin nicht von dem Haus fliegen.
\subsection{Verkehrssystem}
\label{subsec:traffic-system}
\setauthor{Florian Beckerle}
@@ -610,9 +711,75 @@ Die eingestellten Effekte werden dann auf alle Objekte angewandt, die mithilfe d
~\cite{Unity_WindZones_2022}
\section{Unity Prefabs}\label{sec:prefabs}
In Unity gibt es ein System welches dem Entwickler oder der Entwicklerin erlaubt eine bestimmte Zusammenstellung von 3d Elementen zu speichern und mehrmals zu verwenden.
Wird dieses Prefab verändert verändert sich es in jeder Stelle wo es platziert worden ist.
Somit können Elemente welche aus mehreren kleineren Elementen bestehen gruppiert werden zu einem sogenannten Prefab und an mehreren Stellen verwenden.
Es werden dabei Komponenten und die Position der einzelnen Elemente relativ zu dem Prefab gespeichert.
Prefabs können auch überschrieben werden an der Stelle wo sie platziert worden sind.
Aus Erfahrung zeigt sich aber, dass dies mit Vorsicht zu genießen ist, da lokale änderungen nicht mehr global überschrieben werden.
Somit haben globale Änderungen keinen wirklichen Einfluss auf das lokale Prefab.
In der BeamVR Applikation wird dieses System an mehreren Stellen angewandt.
Beispielsweise ist es sehr nützlich, da die VR Fläche in der Applikation sich nicht wirklich abändert von Karte zu Karte.
Hier wird ein Game Prefab welches alle Game relevanten Elemente beinhaltet benutzt.
Dieses wird dann in alle Karten platziert.
Folgend wird das Game Prefab und zwei weitere wichtige Prefabs für BeamVR beschrieben.
\subsection{Game}\label{subsec:game-prefab}
\subsection{CameraRigGame}\label{subsec:camera-rig-game-prefab}
\subsection{CameraRigMenu}\label{subsec:camera-rig-menu-prefab}
Wie bereits beschrieben befinden sich alle Game relevant Elemente in dem Game Prefab.
Somit wird dieses Prefab in allen Szenen verwendet bis auf die Main Menu Szene und die Game Over Szene.
Folgend sind die wichtigsten Elemente des Game Prefab aufgelistet:
\begin{itemize}
\item \textbf{Beam:} Der Beam ist der virtuelle Balken, der von dem Hochhaus absteht.
\item \textbf{Collider:} Die Collider sind Elemente, welche Aktionen auslösen, wenn ein anderes Element mit diesen kollidiert
\item \textbf{GameCameraRig:} Das~\emph{GameCameraRig} ist weiteres Prefab in dem Game Prefab, welches für VR spezifische Elemente zuständig ist.
\end{itemize}
\subsection{GameCameraRig}\label{subsec:game-camera-rig}
Wie bereits im Game Prefab beschrieben ist das GameCameraRig Prefab ein bestandteil des Game Prefab und beinhaltet alle VR spezifischen Elemente.
Dieses Prefab ist ein abgeändertes CameraRig Prefab, welches bereits von dem SteamVR Plugin zur Verfügung gestellt worden ist.
Das Prefab an sich soll den VR Raum darstellen.
Folgende sind die wichtigsten Elemente des GameCameraRig Prefab aufgelistet:
\begin{itemize}
\item \textbf{Controller:} Die Controller sind Elemente welche eine SteamVR Controlelr Script-Component beinhalten.
Durch dieses Script befindet sich dieses Element in der richtigen Position und Orientierung relativ zu der VR Fläche.
\item \textbf{Camera:} Genauso wie die Controller Elemente besitzt das Camera Element auch ein Script.
Mit diesem Script nimmt die Kamera die Position und Orientierung des Headsets relativ zur VR Fläche.
In diesem Element befindet sich eine Kamera.
Diese Kamera ist für die Sicht des Spielers zuständig.
\item \textbf{Tracker Objekte} Diese Elemente haben ebenfalls wieder ein ähnliches Script.
Durch dieses Script befindet sich dieses Element in der gleichen Position und Orientierung des physischen Tracker.
In dem Script Komponenten kann die richtige Input Quelle für den Tracker eingestellt werden.
\item \textbf{Spieler Modell:} Das Spieler Modell ist das Modell, welches nach dem Kalibrieren des FUll-Body-Tracking die Pose des Spielers einnimmt.
\item \textbf{VRIK Calibration Controller:} Bei diesem Element befindet sich ein Script-Component, in dem das Full-Body-Tracking konfiguriert werden kann.
Für mehr Informationen wird auf Abschnitt~\ref{subsec:final-ik-plugin} verwiesen.
\end{itemize}
\subsection{MenuCamerRig}\label{subsec:menu-camera-rig}
Das MenuCameraRig ist genauso wie das GameCameraRig eine Abänderung des von SteamVR Plugin bereitgestellte CamraRig.
Im Gegensatz zum GameCameraRig wird das MenuCameraRig nicht in den 3 Karten verwendet.
Das MenuCameraRig wird in den Menü Scenen verwendet und besteht aus Menü und VR spezifische Elemente.
Viele Elemente sleich wie bei dem GameCameraRig, wie die Controller und die Camera.
Der große Unterschied des MenuCameraRig ist, dass die Controller noch weitere Script-Componenten beinhalten.
Diese sind Input Scripts welche für den Auswahlstrahl und das Auswählen der Menü-Elemente verantwortlich sind.
%TODO: Möglichkeit für ein Bild eines Inputstrahls
Ein weiterer Unterschied zu dem GameCameraRig ist, dass viele der gamespezifischen Elemente Fehlen.
Beispielsweise gibt es kein Spieler Modell in dem MenuCameraRig, womit alle Elemente für das Full-Body-Tracking nicht gebraucht werden.
\section{Inbetriebnahme}\label{sec:commissioning}
Die BeamVR Applikation benötigt viele Geräte und Gegenstände um die Immersion zu gewährleisten.
@@ -772,7 +939,7 @@ Diese ist für die Ortung des Balkens in der digitalen Welt.
Für mehr Informationen zu der Kalibrierung wird auf den Abschnitt~\ref{subsec:beam-calibration} verwiesen.
Dort wird das Setup noch genauer beschrieben.
\subsection{Full Body Tracking Kalibration}
\subsection{Full Body Tracking Kalibration}\label{subsec:full-body-tracking-calibration}
\begin{figure}
\centering

View File

@@ -38,7 +38,7 @@ VR Applikationen haben sich in der Vergangenheit hauptsächlich auf das Tracking
Das Tracken weiterer Körperteile oder ein sogenanntes Full Body Tracking, also das Tracken der Füße, Hände, Hüfte und des Kopfes, war bis vor kurzem ein technisches und vor allem auch ein finanzielles Problem~\cite{PAVEL_NUZHDIN_2020}.
Im Falle der bestehenden Anwendung VR Chat werden zwei Vive Tracker (siehe~\ref{sec:vive-tracker}) verwendet um den linken und den rechten Fuß zu tracken und ein weiterer um die Hüfte zu tracken.
Für die Hände und den Kopf werden jeweils die Controller (Siehe Abschnitt~\ref{sec:vr-controller})und das VR Headset (siehe Abschnitt~\ref{sec:vr-headset}) verwebtet.
Für die Hände und den Kopf werden jeweils die Controller und das VR Headset (siehe Abschnitt~\ref{sec:vr-headset}) verwebtet.
Somit kann der ganze Körper getrackt werden, da die restlichen positionen berechnetet werden können.
Diese Implementierung kann zum Beispiel bei der Applikation VR Chat gefunden werden (siehe~\cite{VRCHAT_DOCS_2021} oben).
In der Dokumentation wird es auch 6PT oder six-point genannt.

View File

@@ -702,7 +702,8 @@ Wenn die Applikation ausgeführt wird, liefert OpenVR, je nach vorhandenem SDK,
%%\subsection{Vive Wireless}
\subsection{Final IK Plugin}
\subsection{Final IK Plugin}\label{subsec:final-ik-plugin}
Final IK ist ein Unity Asset, welches von RootMotion entwickelt wurde.
Es wurde kostenlos für die Erstellung von BeamVR bereitgestellt und regelt das Full Body Tracking.
Hierbei wird das Full Body Biped IK, welches inbegriffen ist, verwendet.