Started describing VR Plugins for Unity

Explained the native Unity VR API
Started SteamVR plugin
This commit is contained in:
FB
2022-03-05 15:35:20 +01:00
parent 82e524ad29
commit 4a106a18f2
9 changed files with 202 additions and 1 deletions

View File

@@ -1,5 +1,5 @@
% makeindex style file created by the glossaries package
% for document 'thesis' on 2022-3-3
% for document 'thesis' on 2022-3-5
actual '?'
encap '|'
level '!'

69
bib.bib
View File

@@ -520,3 +520,72 @@
author = {Oculus},
note = {letzer Zugriff 5.3.2022},
}
//Mache die Kommentare grade so weil ich den Überlick verloren habe (Was gehört zu was, etc. ...)
////////////////VR in Unity////////////////
@misc{Unity_VR_Overview_2022,
note = {letzter Zugriff am 05.03.2022},
author = {Unity},
title = {Unity - VR Overview},
url = {https://docs.unity3d.com/540/Documentation/Manual/VROverview.html},
year = {2016},
}
////////////////SteamVR////////////////
@misc{SteamVR_Overview_2022,
note = {letzter Zugriff am 05.03.2022},
author = {Valve},
title = {Valve - SteamVR Overview},
url = {https://valvesoftware.github.io/steamvr_unity_plugin/},
year = {2020},
}
@misc{SteamVR_Quickstart_2022,
note = {letzter Zugriff am 05.03.2022},
author = {Valve},
title = {Valve - SteamVR Quickstart},
url = {https://valvesoftware.github.io/steamvr_unity_plugin/articles/Quickstart.html},
year = {2020},
}
@misc{SteamVR_Render_Models_2022,
note = {letzter Zugriff am 05.03.2022},
author = {Valve},
title = {Valve - SteamVR Render Models},
url = {https://valvesoftware.github.io/steamvr_unity_plugin/articles/Render-Models.html},
year = {2020},
}
@misc{SteamVR_Input_2022,
note = {letzter Zugriff am 05.03.2022},
author = {Valve},
title = {Valve - SteamVR Input},
url = {https://valvesoftware.github.io/steamvr_unity_plugin/articles/SteamVR-Input.html},
year = {2020},
}
@misc{SteamVR_Skeleton_Input_2022,
note = {letzter Zugriff am 05.03.2022},
author = {Valve},
title = {Valve - SteamVR Skeleton Input},
url = {https://valvesoftware.github.io/steamvr_unity_plugin/articles/Skeleton-Input.html},
year = {2020},
}
@misc{SteamVR_Interaction_System_2022,
note = {letzter Zugriff am 05.03.2022},
author = {Valve},
title = {Valve - SteamVR Interaction System},
url = {https://valvesoftware.github.io/steamvr_unity_plugin/articles/Interaction-System.html},
year = {2020},
}
@misc{SteamVR_Skeleton_Poser_2022,
note = {letzter Zugriff am 05.03.2022},
author = {Valve},
title = {Valve - SteamVR Skeleton Poser},
url = {https://valvesoftware.github.io/steamvr_unity_plugin/articles/Skeleton-Poser.html},
year = {2020},
}
////////////////OpenVR////////////////

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -205,6 +205,7 @@ RaycastHit hit;
\end{lstlisting}
\section{3d Welt}\label{sec:3d-world}
\setauthor{Florian Beckerle}
Jedes Spiel besitzt eine Spielwelt.
Babei ist es egal ob es sich um eine 3D oder 2D Applikation handelt.
Unter den Begriff Spielwelt fällt die Umgebung in welcher sich der Spieler befindet.
@@ -252,6 +253,7 @@ In Forsaken starb Cayde jedoch und viele trauerten um ihn, als Gedenken wurde di
\subsection{City Grid System}\label{subsec:city-grid-system}
\setauthor{Florian Beckerle}
Um die Gestaltung der Welt in BeamVR zu erleichtern, wurde ein Grid System verwendet.
Dafür ist die Stadt in ein Raster aufgeteilt, an welchem sich alle Objekte der Welt auf allen 3 Achsen (x,y,z) orientieren.
Unity stellt, wie in Abb. ~\ref{fig:grid-system-unity} zu sehen, so ein Grid Snapping System zur Verf\"ugung.
@@ -280,6 +282,7 @@ Als n\"achstes findet man unter dem Bereich World Grid ein Attribut namens Size,
\subsection{Stadt}\label{subsec:city}
\setauthor{Florian Beckerle}
Jede Stadt hat viele verschiedene Strukturen wie zum Beispiel Sehensw\"urdigkeiten, Bauwerke und Einrichtungen wie Kinos, Theater oder Restaurants.
F\"ur BeamVR wurden daher insgesamt \"uber 34 Geb\"aude Modelle erstellt um eine Vielfalt in der Umgebung zu erreichen, siehe Abb. ~\ref{fig:beamvr_building-variety}.
@@ -300,6 +303,7 @@ TODO: PERFORMANCE ERHÖHEN MITHILFE VON MAPS UND TEXTUREN ERKKLÄREN!!!! (hier)
\subsection{Tag Stadt}\label{subsec:day-city}
\setauthor{Florian Beckerle}
Es wurden 17 der 34 verschieden Geb\"aude f\"ur diese Map modelliert, siehe Abb. ~\ref{fig:beamvr_building-variety}.
Der Fokus bei der Gestaltung des Bauwerke lag darauf, dass diese m\"oglichst realistisch aussehen und dennoch nicht zu rechenaufwendig in der Darstellung sind.
Daher wurden Texturen verwendet um kleinere Details an den Fassaden darzustellen, statt diese zu modellieren.
@@ -316,6 +320,7 @@ Daher wurden alle umliegenden Bauwerke mindestens 3 Meter h\"oher gemacht, als d
\end {figure}
\subsection{Nacht Stadt}\label{subsec:night-city}
\setauthor{Florian Beckerle}
In der Nacht Version der Stadt wurde die Skybox angepasst.
Diese zeigt nun einen Sternenhimmel.
Es handelt sich hierbei um eine Sphere oder Box, welche sich um die Spielwelt befindet, sie wird dazu benutzt um einen Himmel oder andere Umgebungen,
@@ -332,6 +337,7 @@ haben noch eigene Lichtquellen.
\end {figure}
\subsection{Apocalypse Stadt}\label{subsec:apocalypse-city}
\setauthor{Florian Beckerle}
F\"ur diese Umgebung wurden alle Geb\"aude nochmal \"uberarbeitet.
Statt den intakten Glasfassaden werden nun vor barrikadierte Fenster und Ziegelsteine ohne Verputz f\"ur die Bauwerke verwendet, siehe Abb. ~\ref{fig:beamvr_damaged_texture}.
Durch diese \"Anderung sieht die Stadt verlassen und postapokalyptisch aus.
@@ -356,6 +362,7 @@ Die Planzen und B\"aume wurden durch ausgetrocknete B\"usche ausgetauscht, damit
\section{Sound Design}\label{sec:sound}
\setauthor{Florian Beckerle}
Ohne Sound Design würden die Maps von BeamVR unrealisitsch, da in einer Stadt immer etwas los ist.
In der virtuellen Umgebung der verwendeten Game Engine existieren anfangs keine Geräusche, diese m\"ussen von den Entwicklern selber erstellt und eingef\"ugt werden.
@@ -376,6 +383,7 @@ Wenn der Spieler auf einem Pferd durch eine Weide reitet, kann eine dramatische
Die Informationen für die Absätze wurden hier gefunden ~\cite{GK_Media_Factory_Sound_Design_2022}.
\subsection{Apocalypse}\label{subsec:apocalypse-background-sound}
\setauthor{Florian Beckerle}
Die Musik in der Apocalypse Map ist stark an das Horror Genre angelegt.
Die Melodie ist jedoch nicht wirklich existent, stattdessen existiert ein durchgehendes pfeifendes Ger\"ausch, welches unterbewusst das Spannungslevel erh\"oht.
Der Spieler f\"uhlt sich etwas unbehaglich und alleine.
@@ -384,16 +392,19 @@ Dadurch wirkt die Stadt, neben den br\"ockelnden H\"ausern, zus\"atzlich noch me
Da die Sicht in dieser Map stark durch einen gelblichen Nebel, der wie ein Sandsturm wirkt, eingeschr\"ankt ist, kann man im Hintergrund den Wind pfeifen h\"oren.
\subsection{City}\label{subsec:day-night-background-sound}
\setauthor{Florian Beckerle}
Die Hintergrundger\"ausche der Tag und Nacht Version der Stadt sind sehr \"ahnlich.
Der Spieler kann Motorr\"ader und Autos auf den Straßen vorbeifahren h\"oren.
Hin und wieder kann man Menschen, die man nicht sehen kann, bei kurzen Gespr\"achen miteinander zuh\"oren und ein Kind husted im Hintergrund.
\subsection{Event}\label{subsec:building-collapse-sound}
\setauthor{Florian Beckerle}
Um spezifische Events, also bestimmte Dinge welche in der Welt passieren, f\"ur den Benutzer besser erkennbar zu machen, wurden zus\"atzlich Ge\"ausche eingef\"ugt.
Auf der Apocalypse Map sind zusammenbrechende Geb\"aude zu h\"oren, um die schlechte instandhaltung der verlassenen Stadt erneut zu verdeutlichen.
Aber wenn der Benutzer genauer hinsieht, kann man w\"ahrend diese Sounds h\"orbar sind, auch tats\"achlich eine kleine Auswahl an Bauwerken br\"ockeln sehen.
\section{Effects}\label{sec:effects}
\setauthor{Florian Beckerle}
Unity bietet verschiedene M\"oglichkeiten um das Aussehen der Applikation zu beeinflussen.
Mithilfe von Post Processing kann man Effekte zu dem Buffer der Kamera, also dem Aktuellen Frame der gerade Aufgenommen wurde, hinzuf\"ugen bevor etwas am Bildschirm Angezeigt wird.
Eine kleine Auswahl von diesen Effekten sind zum Beispiel Bloom, Grain oder Color Grading.
@@ -553,6 +564,7 @@ Bei der Sat vs Sat Kurve werden einfache Veränderungen der Farbe wie beim Color
Die letzte Option heißt Lum vs Sat Kurve und ermöglicht es in bestimmten Gebieten die Sättigung zu verringern, wie zum Beispiel in dunklen Stellen.
\subsection{Nebel}\label{subsec:fog-effect}
\setauthor{Florian Beckerle}
Unity bietet mehrere M\"oglichkeiten Nebel darzustellen.
Zum Beispiel mittels Post Processing, oder mithilfe der Lighting Einstellungen.
F\"ur BeamVR wurde die zweite Variante verwendet, da der Nebel in BeamVR kein Hauptaugenmerk ist und mithilfe dieser Methode das Einstellen für BeamVR schneller ging.
@@ -609,6 +621,7 @@ Mittels eines Filters kann eine Unschärfe der eingehenden Lichter geschaffen we
\subsection{Lichter}\label{subsec:light-effect}
\setauthor{Florian Beckerle}
In der Nacht Map wurden die von Unity bereitgestellten Point-Lights als Straßenlichter benutzt.
Point Lights k\"onnen mithilfe eines Radius auf einen bestimmten kreisf\"ormigen Bereich eingegrenzt werden.
Weiters wird mithilfe der Lichtst\"arke die Wirkkraft des Lichtes in diesem Gebiet genauer bestimmt.

View File

@@ -383,8 +383,127 @@ Die folgenden Vorteile und Nachteile beziehen sich auf die Source 2 Engine.
\end{itemize}
\subsection{VR in Unity}
\setauthor{Florian Beckerle}
Unity bietet bereits eine eingebaute basis VR API, welche ein paar Features für die Verwendung von VR Geräten zur Verfügung stellt.
Diese muss jedoch erst Eingstellt werden, das geht in folgenden Schritten.
Um Vr für die Spiele zu aktivieren, müssen zuerst den Player Settings, welche im Menu bei Edit > Project Settings > Player zu finden sind, geöffnet werden.
Als nächstes muss die Option Virtual Reality Supported aktiviert werden, dass in der Box ein Häcken zu erkennen ist, siehe Abb. ~\ref{fig:unity_vr_api_settings}.
In der darunter stehenden Liste, namens Virtual Reality SDKs, können nun mit dem Plus-Knopf eine neue SDK hinzugefügt werden.
Ein Beispiel hierfür wäre die Oculus SDK.
Der Minus-Knopf bietet die Möglichkeit diese SDKs wieder zu entfernen, siehe Abb. ~\ref{fig:unity_vr_api_settings}.
~\cite{Unity_VR_Overview_2022}
Wenn VR aktiviert wurde, wird das Spiel automatisch auf die VR-Brille gerendert und dort angezeigt.
Weiters besitzt jede Kamera, welche im Spiel ist, eine Option, auf welches Auge das Ausgangsignal angezeigt werden soll, zum Beispiel linkes-, rechtes-, beide- oder keine Augen.
Unter den Augen versteht man die Bildschirme der VR-Brille welche sich vor den Augen des Benutzers befinden.
Ein weiteres automatisches Feature ist, dass die Bewegung der VR-Brille in der realtität auf die Position der Kamera im Spiel übertragen wird.
Unity empfielt für die verwendung der Api folgende Brillen, Gear VR, Oculus CV1 und die Vive.
~\cite{Unity_VR_Overview_2022}
\begin {figure}
\centering
\includegraphics[scale=0.8]{pics/unity_basis_vr_api_settings}
\caption{Unity VR API - Settings}
\label{fig:unity_vr_api_settings}
\end {figure}
\subsection{VR Plugin}
\setauthor{Florian Beckerle}
Für BeamVR wurde das SteamVR Unity Plugin verwendet.
Es wurde von Valve entwickelt und bietet bereits eine Vielzahl an vorgefertigten Demos, welche mit der Installation des Plugins mitgeliefert werden, diese werden später genauer beschrieben..
~\cite{SteamVR_Overview_2022}
\subsubsection{Quickstart}
\setauthor{Florian Beckerle}
Für das Setup des SteamVR Unity Plugins sind 5 Schritte notwendig.
Damit alles Funktioniert muss SteamVR von Steam und das Plugin vom Unity Asset Store gedownloaded werden.
Nachdem die Installation beider Softwares abgeschlossen wurde, muss das Plugin, über den Package Manager, in das Unity Projekt importiert werden.
Im Menu Window wird nun eine neue Option namens SteamVR Input angezeigt, siehe Abb. ~\ref{fig:steamvr_input_menu_item}.
\begin {figure}
\centering
\includegraphics[scale=0.9]{pics/steamVR_Input_MenuItem}
\caption{Steam VR - Input Menu Item}
\label{fig:steamvr_input_menu_item}
\end {figure}
Wenn man auf diese klickt erscheint ein Popup welches fragt ob JSON Files kopiert werden sollen, dort drückt man auf Ja, siehe Abb. ~\ref{fig:steamvr_copy_json}.
\begin {figure}
\centering
\includegraphics[scale=1]{pics/steamVR_Input_CopyJSON}
\caption{Steam VR - Copy JSON}
\label{fig:steamvr_copy_json}
\end {figure}
Nachdem der Vorgang abschlossen ist, öffnet sich das SteamVR Input Fenster, dort muss nun Save and Generate gedrückt werden, siehe Abb. ~\ref{fig:steamvr_save_and_generate}.
\begin {figure}
\centering
\includegraphics[scale=0.6]{pics/steamVR-Input-SaveAndGenerate}
\caption{Steam VR - Save and Generate}
\label{fig:steamvr_save_and_generate}
\end {figure}
Nun ist die Installation abgeschlossen und das SteamVR Unity Plugin ist einsatzbereit.
~\cite{SteamVR_Quickstart_2022}
\subsubsection{Render Models}
\setauthor{Florian Beckerle}
Das SteamVR Unity Plugin bietet eine virtuelle Darstellung der Kontroller, welche der Benutzer in den Händen hält.
Die gezeigten Modelle benötigen hierfür mehrere Attribute, siehe Abb. ~\ref{fig:steamvr_render_models Script}.
\begin {figure}
\centering
\includegraphics[scale=1]{pics/steamVR_render_models_script}
\caption{Steam VR - Render Models Script}
\label{fig:steamvr_render_models Script}
\end {figure}
Der Index ist der Index des getrackten Gerätes, und wird vom System wie eine ID zur Erkennung verwendet.
Mittels dem Model Override kann man für Testzwecke ein bestimmtes Modell festlegen welches angezeigt werden soll.
Die Shader können die Darstellung des Objektes verändern.
Verbose gibt die Vorgänge im Script in der Konsole aus, diese Option wird jedoch nur für das Testen benötigt.
Create Components erstellt individuelle Objekte für jeden Komponenten welcher verfügbar ist.
Update Dynamically bewegt die einzelnen Komponenten gleich wie die physischen Gegenstücke.
~\cite{SteamVR_Render_Models_2022}
\subsubsection{Input}
\setauthor{Florian Beckerle}
Die die Hardware für VR Geräte schnell weiterentwickelt wird, hat Valve auf ein KeyBinding System zurückgegriffen.
Die Entwickler und die Benutzer selbst können für neue oder breits vorhandene Hardware einstellen, welche Funktion die einzelnen Knöpfe und Trigger haben.
Diese Aktionen wurden in 6 verschiedene Input Typen und einen Output Typen aufgeteilt.
Die Aktion Boolean besitzt zwei Zustände, true und false.
Sie wird oft benutzt um Objekte zu greifen, da man zum Beispiel einen Würfel entweder aufheben können soll oder nicht.
Single Aktionen können analoge Werte zwischen 0 und 1 annehmen und wird für Situationen benutzt wo der Boolean nicht ausreicht.
Ein Anwendungsfall ist ein Auto, welches bei 0 stehen bleibt und bei 1 Vollgas fährt.
Als Eingabe kann zum Beispiel der Trigger des Kontrollers benutzt werden.
Vector2 besitzt zwei Werte, X und Y.
Die Bewegungen des Kontrollers werden hierbei nur auf zwei Achsen gemessen.
Vector3 besitzt im Gegensatz zu Vector2 drei verschiedenen Werte X, Y und Z.
Diese Aktion wird selten benutzt, findet aber zum Beispiel im SteamVR Home einen Anwendungsfall beim Scrollen.
Pose gibt die Position und Rotation in einem dreidimensionalen Raum wieder.
Es wird dazu benutzt um die Bewegungen der Controller zu messen und digital nachzubilden.
Skeleton benutzt das SteamVR Skeleton Input um die ungefähre Position und Rotation der Finger zu erkennen, während der Kontroller in den Händen gehalten wird.
Vibration werden für haptisches Feedback bei VR Geräten verwendet.
Hierbei vibrieren der Kontroller, eine spezielle Haptik Weste oder ein preparierter Sessel.
~\cite{SteamVR_Input_2022}
\subsubsection{Skeleton Input}
\setauthor{Florian Beckerle}
~\cite{SteamVR_Skeleton_Input_2022}
\subsubsection{Interaction System}
\setauthor{Florian Beckerle}
~\cite{SteamVR_Interaction_System_2022}
~\cite{SteamVR_Skeleton_Poser_2022}
OpenVR Plugin
\subsection{Steam}