Physik in HoloLens: Aktion und Interaktion

Im Spiel kann man hervorragend die Grenzen des Machbaren erforschen. Anwendungen müssen nicht nur benutzerfreundlich, schnell und mit dem Rest der Welt verbunden sein, häufig benötigen sie zudem Funktionen, die die Möglichkeiten der Plattform überschreiten.

Nehmen wir ein universell bekanntes Spiel: Dinge sollen mit einem Katapult zerstört werden. Das Konzept ist bei Spielen für Mobilgeräte sehr beliebt, dabei funktionieren die meisten in 2 Dimensionen. Unseres dagegen soll sich komplett im dreidimensionalen Raum abspielen, was die Implementierung komplexer macht.

Spieledesign

Für dieses Spiel braucht man zerbrechliche Gegenstände. Voxel schien uns hierfür am besten geeignet. Bei der Verwendung von Voxeln als visuellem Stil besteht jedes 3D-Objekt aus Würfeln (Voxeln), die das Volumen ausfüllen, welches das Objekt einnimmt. So wirken die Objekte wie Blöcke. Ausserdem können sie dann nach einem Treffer leicht in kleinere Objekte zerfallen. In der Galerie unten sehen Sie Bilder der Modelle, die wir geschaffen und im Spiel verwendet haben:

Wir wollten ein Fahrzeug (ein Boot) haben, das eine Insel umkreist und Strukturen auf der Insel zerstört. Damit wollten wir folgendes erreichen:

Die Spieler werden für das Zerstören von Strukturen belohnt. Wird eine Struktur mit weniger als 5 Würfen zerstört, gibt es Bonuspunkte. Je mehr Würfe zum Zerstören benötigt werden, desto weniger Bonuspunkte gibt es. Wurde eine Struktur hinreichend zerstört, steigt der Spieler ein Level auf. Eine Struktur gilt als hinreichend zerstört, wenn die Anzahl der Voxel, aus denen sie besteht, oder ihre Höhe einen bestimmten Prozentsatz unterschreitet.

Tooling

Wir haben uns für die Spiel-Engine Unity entschieden. Unity bietet seit Version 5.5 nativen Support für HoloLens. Auch in der kostenfrei auf GitHub verfügbaren HoloToolkit-Sammlung von Microsoft sind zahlreiche nützliche Open-Source-Hilfsprogramme enthalten. Alle Skripte für Projekte in Unity können in C# geschrieben werden und die Integration mit Visual Studio ist hervorragend.

Für die Voxel-Modelle gibt es mehrere Software-Optionen. Wir haben uns für eine Software speziell zur Erstellung von Voxel-Modellen entschieden – MagicaVoxel. Sie war problemlos erhältlich und sehr anwenderfreundlich, was unsere Entwicklungszeit verkürzte. Ausserdem können die erstellten Modelle damit in verschiedenen Formaten exportiert werden.

Herausforderungen

Die in MagicaVoxel erstellten Modelle müssen nach Unity importiert werden. Wir wollten während des Imports die physikalischen Regeln für die importierten Modelle einrichten und ausserdem ein paar vordefinierte, spezifische Komponenten anhängen, die das Spielverhalten beeinflussen (Kollisionskörper, starre Körper, Komponenten zur Berechnung von Punkten und Zerstörungsstatus, usw.). Daher haben wir eine benutzerdefinierte Importfunktion erstellt. Damit werden automatisch erstellte Prefabs einfach in das Spiel gezogen und abgelegt. Im Bild unten ist einer der importierten Gegenstände zu sehen:

Die Implementing der Spielregeln gestaltete sich recht einfach. Die eigentliche Herausforderung lag in der Konfigurierung der physikalischen Regeln. Unity bietet eine gute Engine zur Simulierung der Physik, mit der man arbeiten kann. Einige Dinge müssen betont werden:

  • Leistung – wie viele physikalische Objekte können verwendet werden, ohne dass die Leistung deutlich darunter leidet? Bedenken Sie, dass alle zerbrechlichen Modelle aus Würfeln bestehen. Wenn man nicht aufpasst, besteht ein scheinbar simples Modell schnell aus tausenden davon. Das würde sich extrem negativ auf die Leistung auswirken. In unseren Tests konnten wir nachweisen, dass HoloLens leistungsstark genug für Physik-Simulationen ist, sofern es sich um einfache Szenarien handelt. Wir sollten uns also auf Modelle mit maximal 300 Würfeln beschränken. Das ist das Optimum. Wir haben auch mit mehr Voxeln experimentiert (ca. 2000). Sobald allerdings eine komplexe Simulation beginnt (eine Explosion), friert das Spiel für ein paar Sekunden ein. Das wollten wir vermeiden.
  • Skalierung – bei der Spielentwicklung in Unity für HoloLens darf man nicht vergessen, dass die Objekte in der echten Welt platziert werden. Sie müssen also die richtige Grösse haben. Für die richtige Skalierung müssen wir im Hinterkopf behalten, dass 1 Einheit in Unity 1 Meter in der echten Welt entspricht. Die in einer Szene platzierten Objekte waren also sehr klein.  Im folgenden Bild ist das Problem dargestellt:

  • Wie Sie sehen können, müssen die Objekte wirklich klein sein (ca. 30 cm hoch). Ein einzelner Voxel (Würfel) sollte also sehr klein sein (1 cm oder weniger). Das wirkte sich auf die physikalischen Simulationen aus. Selbst die einfachsten Gebäude – Türme aus aufeinander gestapelten Würfeln – würden sofort einstürzen. Damit die Simulation funktioniert, mussten wir die physikalischen Einstellung und die Schwerkraft modifizieren. Das war ein Lernprozess, aber als wir die richtigen Einstellungen gefunden hatte, funktionierte alles erwartungsgemäss und sah natürlich aus.
  • Modellzusammensetzung – beim Import von Modellen aus Würfeln geht man davon aus, dass diese einfach importiert und mit starren Körpern oder Kollisionselementen versehen werden können. Grundsätzlich ist das auch richtig. Was passiert aber mit Würfeln, die nicht auf anderen Würfeln liegen, wie beispielsweise Balkons und Brücken? Was machen wir da? Die Lösung war überraschend einfach. In Unity können physikalische Objekte mit Gelenken verbunden werden. Wir haben hängende Würfel mit der Komponente Fixed Joint mit ihren Nachbarn verbunden. Damit hing der Würfel also an etwas fest. Wirkt eine sehr grosse Kraft (beispielsweise eine Explosion) auf diese Verbindung ein, bricht sie. Das ist im Bild unten dargestellt:


    Der magentafarbene Würfel hängt. Er ist über Fixed Joints mit den benachbarten Würfeln (orange) verbunden. Diese Infrastruktur wurde für alle hängenden Würfel eingerichtet.

Das Spiel wird voraussichtlich im April/Mai 2017 im App Store veröffentlicht.

Folgen Sie uns auf Twitter und erhalten Sie Updates und Infos.