Space For Me

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche
Space for me plakat.jpg

Im Rahmen der Interdisziplinären Projektarbeit „Interaction Showcase“ des Bachelor-Studiengangs Media Engineering mit dem Titel "SPACE FOR ME" wurde ein Projektkonzept, bestehend aus mehreren interaktiven Stationen entwickelt. Das Projekt im Ganzen soll zeigen, dass den Studierenden viele Freiheiten gelassen werden. Jeder kann sich, im Besonderen während der Projekte, selbst verwirklichen. Die einzelnen Stationen zeigen diese Aspekte, mit Hilfe von einigen auf dem Weg zum Ingenieurstitel erstellten Arbeiten auf. Die voraussichtliche Hauptpräsentation wird an der „Langen Nacht der Wissenschaften“ 2015 stattfinden. Letzten Endes soll eine entweder dauerhaft installiert oder einfach aufzubauende Ausstellung erstellt werden. Diese wird zumindest zu bestimmten Veranstaltungen auch ohne die Anwesenheit der aktuellen Projektmitglieder leicht installierbar sein. Zielpersonen sind Besucher der Messe, hierbei v.a. Technik- und Hochschulinteressierte. Auf langer Sicht jedoch soll es Menschen für den Studiengang Media Engineering begeistern und die Zukunft des „Medien Ingenieurs“ sichern. Im Ideenfindungsprozess legten wir darauf Wert, dass der Schwerpunkt auf Vielfältigkeit liegt. Nicht jede Station sollte mit einer Microsoft Kinect realisiert werden, sondern mit vielen verschiedenen Gerätetypen und Herangehensweisen. Dennoch soll besonders im zweiten Semester daran gearbeitet werden, dass es dem Zuschauer bei allen Beispielen möglich ist, die Technik und Funktionsweise der Installationen nachvollziehen zu können.

Konzeption

Um ein möglichst ansprechendes Ergebnis am Ende der Projektarbeit zu erreichen, haben wir drei Teilprojekte konzeptioniert und ausgearbeitet. Die Aufgaben, welche durch diese Projekte entstanden, wurden unter den vier (bzw. im zweiten Projektsemester nur noch drei) Projektmitgliedern, unter Berücksichtigung der jeweiligen Qualifikationen aufgeteilt.

Die ersten beiden Teilprojekten waren die interaktive Simulation "Space For Science" und das interaktive, körpergesteuerte Spiel "Space For New Ways". Letzteres wurde allerdings zu Beginn der zweiten Projekthälfte verworfen.

Weiter kamen eine Virtual Reality Anwendung unter Einsatz der Oculus Rift DK2 mit dem Titel "Space For Visions" hinzu. Sowie eine Illusion eines Hologramms "Space For The Future", erstellt mit einer selbst angefertigten Konstruktion.

Teilprojekt "Space For New Ways"

Die Station „Space For New Ways“ ermöglicht die Steuerung einer beliebigen Anwendung über die Kinect. Rein theoretisch ist jedes Computerspiel für das Projekt geeignet, jedoch sollten die folgenden Bedingungen erfüllt sein, um eine einfache und thematische Eingliederung zu ermöglichen.


Steuerung

Die Spielsteuerung erfolgt über Gesten, die entweder über die Hände oder den gesamten Körper realisiert werden. Da wir Körperposition sowie -bewegungen im Raum erkennen müssen, bietet sich Microsofts Kinect Kamera inklusive zugehöriger Software mit Skeletterkennung und Tiefenwahrnehmung als Aufnahmegerät an. Bestimmte Signale des Nutzers werden von ihr aufgenommen, verarbeitet und anschließend an einen Joystick-Emulator weiter geleitet.

Joystick-Emulator

Um beliebige Signale in konkrete umzuwandeln wird ein Translater gebraucht. Hierzu wurde der, wie auch im Projekt „OhmFlight“ verwendete, virtuelle Joystick „vJoy“ benutzt, der auch bei unserem Projekt der Einfachheit halber Anwendung findet. Letzten Endes stellte eben dieser ein größeres Problem auf Grund seiner Instabilität dar. Die Monitoring Software stürzte jedes Mal ab, Daten wurden nicht korrekt aufgenommen und konnten dementsprechend nicht verwendet werden. Im nächsten Semester wird deswegen eine andere Lösung gesucht, beispielsweise Joystick Befehle in Tastaturbefehle umzuwandeln. Diese Variation ergibt noch mehr Möglichkeiten für unser Teilprojekt.

Ausgabe

Als Bildausgabe dienen separate Projektoren, entweder nebeneinander oder gegenüber installiert werden. Die räumliche Aufteilung ist variable und wird im endgültigen Präsentationsplan festgelegt. Um dem Schwerpunkt der Präsentation technischer Vielfalt gerecht zu werden, bietet es sich an, bei der Station „space for new ways“ verschiedene Projektoren zu verwenden, so etwa Kurzdistanz- und Rückprojektion. Sie wirken sich nicht auf das Spielempfinden aus, haben aber Vorteile, die den räumlichen Aufbau betreffen.

