iOS hat erstaunliche native Frameworks, um die Entwicklung zu beschleunigen. UIKit und SceneKit sind einige Beispiele für die vielen Frameworks, die in der täglichen Entwicklung verwendet werden. Ein Framework mit nativer Unterstützung für VR-Anwendungen ist leider noch nicht verfügbar. In diesem Blog erläutern wir, wie wir bestehende Frameworks zu unserer eigenen VR-Erfahrung kombiniert haben.

iOS-VR-Erlebnis

Definition der Schlüsselaspekte der VR.

Bevor wir jedoch mit der Entwicklung beginnen können, müssen wir verstehen, was VR ausmacht.

VR ist eine computergenerierte Simulation eines 3D-Bildes oder einer 3D-Umgebung, die von einer Person, die eine spezielle Ausrüstung wie eine VR-Brille mit einem Bildschirm im Inneren verwendet, auf scheinbar reale Weise interagiert werden kann. Die Sinne des Menschen spielen für ein realistisches Erlebnis eine herausragende Rolle.

Daraus können wir schließen, dass wir etwas brauchen, das den Ein- und Ausgang unserer simulierten Umgebung, VR-Headset-Spezifika und Stereo-Audio-Rendering beherrscht. Um diese Funktionalitäten zu erfassen, verwenden wir das Google VR SDK für iOS.

Das Google VR SDK wurde für Cardboard entwickelt, eine zugängliche und erschwingliche VR-Plattform, die sowohl Android als auch iOS unterstützt. Es ermöglicht immersive VR-Erlebnisse, indem es Daten von den Sensoren des Telefons zusammenführt, um die Kopfposition des Benutzers sowohl in der realen als auch in der virtuellen Welt vorherzusagen. In Kombination mit einem einfach zu bedienenden VR-Headset ist es ideal für ein großartiges VR-Erlebnis.

Wir benötigen auch ein Tool, das die Inhalte in der Umgebung verarbeiten kann (z.B. 3D-Modelle mit Texturen, Rigs und Animationen). Zum Glück hat iOS ein natives 3D-Kit, SceneKit. Es kommt sogar mit einem WYSIWYG-Editor für 3D-Inhalte, der in Xcode integriert ist.

Gestaltung der Architektur.

Jetzt, da wir unsere beiden Hauptkomponenten haben, bleibt uns nur noch, sie zusammenzuführen. Lassen Sie uns nach Gemeinsamkeiten suchen.

Beide Frameworks basieren auf OpenGL. Google VR stellt seinen OpenGLContext zur Verfügung, während SceneKit ihn auch nutzen kann. Das entpuppt sich als Kinderspiel.

Last but not least haben wir einen eigenen benutzerdefinierten Renderer entwickelt, um Informationen zwischen dem Google VR SDK und seinem nativen SceneKit zu delegieren. Diese Informationen enthalten alles, was mit dem Head Tracking zu tun hat (z.B. die Position des Benutzers in der virtuellen Welt). Hier definieren wir auch die Initialisierer, Programme, Shader und Renderer einiger benutzerdefinierter Zeichnungsobjekte. Dies alles geschieht in OpenGL, um effizient mit unserem nativen SceneKit zu arbeiten.

Zur Erinnerung: Wir haben das Google VR SDK, das die Head-Tracking-Informationen an unseren benutzerdefinierten Renderer weitergibt. Der Custom-Renderer delegiert diese Informationen zusammen mit dem Video und den Custom-Objekten an die drei verfügbaren SCNRenderer. Die drei Renderer werden für jeweils jedes Auge und eine für das Zentrum, das für den „Magic View Modus“-Modus verwendet wird, genutzt. Diese bilden unsere Szene, die der Benutzer erleben und genießen kann.

Jetzt kommt der Zauber.

Zeit, unsere Welt in der VR zu erschaffen. Zuerst nehmen wir Google VR SDK`s CardboardView und finden seinen OpenGLContext, um ihn an unseren benutzerdefinierten Renderer zu übergeben.

Dann erstellen wir eine SCNScene und hängen sie an die drei SCNRenderer an, die mit dem CardboardView erstellt wurden. In dieser SCNScene können wir beliebige Modelle/Objekte in den visuellen Editor importieren (vorzugsweise mit einer .dae-Erweiterung).

In unserem benutzerdefinierten Renderer haben wir Funktionen definiert, um ein eingebettetes Video zu lesen sowie eine 360°-Kugel um die Szene zu zeichnen, auf die dieses Video projiziert werden soll. Es enthält auch eine Erweiterung der GVRHeadTransform-Klasse, die für die Übergabe der Head-Tracking-Informationen zuständig ist, um unsere Objekte einfach zu drehen oder zu verschieben, basierend auf der aktuellen Kopfposition des Benutzers.

Mit unserem 360° projizierten Video und den importierten Objekten können wir unsere Smartphone in einem VR Viewer schieben, uns zurücklehnen, zusehen und unsere eigene virtuelle Welt genießen.

Was kommt als nächstes?

Mit dem Aufkommen von ARKit werden wir definitiv nach nativen Alternativen suchen, da Apple unsere Lösung direkt aus dem Wasser blasen könnte, wenn sie sich entscheiden, die Unterstützung für OpenGL zugunsten ihrer eigenen Metal-API einzustellen. Aber bis dahin sollte diese selbstgenerierte Lösung ihren Zweck erfüllen.