VR Rollercoaster im Neuenheimer Feld
Mathematikon Flur

VR Rollercoaster

Intro

Dies ist die Dokumentation des Anfängerpraktikums von Selina Kunkel und Sascha Hund unter der Betreuung von Dr. Susanne Krömker (Visualization and Numerical Geometry Group, IWR Universität Heidelberg). Ziel dieses Praktikums war die Erstellung einer Virtual Reality Rollercoaster-Strecke, sowie das Modellieren einer zugehörigen Landschaft, wobei es bei der Umsetzung freigestellt war, eine reale Vorlage zu verwenden oder ein fiktives Szenario zu entwerfen.
Wir haben uns für ein Szenario mit Bezug zur Universität Heidelberg entschieden und deswegen einen Teil des Neuenheimer Feldes als Grundlage der Strecke ausgewählt.


Karte Neuenheimer Feld
Darstellung des modellierten Neuenheimer Feldes

Technologien

Das uns zur Verfügung gestellte Head-Mounted Display war die Oculus Rift Development Kit 2, die auch als "Crystal Cove" bezeichnet wird und sich durch ein Full HD OLED Display mit einer Auflösung von 960x1020 Pixel pro Auge (Gesamtauflösung: 1920x1020 Pixel), sowie ein Head-Tracking System, das über eine am Monitor des Benutzers befestigte Kamera die in der Brille verbauten Infrarot-LEDs erfasst, auszeichnet. [1]
Zur Verwendung der Oculus Rift wird die Oculus Software benötigt, die neben den Treibern auch den offiziellen Store enthält und zudem die Möglichkeit bietet, sich mit Freunden zu verbinden.

Zur Modellierung der Rollercoaster-Strecke und der Landschaft haben wir uns für die Unreal Engine von Epic Games in der Version 4.16.3 entschieden, da sie das Oculus Rift SDK bereits seit der Version 4.13 enthält und eine umfangreiche Dokumentation bereitstellt. [2]
Weitere wichtige Features der Engine sind die "Blueprint Spline Components", welche die Grundlage des von uns verwendeten Plugins SimpleCoaster darstellt, sowie die "Hierarchical Level of Details", die es erlauben, mehrere Static Mesh Actors zu einem einzigen zusammenzufassen, um die Draw Calls pro Frames zu reduzieren und damit den Ressourcenverbrauch zu verringern, ohne die Grafikqualität des gestalteten Levels merklich zu beeinflussen. [3]

Das SimpleCoaster Plugin beinhaltet Klassen zur Erstellung der Schienen sowie Trigger-Stellen, die der Geschwindigkeitsregulierung dienen.

Als Versionskontrollsystem haben wir Git über die Gitlab-Server verwendet und das Demo-Video mittels der Software TinyTake von MangoApps erstellt.

Umsetzung

Grundlage unserer Rollercoaster-Strecke ist das SimpleCoaster-Projekt, wobei wir hier das Test-Level entfernt und ein neues, leeres Level angelegt haben, sodass wir die Assets des Plugins nutzen konnten. Diese bestehen aus den Klassen TrackSpline, Trigger_AddVelocity Trigger_Brake und Trigger_Climbing, sowie gegebenenfalls zugehörigen Materialien, Texturen und Audiofiles.

Da sich unsere Vorlagen zur Modellierung der Gebäude auf öffentlich verfügbare Karten beschränkten und diese hauptsächlich zur Kontrolle der zweidimensionalen Relationen zuträglich waren, bestand ein erster Schritt der Umsetzung in der Anfertigung zahlreicher Fotos. Diese erlaubten uns die Gebäudefassaden bis zum gewünschten Detailgrad nachzubilden und zudem die Höhe der einzelnen Gebäude in Relation zueinander abzuschätzen.
Als Referenzobjekt bezüglich der Maße erstellten wir zunächst eine grobe Version des Mathematikons, wobei sich diese Maße durch die vom Editor und Plugin vorgegebenen Elemente (eine Wand mit Türrahmen sowie das TrackSpline) unter Nachbildung der fünften Etage ergaben.



Fluchtplan
Fluchtplan des Mathematikons, 5. Etage

Durch die Maße des Mathematikons konnten wir anschließend die Grundplatte des Levels erstellen und in einem nächsten Schritt Landschaft und Straßen bzw. Wege modellieren. Hierfür boten sich die in der Engine verfügbaren Landscape-Modellierungstools an, mithilfe derer wir eine natürliche Begrenzung des Levels in Form von Bergketten erstellten, sowie der integrierten Spline-Funktion, die sich für die Modellierung der Wege eignete.

Modellierte Landschaft
Modellierte Landschaft im Unreal Editor


Da wir abgesehen von den Gebäuden, die wir mit dem Rollercoaster betreten, keine Innenräume gestaltet haben, war es notwendig, ein eigenes Glas-Material zu erstellen, das zwar den Eindruck von echtem Glas vermittelt, das Licht allerdings so sehr reflektiert, dass die dahinterliegenden Räume nicht einsehbar sind.
Dieses Material wurde anschließend für die meisten Fenster verwendet, wobei nur einige Ausnahmen, wie bspw. das INF 252 oder die Gewächshäuser der biologischen Fakultät, mit dem originalen Glas-Material versehen wurden.