Funktionsweise

Space for me tp02 funktion.png

Auf dem PC laufen die spielbare Anwendung und der Joystick Emulator parallel. Angeschlossen werden die Kinect-Kamera und der Projektor, der als Bildschirm dient. Die Kamera nimmt Bewegungen des Nutzers vor der Leinwand auf und überträgt diese Daten an den PC, genauer gesagt an das in Visual Studio erstellte, und auf der OscKinect-Bibliothek basierende Programm. Hier werden die eingehenden Signale mit Hilfe des Emulators „vJoy“ in Tastenbefehle umgewandelt, die wiederum von der Anwendung aufgegriffen und umgesetzt werden können. Die Videoausgabe findet durch den Projektor auf eine Leinwand statt.


Aufbauvarianten

Variante 1: nebeneinander

Space for me tp02 aufbau nebeneinander.jpg

Hierbei haben beide Nutzer Sichtkontakt. Bewegungen und Reaktionen sind bei diesem Aufbau erkennbar. Blickkontakt und direkte Kommunikation zwischen den Anwendern und damit Ablenkung und eventuelles Eingreifen in das Programm des Gegners möglich.

Variante 2: gegenüber

Space for me tp02 aufbau gegenueber.jpg

Bei diesem Aufbau besteht kein Sichtkontakt. Die beiden Spieler sind visuell voneinander getrennt, verbale Kommunikation ist jedoch möglich. Ein Eingreifen in den Spielablauf des Gegners ist nicht durchführbar, ohne die eigene Station zu verlassen.


Modifikation der Steuerung

Space for me tp02 Koordinatensystem.png

Unter diesem Abschnitt finden sich Code-Ausschnitte, die als Modifikation des osc-Daten Auswertungsprogramms (Ubuntu) entworfen und angewendet wurden. Die vJoy-Ausgaben gehen die Achsen (x,y,z) betreffend von 0 bis 100. Dies lässt sich vergleichen, mit einem Joystick eines Gamecontrollers vergleichen, der nach vorne (Richtung 100) oder nach hinten (Richtung 0) gedrückt werden kann und ohne Berührung mittig (50) steht. Die Kinect berechnet die Raumdaten einer sich im sichtbaren Raum befindenden Person. Mit Hilfe der Skelett-Daten-Auslese, können so Koordinaten zur rechten bzw. linken Hand, Schulter und andere Körperteile erfasst werden. Hierbei befindet sich die Kinect am Ursprung des drei-dimensionalen Koordinatensystems (s. Abbildung rechts). Koordinaten auf der z-Achse können nur positiv werden, da sich der Nutzer nicht hinter der Kinect befinden kann. Y-Koordinaten werden unterhalb der Kamera, X-Koordinaten links von der Kamera negativ.

Links-/ Rechtsdrehung

[uint16 joyRollAxis = (uint16)20*(kinectUser.handLeft.yPos – kinectUser.handRight.yPos)+50;]

Drehung des Flugobjektes um die Z-Achse. Sind rechte Hand und linke Hand auf gleicher Höhe, so ergibt deren Differenz 0 und der Joystick befindet sich in seiner Ursprungsposition bei Wert 50. Der Faktor 20 dient zur Verstärkung, da die osc-Daten der Kinect in Meter angegeben werden. Ohne diesen Faktor, müsste der Höhenunterschied einen Meter betragen, um eine messbare Wertänderung zu erlangen. Mit diesem Faktor ergibt sich eine Wertänderung um 1 für 10cm, die die Hände voneinander entfernt sind.

Auf-/Abwärtsdrehen

[uint16 joyPitchAxis = (uint16)40*(kinectUser.shoulderCenter.zPos – kinectUser.position.zPos)+50;]

Drehung um die X-Achse, über die Berechnung der Neigung des Nutzers Oberkörper über die Z-Position von Oberkörper (shouldercenter) zur Körpermitte/Hüfte (position). Sind sie beide gleich entfernt, steht der virtuelle Joystick in seiner Ursprungsposition (50).

Vor-/Rückwärtsbewegung

[double haendeZentrum = (kinectUser.handLeft.zPos + kinectUser.handRight.zPos)/2;]

Mittlere Entfernung beider Hände zur Kinect.

[uint16 joySpeedAxis = (uint16)(20*(haendeZentrum – kinectUser.position.zPos))+50;]

Entfernung von Händen zum Körperzentrum, vergrößert um den Faktor 20. Sind die Hände neben dem Körper, steht das Flugobjekt still. Durch Näherung zur Kinect sinkt der Wert unter 50, das Flugobjekt fliegt rückwärts, ebenso umgekehrt.

Schießen

[uint16 schwellenwert = 1;]

Im Gegensatz zu den vorgegangenen Befehlen, wird hier ein Schwellenwert von einem Meter Entfernung zur Kinect gesetzt.

[if(kinectUser.position.zPos <= schwellenwert) {sendButton(1,1);}]

