VR-Performance ist das Fundament für ein großartiges VR-Erlebnis im Raum. Headsets wie HTC Vive und Oculus Rift laufen beide mit einer Aktualisierungsrate von 90Hz, was bedeutet, dass die Framerate ihres Unity-Projekts bei 90fps (Frames pro Sekunde) oder höher bleiben muss. Alles andere führt dazu, dass die Bilder zu „ruckeln“ beginnen, was zu einer immersionsbrechenden Erfahrung oder schlimmer noch zur Simulator-Krankheit führt.
Es kann schwierig sein, ein Leistungsziel von 90fps mit dem Wunsch zu verbinden, High-Fidelity-3D-Modelle, Texturen und Spezialeffekte zu nutzen. Während Grafiken den Großteil der Leistung in VR ausmachen, können auch andere Bereiche wie Physik, Audio und Skripte die Leistung beeinträchtigen. Viele VR-Performance-Probleme manifestieren sich als ein Projekt, das dem Abschluss näher kommt, aber ein paar einfache Richtlinien zu Beginn bilden eine gute Grundlage.
Verwendung von Forward Rendering und MSAA.
Ändern Sie den standardmäßigen Rendering-Pfad in Unity nicht. Es ist bereits auf Forward-Rendering eingestellt und das ist es, was Sie natürlich möchten. Stellen Sie Anti-Aliasing in den Qualitätseinstellungen auf etwa 4x ein.
Für langjährige VR-Entwickler mag dies wie ein naheliegender Ratschlag erscheinen. Leider wussten wir das nicht, als wir anfingen und ein sehr großes Projekt auf der Grundlage von verzögertem Rendering aufbauten, nur um zu einem späteren Zeitpunkt in den Prozess zu wechseln. Das hat eine Menge Ressourcen gekostet.
Ein Rendering Pfad ist eine Technik zum Zeichnen von Bildern auf eine digitale Anzeige. Unity unterstützt einige Rendering-Pfade, aber die gebräuchlichsten sind der Forward- und der verzögerte bzw. deferred Pfad. Der verzögerte Pfad wird in mehreren Durchgängen gerendert, die Geometrie- und Beleuchtungsinformationen entkoppeln. Beleuchtung und Beschattung werden bis zum Ende „verschoben“. Das bedeutet, dass verzögertes Rendering eine große Anzahl von Lichtern unterstützt, da die Kosten für ein Licht in der Regel nur von der Anzahl der Pixel auf dem Bildschirm abhängen, die es beeinflusst.
Das klingt nach einem ziemlich großen Vorteil, aber der große Nachteil des verzögerten Renderings ist, dass es nur durch einen Screenspace-Shader Anti-Aliasing durchführen kann. Dieser Ansatz ist mit erheblichen Kosten für die Leistung verbunden und die Ergebnisse sind nicht immer perfekt. Anti-Aliasing glättet die gezackten Pixelkanten (Aliasing) von Objekten in 3D und mit den relativ niedrigen Auflösungen von VR-Headsets ist das sehr hilfreich.
Die gute Nachricht ist, dass das Forward-Rendering MSAA (Multi-Sampling Anti-Aliasing), eine großartige „AA“-Technik, zu sehr niedrigen Kosten ermöglicht. Die noch bessere Nachricht ist, dass das Forward-Rendern in den Grafikeinstellungen von Unity standardmäßig aktiviert ist. Alles, was Sie tun müssen, ist sicherzustellen, dass Anti-Aliasing in den Qualitätseinstellungen ausgeführt wird.
Im Allgemeinen zerstören wir alle gerne bis auf eine der Qualitätsstufen, um sicherzustellen, dass wir auf das Erlebnis zielen, welches wir erreichen möchten. Wir haben MSAA auf etwa 4x eingestellt, weil wir das Gefühl haben, dass es einen spürbaren Unterschied zwischen 2x und 4x gibt, aber nicht viel Nutzen darüber hinaus. Während MSAA fast „kostenlos“ ist, gibt es immer noch Leistungskosten, als gehen wir selten auf 8x. Denken Sie daran, dass sich dies ändern könnte, wenn Headsets eine höhere Auflösung erreichen. 8X und mehr können mit der Zeit zur neuen Normalität werden.
Stellen Sie die Stereo-Rendering-Methode auf Single-Pass ein.
Bilder in einem VR-Headset werden aus zwei verschiedenen Perspektiven angezeigt, eine für jedes Auge. In den letzten Jahren der VR-Entwicklung bedeutete das, zwei virtuelle Kameras in ein Unity-Projekt einzubinden und die Szene zweimal zu rendern. Darüber hinaus würden die Leistungskosten von Bildeffekten mit dem Faktor 2 multipliziert, da sie auf das Bild jedes Auges angewendet werden müssen.
Unity hat eine brillante Lösung für dieses Problem implementiert, die sie Single-Pass-Stereo-Rendering nennen. Es kombiniert die beiden Bilder zu einem einzigen Rendering-Pass, anstatt jedes einzelne einzeln zu rendern und teilt das Bild dann entsprechend für jedes Objektiv im VR-Headset auf. Das Rendern in einem Durchgang kann in den Player-Einstellungen aktiviert werden.
Der einzige Nachteil dabei ist, dass noch nicht alle Bildeffekte und Shader das Single-Pass-Stereo-Rendering unterstützen. Unity unterstützt dies sofort, aber wenn Sie Assets aus dem Unity Asset Store kaufen, lohnt es sich, den Entwickler in den Foren oder per E-Mail zu kontaktieren, um festzustellen, ob ein einzelner Durchgang unterstützt wird oder nicht.
Art Direct für die Performance.
Entwickeln Sie Spiele mit Blick auf die Leistung, anstatt am Ende zu versuchen, sie zu optimieren.
Sie erstellen also ein vorwärts gerendertes Spiel mit MSAA 4x und Single Pass Stereo. Das sind unserer Meinung nach feste Voraussetzungen für eine zeitgemäße VR-Entwicklung.
Wir würden gerne ein VR-Game spielen, bei dem wir in einem Jeep durch einen üppigen Regenwald bei strömenden Regen fahren und von einem T-Rex verfolgt werden. Wir möchten jedes Blatt an jedem Baum, jeden Regentropfen und jede Größe am Dinosaurier sehen, alles in Echtzeit simuliert. Das Problem ist, dass diese Idee mit der heutigen Technologie unmöglich wäre. Selbst das „Offline-Rendering“, das für Hollywood-Filme verwendet wird, hat Mühe, derartiges zu erreichen.
Stattdessen ist es viel besser, über all ihre Ideen nachzudenken und zu versuchen, diejenigen zu finden, die machbar sind und in Echtzeit mit 90fps gerendert und simuliert werden können. Einige Ideen müssen deshalb aufgegeben werden, sofern sie unrealistisch sind oder nicht die Performance-Ziele unterstützen. Eine andere Möglichkeit, das Problem zu formulieren, besteht jedoch darin, es als kreative Kunstrichtung zu betrachten.
- Welche Ideen passen angesichts der Einschränkungen, die ihnen in anderen Medien oder in Nicht-VR-Spielen möglicherweise nicht auferlegt werden?
- Würde ein stilisierter Look schneller rendern und trotzdem zur Idee passen?
- Ist es möglich eine Idee zu entwicklen, die nur wenige detaillierte Elemente auf einmal auf dem Bildschirm hat, anstatt eine riesige Szene mit vielen detaillierten Elementen?
Es gibt hier keine einfachen Antworten, sondern nur harte Entscheidungen und viel Denken. Aber Denken ist günstig und Performance-Optimierung nicht wirklich schwierig. Es ist besser, zu Beginn eine Idee zu entwickeln, die gut funktioniert, als zu versuchen, eine komplizierte Idee während der Krisenzeit in eine Leistungsbox zu zwingen.
Teilen Sie ihre Performance-Tipps.
Leistung ist ein tiefes Thema mit vielen Nuancen und es gibt keine Möglichkeit, eine definitive Leistungs-Checkliste zu erstellen, die in jeder Situation hilft. Während Sie ihr Projekt weiterentwickeln, empfehlen wir ihnen, bei jedem Schritt ein kontinuierliches Profiling (mit Tools wir dem Unity`s Profiler) durchzuführen. Wenn Sie noch Fragen haben sollten, die Sie uns mitteilen möchten, können Sie dies gerne über unser Forum tun.
Vielen Dank für ihren Besuch.