Unity3D + Google Cardboard

Category: 

Google stellt ein SDK bereit, um mit Unity3D Virtual Reality Apps zu entwickeln. Zielplattform ist natürlich das Android Gerät, welches dank Google Cardboard als VR-Brille genutzt werden kann. Entsprechende Apps rendern für jedes Auge ein einzelnes, leicht versetztes, Bild. Dieses wird durch die beiden biconvex Linsen als dreidimensionales Bild wahrgenommen.

Selbstverständlich kann man das SDK auch für andere Android VR-Brillen benutzen. Ich selbst benutze es zusammen mit der Durovis Dive.

Cardboard SDK Features

Das Cardboard SDK stellt folgende Features bereit:

  • Head tracking
  • Stereoskopisches rendern
  • Magnet trigger des Cardboard erkennen
  • Automatische Stereo Konfiguration für einige Cardboardmodelle
  • Korrektur der Linsenverzerrung
  • Automatische gyro drift Korrektur
  • ...

Wie man sieht kümmert sich das SDK bereits um die wichtigsten Punkte. Außerdem ist das ganze Open Source, sodass man sich den entsprechenden Quellcode auch direkt ansehen kann.

Download und Demo

Das Cardboard SDK für Unity kann man sich hier runterladen: unitypackage (oder als zip-Archiv).
Als erstes kann man sich die integrierte Demoszene ansehen. Dazu öffnet man Unity, erstellt ein neues Projekt und importiert anschließend das Cardboard SDK. Dazu geht man auf:
Assets > Import Package > Custom Package und navigiert dort zum heruntergeladenen unitypackage.
Die Demoszene findet man im Projektexplorer unter Cardboard > DemoScene > Demoscene.
Diese kann man direkt im Editor starten, da die nötigen Sensoren nicht im PC vorhanden sind, kann man die Kopfbewegungen durch die Maus simulieren. Wenn man die linke Alt-Taste gedrückt hält und die Maus bewegt, kann man sich umsehen. Wenn man die linke Strg-Taste gedrückt hält und die Maus bewegt, so kippt man den Kopf.

Szene auf das Android Gerät bringen

Um nun die Szene auch auf dem Handy spielen zu können, muss man den Editor erst einmal auf Android umstellen. Dazu geht man auf File > Build Settings, wählt dort Android aus und klickt auf Switch Platform. Dies dauert nun einen kleinen Moment und anschließend muss man noch kurz ein paar Einstellungen tätigen. Klickt auf Player Settings, und stellt die Default Orientation unter Resolution and Presentation auf Landscape Left. Außerdem müsst ihr noch unter Other Settings einen Bundle Identifier angeben. Dieser muss für jede App eindeutig sein.
Danach können wir mit Build And Run die Szene kompilieren und auf das Handy übertragen. Selbstverständlich muss das Handy auch per Kabel angeschlossen sein oder man nutzt meine WiFiDebugging App.

Wenn man mit Unity zum ersten Mal eine Android App starten will, so wird man zwischendurch nach dem Pfad zum Android SDK gefragt. Einfach in das entsprechende Verzeichnis navigieren und OK klicken.


VR zu einem Projekt hinzufügen

Wenn man ein Projekt um VR erweitern möchte, so muss man natürlich erst einmal das Cardboard SDK importieren. Das SDK besteht aus mehreren Ordnern, von denen uns erstmal nur der Scripts und Prefabs Ordner interessieren.
Grundsätzlich muss man sich entscheiden, ob man die VR-Funktionalität per Script oder per Prefab hinzufügen möchte.

Script Variante

Dies ist die vermutlich einfachste Möglichkeit. Hier muss man einfach nur ein StereoController-Script an die MainCamera anheften. Wenn man nun auf Play drückt, sieht man direkt in Stereo. Zur Laufzeit erzeugt das Script dann die nötigen Komponenten, wie etwa das linke/rechte Auge. Manchmal möchte man jedoch bereits im Editor Einstellungen vornehmen, am einfachsten geht dies mit den Prefabs.

Prefab Variante

Wenn man ein neues Projekt beginnt, ist es das einfachste die MainCamera zu löschen und dafür das CardboardMain-Prefab einzufügen. Dieses beinhaltet bereits alles, was für ein VR-Erlebnis benötigt wird.
Wenn man ein bestehendes Projekt um VR erweitern möchte, kann man natürlich auch das CardboardMain-Prefab nutzen, falls jedoch sehr viele Scripte an der MainCamera hängen, ist es vielleicht nicht ratsam diese zu löschen. In diesen Fällen kann man auch das CardboardAdapter-Prefab, sowie das StereoController-Script auf die MainCamera ziehen.

Deferred Rendering und Image Effects

Im Allgemeinen funktionieren diese zusammen mit dem Cardboard SDK nicht, da sie davon ausgehen, dass sie auf dem gesamten Bildschirm zeichnen dürfen. Das Cardboard SDK, teilt den Bildschirm jedoch in zwei Hälften auf, wodurch der ImageEffekt ein Auge auf den ganzen Bildschirm strecken wird.
Wenn man diese Effekte nun dennoch nutzen möchte, so müssen die Augen erst in eine Textur gerendert werden. Dadurch können die Effekte wie gewollt auf dem ganzen Bildschirm arbeiten. Anschließend werden die beiden Texturen auf dem Bildschirm ausgegeben.
Der StereoController hat hierfür eine Checkbox Direct Render. Wenn der Haken gesetzt ist, wird direkt auf den Bildschirm gezeichnet, andernfalls erst in eine Texture.

Wenn die Augen erst in eine Textur gerendert werden müssen, ist dies etwas aufwändiger, wodurch ggf. eine kleine Performance Einbuße entsteht.

Abschließende Bemerkungen

Damit sind wir nun soweit ein einfaches VR-Spiel entwickeln zu können. Natürlich gibt es noch einiges zu beachten, wie z.B. GUI in VR, aber dazu gibt es nächstes Mal mehr.