Wird dieser Schwellenwert unterschritten, wird kein Joystick geneigt, sondern ein Knopf gedrückt. Zumindest virtuell.


Probleme und Lösungsansätze

Reduktion der Rechneranzahl

Da „OhmFlight“ mittels zweier verschiedener Rechner lief, musste eine Möglichkeit entwickelt werden, alle Teile auf einem Rechner parallel laufen zu lassen, da ansonsten für den Mehrspielermodus vier Rechner gebraucht würden. Für die Reduktion von einem auf zwei Rechner wurde eine Virtuelle Maschine eingerichtet, in unserem Fall funktionierte die Oracle VM VirtualBox am besten. Dank des implizierten Virtuellen Netzwerks können so zwei Systeme mit der Hardware von einem simuliert werden. Das Aufsetzen der VM ist leicht und funktionierte schon beim ersten Versuch.

Programmstruktur aufbauen

Mehr als die Hälfte des ersten Semesters wurde darauf verwendet, den schon vorgefertigten Programmcode des „OhmFlight“-Projektes wieder in seiner Originalform ans Laufen zu bekommen. Die Anleitung dafür war nicht mehr als ein Eintrag im Wiki der Hochschule und der vollständige Code vorhanden. Leider fehlten viele Details in der Dokumentation insbesondere bezüglich der Schnittstellen zwischen den einzelnen Codebausteinen. Auch die Verwendung der verschiedenen Systeme (Windows-Ubuntu-Windows) wurde in keiner Weise erwähnt, dies hielt den Arbeitsfluss immens auf. Da das Gesamtprojekt in einer schnell aufbaubaren Präsentation resultieren sollte, erhielt das Erstellen vollständiger und übersichtlicher Anleitungen für den Aufbau höchste Priorität nach der erfolgreichen Realisierung.

.NET Framework Update von „Visual Studio“

Kurz vor der Zwischenpräsentation erhielt unsere Entwicklungsumgebung „Visual Studio“ ein „.NET Framework 4.5“-Update, woraufhin automatisch alle Ordnerpfade an das neue Framework angepasst wurden. Das Resultat war, dass das Teilprogramm „vJoyClient“ nicht mehr ordnungsgemäß ausgeführt werden konnte. Eine erste Lösungsidee war der Wechsel zu einer älteren VS Version, dies löste das Problem jedoch nicht wie erwartet. Die Lösung wurde auf das zweite Semester verschoben.


Mögliche weitere Vorgehensweise

1. Umgehen des Linux-Systems; Steuerungscode muss unter Windows laufen
Ziel: ein fertiges Programm
2. Komplette Neuauflage des vJoyClient-Programms

Des Weiteren wird überlegt, ob das Endprogramm „Oculus Rift“ kompatibel sein soll. Ist dies der Fall, muss im Besonderen die Dreh-Steuerung neu angelegt werden. Eine weitere Idee war, die Gestenauswertung nach Bedarf auszulegen. Es soll etwa möglich sein, dass der Nutzer über ein Interface bestimmte Bewegungen oder Treshholds vorgeben kann und die Reaktion des virtuellen Joysticks nach Belieben zuweisen kann.

Fazit

Aufgrund eines automatischen Software Updates funktionierte das bis dahin Erarbeitete nicht mehr korrekt und konnte bei der Zwischenpräsentation nicht wie gewollt vorgeführt werden. Da der Aufwand zur Fertigstellung dieses Projekts als zu groß eingestuft wurde, haben wir dieses schließlich verworfen um uns den anderen Teilprojekten zuzuwenden.


Teilprojekt "Space For Science"

Bei dem Teilprojekt handelt es sich um eine möglichst realistische Simulation unseres Sonnensystems, in das ein Anwender mit Hilfe seiner Hand eingreifen kann und durch die Steuerung eines schwarzen Lochs die Planeten aufgrund der Gravitation von ihren Bahnen ablenken kann.

Aufbau

Space for me tp01 aufbau.png

Der Aufbau ist sehr einfach gehalten. Die Kamera muss lediglich auf den Abstand zum Anwender eingestellt werden. So lässt sich der Aufbau sehr einfach den Raumbedingungen anpassen, beispielsweise funktioniert der Betrieb auf einem einfachen PC Monitor im 16 zu 9 Seitenverhältnis, wie auch, wenn es die Raumgröße zulässt, auf einer Großprojektion im 4 zu 3 Verhältnis.

Hardware

Im Groben konzentriert sich das Teilprojekt auf das Zusammenspiel von zwei Teilen, zum einen die programmierte Simulation und zum anderen das Tracking von Bewegungen mittels einer Tiefenbildkamera.

Rechner

