Categories: 3D Software

Wie Sie den Unreal Engine 4 Renderer für VR optimieren.

Für Farlands schrieb das Oculus-Team einen experimentellen, schnellen Single-Pass-Forward-Renderer für Unreal Engine. Er wird auch in Dreamdeck und der Oculus Store-Version von Showdown verwendet. Oculus stellte den Quellcode des Renderers als Beispiel zur Verfügung, um Entwicklern zu helfen, höhere Qualitätsstufen und Bildraten in ihren eigenen Anwendungen zu erreichen. Klicken Sie dazu auf den folgenden Link.

Die Wiedergabe immersiver VR-Welten bei soliden 90Hz ist komplex und technisch anspruchsvoll. Die Erstellung von VR-Inhalten unterscheidet sich in vielerlei Hinsicht von der Erstellung herkömmlicher reiner Monitor-Inhalte – sie bringt uns eine verblüffende Vielfalt an neuen Interaktionen und Erfahrungen, zwingt die Entwickler jedoch dazu, alte Annahmen zu überdenken und sich neue Tricks auszudenken. Die jüngste Welle von VR-Titeln zeigt die Möglichkeiten und den Einfallsreichtum der Entwickler.

Während seiner Entwicklung hat Oculus einige seiner traditionellen Annahmen, die für die VR-Wiedergabe getroffen wurden, neu bewertet und eine Technologie entwickelt, die Ihnen dabei hilft, High-Fidelity-Inhalte bei 90 Hz zu liefern. Das Ergebnis ist ein experimenteller Forward-Renderer für Unreal Engine 4.11.

Der Oculus Unreal Renderer wurde mit Blick auf die spezifischen Einschränkungen des VR-Renderings entwickelt. Der Renderer ermöglicht die einfachere Erstellung von High-Fidelity- und High-Performance-Erlebnissen und wird bereits von vielen Entwicklern genutzt.

Hintergrund.

Als das Team mit der Produktion auf Farlands begann, nahmen Sie sich einen Moment Zeit, um darüber nachzudenken, was Sie aus den Demo-Erfahrungen gelernt haben, die sich bei Oculus Connect, GDC, CES und anderen Veranstaltungen gezeigt haben. Für die Erstellung dieser Inhalte verwendeten Sie ausschließlich Unreal Engine 4, die Ihnen eine unglaubliche Bearbeitungsumgebung und eine Fülle fortschrittlicher Rendering-Funktionen bot.

Leider bedeutete das Rendering nach Rift, dass Anwender nur eine Teilmenge dieser Funktionen nutzen konnten. Oculus wollte diejenigen untersuchen, die am häufigsten verwendet wurden und sehen, ob Sie einen abgespeckten Renderer entwerfen konnten, der eine höhere Leistung und eine größere visuelle Treue bietet, während das Team weiterhin den erstklassigen Editor und die Engine von UE4 verwenden kann. Während sich der Oculus Unreal Renderer auf die Anwendungsfälle von Oculus-Anwendungen konzentriert, wurde er in bereits bestehende Projekte (einschließlich Showdown und Oculus Dreamdeck) nachgerüstet, ohne dass größere inhaltliche Arbeiten erforderlich waren. In diesen Fällen lieferte dieser eine klarere Darstellung und gab genügend GPU-Headroom frei, um zusätzliche Funktionen zu ermöglichen oder die Auflösung um 15-30% zu erhöhen.

Das Problem mit Deferred VR.

Unreal Engine ist bekannt für seine fortschrittlichen Rendering-Features und seine Klangtreue. Was war also der Beweggrund, sie für VR zu ändern? Es ging vor allem um die Erfahrungen mit der Erstellung von VR-Inhalten und die Unterschiede beim Rendern auf einem Monitor im Vergleich zu Rift.

Bei der Durchsicht der Demos, die für Rift erstellt wurden, stellte Oculus fest, dass die meisten Shader ziemlich einfach waren und sich hauptsächlich auf detaillierte Texturen mit wenigen Nachschlägen und ein wenig Arithmetik stützten. In Verbindung mit einem verzögerten Renderer bedeutete dies, dass die GBuffer-Pässe von Oculus stark texturgebunden waren – Oculus las diese aus einer großen Anzahl von Texturen aus, schrieb Sie in GBuffer und dazwischen wurde nicht viel gemacht.

Oculus setzte auch dynamische Beleuchtung und Schatten sparsam ein und nutzte hauptsächlich die vorberechnete Beleuchtung. In der Praxis hat der Wechsel zu einem Renderer Oculus geholfen, einen begrenzteren Satz von Funktionen in einem einzigen Durchgang bereitzustellen, eine bessere GPU-Auslastung zu erzielen, die Optimierung zu ermöglichen, den Bandbreiten-Overhead zu entfernen und es Ihnen zu erleichtern, 90 Hz zu erreichen.