Glas Material
Reflektierendes Glas im Innenhof des Mathematikons

Auch mussten verschiedene Texturen, wie zum Beispiel die der Straßen oder auch die im Flur des Mathematikons ausgehangenen Bilder, erstellt werden. Texturen lassen sich in der Unreal Engine aus verschiedensten Dateien erstellen; im Falle der Bilder waren es PNGs, die importiert wurden.


Selbsterstellte Texturen
Bilder im Flur des 5. Stock des Mathematikons

Die Gebäude wurden ausgehend von den Karten und Fotos mithilfe von Geometry Brush Actors modelliert. Geometry Brush Actors sind einfache geometrische Figuren, wie etwa Würfel, die durch Änderung der Seitenlängen umgeformt und angepasst werden können.
Geometry Brush Actors können sowohl Volumen hinzufügen, als auch wegnehmen. So kann beispielsweise eine Fensteröffnung aus einer bestehenden Wand genommen werden, indem der Geometry Brush Actor auf "substractive" gesetzt wird. Dabei ist es allerdings wichtig, die Reihenfolge zu beachten. Wird die Fensteröffnung vor der Wand im Level platziert, so hat die Öffnung keinerlei Effekt. Diese Regelung erlaubt das Einfügen von weiteren Volumina in Hohlräumen, die über solche substractive Geometry Brush Actors erzeugt wurden.
Geometry Brush Actors werden häufig nur als Platzhalter für Static Meshes verwendet, da diese einerseits deutlich komplexere Formen erlauben und außerdem sehr viel effizienter gerendert werden können.
Da wir die gesamte Modellierung über die Unreal Engine selbst und nicht über weitere 3D-Modellierungsprogramme durchgeführt haben, konnten wir die Gebäude zwar nicht durch aufwendig gestaltete Grafiken ersetzen, aber aus Performance-Gründen zumindest aus den vorhandenen Brushes direkt in der Engine Static Meshes erstellen. Diese Optimierung konnte allerdings erst nach Fertigstellung der Modelle vorgenommen werden, da bei Static Meshes lediglich Größe und verwendete Texturen angepasst werden können, die Form allerdings unveränderlich ist.



Static Mesh INF 229
INF 229 als einzelnes Static Mesh

Nachdem die Außenfassaden der Gebäude modelliert worden waren, widmeten wir uns den Innenräumen des INF 252 und des Mathematikons, wobei wir auf vorhandene Assets wie Stühle, Tische u.a. zurückgriffen, die teilweise noch durch eigene bzw. modifizierte Texturen angepasst werden mussten.



Flur im Mathematikon
Modellierung der Innenräume

Einer der letzten Schritte war das Erstellen der Rollercoaster-Strecke. Durch das SimpleCoaster-Plugin lässt sich eine Strecke durch das Einfügen der TrackSpline-Klasse erstellen. Dieses anfängliche TrackSpline lässt sich an jeweils einem Ende bewegen und ziehen, wobei jederzeit ein neuer Punkt hinzugefügt werden kann, der dann einen neuen Streckenabschnitt markiert. Alle Punkte lassen sich im Nachhinein noch bewegen oder gegebenenfalls löschen. Die Strecke kommt zustande, indem so viele solcher Abschnitte eingefügt werden, dass ein realistischer Verlauf der Strecke entsteht. Sind alle notwendigen Punkte gesetzt, kann über den Menü-Punkt "Closed Loop" der letzte Abschnitt mit dem Initialen verbunden werden. Viele Punkte müssen dann für einen sanfteren Streckenverlauf, oder um einen spannenderen Verlauf zu erhalten, manuell rotiert und bewegt werden.
Ist die Strecke angepasst, muss ein Camera Actor dem Startabschnitt zugewiesen werden. Da die Kamera dann automatisch dem Streckenverlauf folgt, ist für dieses Virtual Reality Level kein Controller notwendig.
Ein letzter Punkt der Streckengestaltung besteht in der Regulierung der Geschwindigkeit. Global kann eine Mindestgeschwindigkeit gesetzt werden (diese kann zwar durch entsprechende Trigger unterschritten werden, nicht aber durch beispielsweise steile Anstiege im Streckenverlauf), allerdings muss jeder Abschnitt für ein realistischeres Fahrgefühl manuell eingestellt werden.



Bild der Strecke
Streckenentwurf, Blickrichtung Neuenheimer Feld

Im letzten Teil der Modellierung wurden landschaftliche Details, wie etwa ein Teich, Sträucher und Bäume, hinzugefügt, sowie die Beleuchtung, die bisher lediglich aus dem Skylight bestand, erstellt. Aus Performance-Gründen musste die Flora aber leider stark reduziert werden.



Landschaftsbild
Teich und Flora hinter INF 252

Ausblick

Demo

Die Demo des Projekts zeigt einen Durchlauf mit dem Rollercoaster, wobei allerdings auf den Sound verzichtet und die Kameraausrichtung während der Fahrt nicht verändert wurde.



Weiteres Bildmaterial findet sich in den Slides unserer Präsentation.

Quellen

[1] https://de.wikipedia.org/wiki/Oculus_Rift#Development_Kit_2
[2] https://developer.oculus.com/documentation/unreal/latest/concepts/unreal-engine/
[3] https://docs.unrealengine.com/en-us/