Gearbeitet wurde zumeist auf einem Notebook mit Windows 7 Betriebssystem, das von der Hochschule gestellt wurde. Somit hatten wir den Vorteil, die Programmierung unabhängig vom Standort voranzutreiben und mit der Mobilität eines solchen Gerätes die beste Voraussetzung im Hinblick auf das Ziel, ein schnell aufbaufähiges, mobiles System zu entwickeln. Um eine latenzfreie Interaktion zu ermöglichen reicht solch ein Notebook vollkommen aus, die Simulation hat sich jedoch als sehr rechenintensiv erwiesen. Dies kommt sehr wahrscheinlich von der Berechnung und Zeichnung der Umlaufbahnen, die als Schweife dargestellt werden. Für einen flüssigen Betrieb wird daher ein Rechner mit einem leistungsstarken Prozessor empfohlen.

Kamera

Als Kamera fiel die Wahl auf die Microsoft Kinect Version 1. Durch ihre weite Verbreitung ist diese Kamera ist in Bezug auf Software Unterstützung und Benutzerfreundlichkeit die erste Wahl. Bei diesem Modell wird das Tiefenbild aus einer Infrarotkamera generiert, was es so gut wie unabhängig von den Lichtverhältnissen um den Anwender macht.

Software

Für das Projekt wurden Code::Blocks, openFrameworks und die Bibliotheken „ofxKinect“ und „ofxBullet“ verwendet. Generell wird zu einer Installation und Ausführung mit Administratorrechten geraten.

Code::Blocks

Space for me tp01 aufbau installCB.PNG
Der Installer ist auf der Code::Blocks Homepage für gängige Windows, Linux und Mac OS Versionen verfügbar. Für das Projekt wurde die „Version 13.12 mingw“ für Windows genutzt.

openFrameworks

Space for me tp01 aufbau installOF.PNG
OF gibt es für „Code::Blocks“ und „Visual Studio“. Durch einen Klick auf die gewünschte Schaltfläche (s. Abbildung unten) wird der Download des entsprechenden ZIP-Ordners gestartet.

Um die Interaktion von OF mit „Code::Blocks“ zu ermöglichen müssen zusätzliche Dateien herunter geladen und in entsprechende Verzeichnisse von „Code::Blocks“ integriert werden.
Space for me tp01 aufbau installOF2.PNG
Es gibt einen Setup Guide für „Code::Blocks“ mit wichtigen Hinweisen zur Kompatibilität. Für OF benötigte Plugins können auf der Hauptseite unter Download -> Addons bezogen werden.

ofxKinect

Um das Addon einbinden zu können, musste es in früheren Versionen separat herunter geladen werden. Ab Version 0.8.0 von OF ist „ofxKinect“ ein Teil der mitgelieferten Addons.
Beim erstmaligen anschließen des USB Adapters an den Rechner wird die Kinect nicht automatisch als solche erkannt. Zunächst müssen die speziellen Treiber für "audio", "camera" und "motor" manuell installiert werden. Diese befinden sich im openFrameworks Ordner unter dem Pfad ../addons/ofxKinect/libs/libfreenect/platform/windows/inf und können über den Gerätemanager manuell angegeben werden.

ofxBullet

Das Addon „ofxBullet“ kann als ZIP-Datei herunter geladen werden. Nach dem Entpacken in das „Addon“-Verzeichnis von OF muss der Ordner unbedingt von „ofxBullet-master“ zu „ofxBullet“ umbenannt werden.
Die Bibliotheken „BulletMultiThreaded“ und „MiniCl“ verursachen Probleme und müssen entfernt werden. Dieses Problem tritt vor allem bei eigenen Projekten auf, die mit dem „projectGenerator“ erstellt wurden.
Space for me tp01 bulletfehler1.PNG Space for me tp01 bulletfehler2.png

Beim Import fremden Codes kommt es vor, dass der Author mit „ofDraw()“-Funktionen gearbeitet hat. „Bullet Physics“ hat Probleme mit der Ausführung von „ofDraw()“-Funktionen. Erfahrungsgemäß behebt das manuelle Auskommentieren diesen Fehler.

Simulation

Sapce for me simulation2.PNG
Die Simulation und die Objekte darin sind dreidimensional, die Bewegungen der Planeten sind allerdings auf eine Ebene beschränkt um eine einfache Interaktion zu ermöglichen. Die kreisförmige Bewegung der Planeten basiert auf der Gravitation, welche die Sonne aufbringt und einer Anfangsgeschwindigkeit der Planeten senkrecht zum Gravitationsvektor zur Sonne. Die Bahnen werden als Schweife dargestellt, welche zum Ende hin verblassen.

Die Texturen der Planeten wurden im Programm Blender erstellt und mit dem Addon ofxAssimpModelLoader in das Programm importiert.

Kinect

Space for me tp01 kinect.PNG
Um die Steuerung mit einer Hand zu realisieren, wurde das Tiefenbild der Kinect Kamera verwendet. Hierbei ist darauf zu achten, den Tiefenbereich (Threshold) sehr gering und im passenden Abstand zu wählen um eine saubere Detektion zu ermöglichen. Ansonsten wird das binarisierte Tiefenbild verwendet und horizontal gespiegelt. Über den "contourFinder" des Addons ofxOpenCv lässt sich somit die Position der Hand und deren Schwerpunkt ausgeben. Umgerechnet auf das Koordinatensystem der Simulation, kann dies anschließend als Punkt im Raum anerkannt werden, auf den eine Gravitation ausgewirkt werden kann.