Sie wollten auch das hardwarebeschleunigte Multi-Sample-Antialiasing (MSAA) mit dem temporalen Antialiasing (TAA) von Unreal vergleichen. TAA funktioniert extrem gut bei reiner Monitor-Wiedergabe und ist eine sehr gute Ergänzung für die verzögerte Wiedergabe, aber es verursacht spürbare Artefakte in VR. Insbesondere kann es zu Ruckeln und geometrischem Aliasing bei Kopfbewegungen führen. Dies wurde wurde durch einige von Oculus eingesetzten Shader– und Vertex-Animationstricks noch schlimmer. Aber das liegt hauptsächlich an der Art und Weise, wie VR-Headsets funktionieren.

Im Vergleich zu einem Monitor deckt jedes Rift-Pixel einen größeren Teil des Sichtfeldes des Betrachters ab. Ein typischer Monitor hat über 10 Mal mehr Pixel pro Raumwinkel als ein VR-Headset. Bilder, die dem Oculus SDK zur Verfügung gestellt werden, durchlaufen auch eine zusätzliche Schicht des Resamplings, um die Effekte der Optik des Headsets zu kompensieren. Diese zusätzliche Filterung neigt zu einer leichten Überglättung des Bildes.

All diese Faktoren zusammen tragen zu dem Wunsch von Oculus bei, bei der Wiedergabe so viele Bilddetails wie möglich zu erhalten. Oculus stellte fest, dass MSAA schärfere und detailreichere Bilder erzeugt.

In der Zukunft von Vorteil.

Beim aktuellen Stand der Technik werden häufig Bildschirmraum-Effekte wie die Screenspace-Ambient Occlusion (SSAO) und Screenspace-Reflexionen (SSR) genutzt. Diese sind bekannt für ihre realistische und qualitativ hochwertige visuelle Wirkung, aber sie machen Kompromisse, die in VR nicht ideal sind. Wenn man rein im Screenspace arbeitet, kann es zu fehlerhaften Stereodisparitäten (Unterschiede in den Bildern, die jedem Auge gezeigt werden) kommen, die manche als unangenehm empfinden. Zusammen mit den Kosten für das Rendern dieser Effekte war es für uns angenehmer, in unserem Anwendungsfall auf die Unterstützung dieser Funktionen zu verzichten.

Unsere Entscheidung, einen Forward Renderer einzuführen, berücksichtigte all diese Überlegungen. Entscheidend ist, dass das Forward-Rendering es ermöglicht, MSAA für das Anti-Aliasing zu verwenden sowie texturlastigen Shadern Arithmetik hinzuzufügen (und GBuffer-Schreibvorgänge zu entfernen), teure Vollbild-Durchläufe zu entfernen, die die asynchrone Zeitverzögerung stören können und es Oculus eine mäßige Beschleunigung gegenüber dem leistungsfähigeren verzögerten Renderer ermöglicht. Der Wechsel zu einem Forward-Renderer hat auch die einfache Hinzufügung von monoskopischem Backgroundrendering ermöglicht, was bei Titeln mit großer, komplexer entfernter Geometrie eine erhebliche Leistungssteigerung bewirken kann. Diese Vorteile sind jedoch mit Kompromissen verbunden, die nicht für jeden geeignet sind. Das Ziel von Oculus ist es, die Erkenntnisse mit den VR-Entwicklern zu teilen, während sie weiter dafür kämpfen, dass Weltklasse-Inhalte mit 90 Hz laufen.

Die Umsetzung basiert auf Ola Olssons HPG-Papier von 2012, Clustered Deferred and Forward Shading. Leser, die mit dem traditionellen Forward-Rendering vertraut sind, könnten bei der Verwendung eines solchen Renderers Bedenken hinsichtlich des CPU– und GPU-Overheads dynamischer Lichter haben. Glücklicherweise erfordern moderne Ansätze für Forward Lighting keine zusätzlichen Draw Calls: Alle Geometrie und Lichter werden in einem einzigen Durchgang gerendert (mit einem optionalen z-prepass). Dies wird durch die Verwendung eines Compute-Shaders ermöglicht, um im Voraus zu berechnen, welche Lichter die 3D-„Cluster“ der Szene beeinflussen (Unterteilungen des Sehstumpfes jedes Auges, wodurch sich ein Kegelstumpf-Voxel-Gitter ergibt).

Mithilfe dieser Daten kann jedes Pixel kostengünstig eine Liste von Lichtern mit hoher Kohärenz des Screenspace bestimmen und eine Beleuchtungsschleife ausführen, die die effiziente Verzweigungsfähigkeit moderner GPUs nutzt. Dies ermöglicht ein präzises Culling und eine effiziente Handhabung einer kleineren Anzahl dynamischer Lichter, ohne den Overhead zusätzlicher Draw-Aufrufe und Render-Durchläufe.

Über den Renderer hinaus hat Oculus UE4 modifiziert, um zusätzliche GPU- und CPU-Optimierungen zu ermöglichen. Der Renderer wird als ungepflegtes Beispiel und nicht als offiziell unterstütztes SDK zur Verfügung gestellt, aber Oculus freut sich, Projekten, die die erstklassige Engine und den Editor von Unreal Engine verwenden, zusätzliche Optionen für das Rendern ihrer VR-Welten zu bieten.

Vielen Dank für Ihren Besuch.

3DMaster