Fazit und Verbesserungsmöglichkeiten

Im Nachhinein lässt sich zu dem Teilprojekt Space for Knowledge ein positives Fazit ziehen. Die Ziele die gesetzt wurden konnten wir erreichen. Mit den ausgewählten Programmen wurde eine optisch überzeugende Simulation geschaffen, welche die Wirkung der Gravitation realitätsnah simuliert. Der Aspekt der Interaktion funktioniert ebenfalls. So kann der Nutzer durch Bewegung seiner Hand das schwarze Loch in der Ebene steuern und somit Gravitation auf die Planeten der Simulation auswirken. Jedoch ist das Erlebnis dadurch noch nicht sehr spektakulär, was durch animierte Kollisionsereignisse oder das Hinzufügen mehrerer Objekte, wie beispielsweise Asteroiden verbessert werden könnte. Ein Begrenzungsfaktor bei den Interaktionsmöglichkeiten ist jedoch das Addon ofxKinect. Mit einem umfangreicheren Modul könnte man das Skelett des Anwenders analysieren. So wäre es möglich beide Hände und sogar mehrere Personen gleichzeitig mit dem Programm interagieren zu lassen und das unabhängig von einem vordefinierten Tiefenbereich. Zum anderen würden wir auch gerne mehr von der Modellierung der Planeten zeigen, welche während der Interaktion, bei der Ansicht von oben, kaum wahrnehmbar sind. Eine Möglichkeit wäre, statt der Steuerung eines Objekts, sich mit den Händen durch das Sonnensystem navigieren zu können. Somit könnte man beispielsweise die Planeten genauer betrachten und Informationen dazu einblenden.

Das Programm bzw. der funktionsfähige Code befindet sich unter dem Reiter Downloads. Die Simulation läuft auch ohne Kamera, für die Eingabe muss allerdings die Microsoft Kinect angeschlossen und die Treiber aus dem Addon ofxKinect installiert werden.


Teilprojekt "Space For Visions"

Da Virtual Reality zur Zeit ein sehr aktuelles Thema ist und gleich mehrere Hersteller solche Geräte in naher Zukunft vertreiben werden, wollten wir diese Technik in einem Projekt demonstrieren.
Space for me rift ausgabe.PNG

Hardware

Zum Einsatz kam hierbei die Oculus Rift DK2, welches die momentan modernste, frei verfügbare Virtual Reality Brille ist und von der Hochschule zur Verfügung gestellt wurde. Da die Darstellung von VR-Inhalten sehr gute Hardware voraussetzt, verwendeten wir ferner für die Entwicklung einen leistungsstarken Desktop Rechner.

Software

Zunächst muss die Oculus Runtime installiert werden um die VR-Brille betreiben zu können. Zur Entwicklung der Anwendung wurde die Unreal Engine 4 verwendet. Diese bot sich an, da sie erst vor kurzem kostenlos verfügbar gemacht wurde und modernste Grafik und eine sehr gute Dokumentation für die Spieleentwicklung gewährleistet. Für den Download ist eine kostenlose Registrierung erforderlich.

Konzept

Das Programm sollte in das Gesamtkonzept "Space" passen und ebenso die besonderen Merkmale der Oculus Rift hervorheben. Diese besitzt zwei Alleinstellungsmerkmale:
Zum einen lässt die Brille den Nutzer in eine virtuelle Umgebung eintauchen, welche als real angenommen wird, da die Drehung des Kopfes auch das Sichtfeld dreht. Somit wird eine physische Bewegung in die virtuelle Welt übertragen.
Zum anderen besitzt sie ein Headtracking, das die Brille und somit die Position des Kopfes innerhalb eines gewissen Bereichs (ca. 1 m²) mittels einer Infrarot Kamera erfassen kann. Somit kann sich der Nutzer in der virtuellen Welt teilweise frei bewegen.


Daraus entstand die Idee den Anwender frei in einer Weltall Umgebung zu platzieren, um ihn herum ein kleiner Showcase von Planeten. Diesen kann man sich physisch nähern um sie näher zu betrachten und bei dem Blick darauf rotieren sie um ihre eigene Achse. Desweiteren gibt es eine Sonne welche weiter entfernt um des Szenario wandert und so Bewegung, sowie Licht- und Schatteneffekte erzeugt. Es wurde noch der Erdmond einbaut, welcher um die Erde kreist und dabei dem Anwender sehr nahe kommt, was einen schönen Überraschungseffekt generiert. Ferner wurde eine Schar von Asteroiden über dem Anwender eingefügt, welche übereinander versetzt sind und somit den räumlichen Eindruck verstärken.

Entwicklung

Als Grundlage wurde das Tutorial Level verwendet, mit dem anfangs die Funktionalitäten des Programms vermittelt werden. Im Grunde ist hierbei jedoch nur die Kameraeinstellung in der Ego-Perspektive erhalten geblieben. Alle vordefinierten Objekte wurden entfernt.

Hintergrund

Der Weltall Hintergrund entsteht durch ein Standard Element aus der Engine. Es ist eine große Kugel mit bestimmter Textur, bei der die einzelnen Parameter, wie Helligkeit, Farben und Dichte der Sterne angepasst wurden. Dann wird das Objekt groß genug skaliert, so dass es als Hintergrund wahrgenommen wird.

Planetentextur

Die Planeten bestehen aus Standard Sphere Objekten, welche nun allerdings mit Blueprints versehen werden müssen, um Ihnen mehr Funktionalitäten zuzuweisen. Im Programm werden die Erde bei Tag und bei Nacht, sowie Venus und Mars gezeigt.
Um den Sphere Objekten das passende Aussehen zu geben, muss zunächst eine neue Textur erstellt werden. Hierfür werden Bilder der NASA importiert, welche auch schon bei der Sonnensystem Simulation zum Einsatz kamen. Da diese bereits eine geplättete Kugeloberfläche repräsentieren ist hierbei keine weitere Anpassung nötig.
Space for me tp03 textur.PNG
Nun wird aus der Textur ein Material erstellt, welches um beliebige Objekte gelegt werden kann, aber natürlich nur bei einer Kugelform korrekt dargestellt wird. Desweiteren wird hierbei die Oberfläche über mehrere Parameter angepasst, sodass die Reflektionen des Lichts möglichst realistisch aussehen. Da das Ergebnis hier direkt als Livebild angezeigt wird, konnte man die Einstellungen beliebig ändern, bis die Darstellung überzeugt hat.
Space for me tp03 material.PNG

Planetenrotation durch Blickkontakt

Um ein Planetenobjekt durch den Blick rotieren lassen zu können, werden für das Objekt zunächst zwei neue Funktionen erstellt. „Rotate“ überschreibt in der Funktion „AddActorLocalRotation“ den Rotationswert. Es gibt Roll, Pitch und Yaw. Hier wird mit der Funktion der Yaw Wert auf 0.1 gesetzt um eine Rotation um die vertikale Achse zu erreichen. „RotateStop“ stoppt die Rotation indem es den Wert wieder auf 0 setzt.
Space for me tp03 rotation.PNG
Nun kommt der kompliziertere Teil, ein Funktionsaufruf beim Blick auf ein bestimmtes Objekt. Die folgende Funktionsimplementierung wird nicht am Planeten, sondern im „FirstPersonCharacter“ Objekt geschrieben, da an diesem die Kamera angefügt ist und sich von dort das Sichtfeld ergibt. Die grundsätzliche Idee ist, einen sehr langen Vektor zu erstellen, beginnend bei der Position der Kamera und verlaufend in Richtung des Blickes. Trifft dieser Vektor auf ein Objekt, soll dieses zurückgegeben werden, sodass man daran eine Funktion aufrufen kann. Konkret bedeutet das, der Vektor wird erstellt durch einen Start- und einen Endpunkt. Der Startpunkt wird mit der Funktion „Get Orientation and Position“ ermittelt, welche eine spezielle Funktion für VR Geräte ist und die Position der Brille im Raum zurückliefert. Zu dieser Position wird noch ein Z-Wert von 55 addiert, das entspricht in der virtuellen Welt dem Abstand der Kamera vom Boden. Den Endpunkt erhält man, indem man mit „GetForwardVector“ den Blickrichtungsvektor mit einer beliebig hohen Zahl, hier 5000, multipliziert, damit auch weit entfernte Objekte angesteuert werden könnten. Diese beiden Werte werden der Funktion „LineTraceByChannel“ übergeben. „Event Tick“ ruft diese Funktion 60 mal pro Sekunde auf. Das ist nötig um konstant die Blickrichtung zu überprüfen und falls ein Objekt getroffen wurde, sorgt dies auch für die gleichmäßige Rotation, da die vorher genannte Drehung mit Yaw = 0.1 bei jedem Tick aufgerufen wird. So entspricht die Rotationsgeschwindigkeit 6.0 pro Sekunde.
Ist der „Return Value“ aus „LineTraceByChannel“ auf „True“, so wird die Funktion „Cast To RotatingSphereBlueprint1“ (RotatingSphereBlueprint1 ist die Vaterklasse von der alle Planeten Funktionen erben) aufgerufen, welche über „Break Hit Result“ das getroffene Objekt geliefert bekommt. Darüber können nun direkt die vorher angelegten Funktionen „Rotate“ und „Rotate Stop“ aufgerufen werden, indem man ihnen das Zielobjekt übergibt.
Sehr hilfreich bei der Entwicklung dieser Komponente war die Möglichkeit, sich den Vektor aus Start- und Endpunkt in der laufenden Anwendung anzeigen lassen zu können. Zu Beginn erkannte man so das Problem, dass bei einer Positionsänderung der Oculus Rift im Raum, der Startpunkt nicht mehr korrekt war. Das hatte zur Folge dass bei einer Betrachtung eines Planeten von der Seite, der Vektor diesen oft gar nicht traf und keine Rotation auslöste. Nach langer Recherche brachte die VR spezifische Funktion „Get Orientation and Position“ schließlich die Lösung zu diesem Problem.
Space for me tp03 rotation durch blick.PNG

Mond

Der Mond selbst ist aufgebaut wie ein Planet, also eine Kugel mit Textur. Die konstante Rotation konnte jedoch ohne einen Blueprint gesetzt werden, sondern mit einer Komponente „Rotating Movement“ die dem Sphere Objekt hinzugefügt wird.

Sonne

Die Sonne besteht nicht wie die Planeten aus einer statischen Textur, sondern hier ist die Oberfläche in Bewegung. Dafür werden eine Feuer-, sowie eine Gesteinstextur übereinander gelegt, die für die ungleichmäßige Erscheinung sorgen. Diese Texturen bewegen sich in unterschiedliche Richtungen um das Objekt herum. Durch Hinzufügen und Anpassen mehrerer Parameter, wie der Rotationsgeschwindigkeit, Farbe und Helligkeit des ausgesendeten Lichts, entsteht so eine Sonne mit einer Art flüssigen Oberfläche.
Space for me tp03 sonne.PNG

Plattform

Da der Nutzer nicht einfach im bodenlosen Weltall schweben sollte, wurde unter ihm eine kleine quadratische Fläche erschaffen. Diese besteht aus einem Quader, der jedoch sehr weit nach unten ausgedehnt ist. Blickt der Anwender seitlich an der Oberkante vorbei nach unten, wird ihm so bewusst, wie weit es in der virtuellen Welt in die Tiefe geht. Als kleiner Scherz sieht man beim Blick auf die Plattform den Spruch „don’t fall down“. Dieser wurde mit einem Textfeld erstellt und auf dem Quader platziert.

Asteroiden

Um den räumlichen Eindruck noch weiter zu verstärken und noch andere Elemente zu präsentieren, wurde eine Schar von Asteroiden über dem Kopf des Anwenders eingefügt. Dies sind 29 an der Zahl und bestehen alle aus dem gleichen Objekt und einer Gesteinstextur, welche durch eine raue Oberfläche, angestrahlt von der wandernden Lichtquelle, sehr schöne Licht/Schatten Effekte erzeugt. Damit die Asteroiden nicht alle gleich aussehen, wurde jeder einzelne unterschiedlich skaliert. Desweiteren hat jeder eine individuelle Rotationsrichtung und –geschwindigkeit bekommen und wurde manuell positioniert um keine Kollisionen zu verursachen. Die Objekte befinden sich in unterschiedlicher Höhe über dem Kopf des Benutzers, sodass ein sehr gutes Raumgefühl entsteht und der Nutzer dazu animiert wird seinen Kopf zu bewegen und den Blickwinkel zu ändern.

Fazit

Die Anwendung wurde fertig gestellt und funktioniert einwandfrei. Während der Messe nach der Projektpräsentation konnte diese Virtual Reality Erfahrung viele Nutzer begeistern. Das fertige Programm sowie das Unreal Engine Projekt stehen am Ende der Seite zum Download bereit.

Teilprojekt "Space For The Future"

Als letztes Projekt war vorgesehen eine Art Hologramm zu erstellen. Wie man es aus Filmen wie Star Wars kennt ist eine in der Luft schwebende Abbildung noch immer etwas faszinierendes. Die einzige uns mögliche Realisierung eines solche Hologramms basiert auf der Technik von "Pepper's Ghost". Dabei wird mit einer transparenten Glas- bzw. Plexiglasplatte, die zum Betrachter hin im 45° Winkel positioniert ist, eine Abbildung um 90° gespiegelt. So sieht der Nutzer das gespiegelte Objekt quasi hinter der Scheibe schweben, insofern sich die Helligkeit des Objekts vom Hintergrund stark genug unterscheidet.
Space for me tp04 live.JPG

Konzept

Wir wollten einen Aufbau um den man sich herum bewegen und von allen Seiten betrachten kann. Daher sollte ein Gerüst gebaut werden auf dem sich eine Pyramide aus Plexiglas befindet. In dieser Pyramide soll dann die Erde rotieren und von jeder Seite der Pyramide auch die jeweile Erdseite zu sehen sein. Die eigentliche Ausgabe sollte auf einer Projektionsfläche (Monitor oder Beamer-Projektion) über der Pyramide abgespielt werden.

Aufbau

Als sich auf den groben Inhalt des Projektes geeinigt wurde, legten wir die Maße einer Pyramide aus vier identischen gleichschenkligen Dreiecken fest und konzeptionierten einen repräsentablen Aufbau, um das Objekt auf Sichthöhe eines durchschnittlichen Besuchers erscheinen zu lassen.

Pyramide

Die Pyramide selbst besteht aus vier identischen gleichschenkligen Dreiecken. Als Material wurde zwei Millimeter dickes Plexiglas verwendet, die dünnste Variante die wir bekommen konnten. Die minimale Dicke war besonders wichtig, da somit der Effekt der doppelten Spiegelung – vordere Seite der Scheibe und hintere – so gering wie möglich gehalten wurde. Bei einer Dicke von drei Millimetern wirkte die Projektion stark verschwommen. Durch die Verwendung eines dünneren Materials wirkte das Bild nun nur noch etwas unscharf, die Platten waren jedoch noch stabil genug, dass sie nicht durchbiegen würden. Unsere Sorge, wie die Plastikscheiben geschnitten werden könnten ohne die Entstehung von Rissen oder Brüchen im Material wurde uns abgenommen, da auf der Internetseite des Plexiglasshops der „Nordic Panel GmbH“ auch gleichschenklige Dreiecke zugeschnitten werden konnten. So konnten wir passgenaue Scheiben anfertigen lassen. Verwendet wurde dabei transparentes „Plexiglas XT“.
Space for me tp04 pyramide.PNG

Gerüst

Gewählt wurde ein Aufbau aus zwei Holzplatten und vier quadratischen Holzbeinen. Die genauen Maße und Bestandteile der finalen Version finden sich in der nächsten Abbildung. Space for me tp04 gerüst.PNG

Ausgabe

Für die Bildausgabe über der Pyramide haben wir uns für eine Projektion von oben auf eine knapp über der Pyramide angebrachte Rückprojektionsfolie entschieden. Ein Monitor hätte mehr schärfe und Helligkeit gebracht, allerdings wäre der Aufbau viel komplizierter gewesen, da viel Gewicht auf dem Gerüst lasten würde. Mit einer Projektion haben wir eine teilweise variable Bildgröße und -schärfe, abhängig vom verwendeten Projektor. Wir setzen hierfür einen Optoma W304M ein, da dieser durch die kleine und leichte Form eine einfach Montage erlaubte und dennoch genug Helligkeit bot.
Die Ausgabe selbst ist ein Video. Das Ausgangsmaterial dafür war eine rotierende Erde die in Blender erstellt wurde. Diese wurde anschließend mit Adobe Premiere Pro vervierfacht und jeder Teil gedreht und zeitlich versetzt, sodass auf allen Seiten der Pyramide gleichzeitig die richtige Seite der Erde zu sehen ist.
Space for me tp04 video.PNG

Fazit und Verbesserungsmöglichkeiten

Als erster Prototyp einer solchen Konstruktion hat dieses Projekt sehr gut funktioniert. Die Bildqualität ist allerdings noch verbesserungswürdig. Hier könnte durch einen Projektor mit höherer Auflösung schon viel erreicht werden. Weiter könnte das Video mit besserer Qualität exportiert und dünneres Plexiglas oder Glas zur Reflektion verwendet werden. Da bei diesem Aufbau keine Interaktion vorhanden ist, könnte das Objekt beispielsweise noch wie die Simulation in Echtzeit rotieren, wodurch man mit einer Leap Motion per Handgeste auf die Rotationsbewegung Einfluss nehmen könnte.

Videos

Da unser Gesamtkonzept auch die Vermittlung der technischen Hintergründe vorsah, sollten Videos zur Veranschaulichung der Technik angefertigt werden. Bisher wurden für die Simulation und das Oculus Rift Projekt Erklärvideos angefertigt. Diese wurden zum einen mit Blender gerendert und zum anderen real gefilmt und zeigen die Technik und Funktionsweise der Stationen, sowie die Art und Weise der Bedienung.
Space for me videos blender.jpg
Alle Objekte wurden Stück für Stück erstellt, texturiert und in einen Gesamtkontext gesetzt. Zur stärkeren Abstraktion wurde der TOON-Shader, der in Blender inbegriffen ist verwendet und die Kanten nachgezeichnet. So erhielten wir einen Comic artigen Stil. Ein weißer Hintergrund wirkt am übersichtlichsten und aufgeräumt.

Für die Realaufnahmen verwendeten wir teilweise private Spiegelreflexkameras und auch professionelle Ausrüstung, ausgeliehen im Audio/Video Labor der Hochschule.
Des Weiteren wurden Bildschirmausgaben, wie die Simulation oder die Ausgabe der Oculus Rift mit Hilfe der Software Bandicam aufgezeichnet um diese in die Videos zu integrieren.
Der Schnitt erfolgte nach dem Plan, vorher angefertigter Storyboards und wurde mit Adobe Premiere Pro durchgeführt.
Space for me videos schnitt.PNG

Ein Video für das Hologramm Projekt fehlt noch und soll noch erstellt werden. Ansonsten sind die Videos unter den Downloads verfügbar.

Downloads

Anwendungen

Space for Science
Space for Visions UE4 Projekt
Space for Visions Anwendung

Videos

Space for Science Techvideo
Space for Visions Techvideo
Hologramm Video