Lumen ermöglicht globale Beleuchtung in Echtzeit im 4. Kapitel von Fortnite Battle Royale

Daniel Wright, Engineering Fellow, Graphics und Krzysztof Narkowicz, Technical Director, Graphics |
26. Januar 2023
Hallo, wir sind die Techniker Daniel Wright und Krzysztof Narkowicz und arbeiten an Lumen. Lumen ist das komplette System der Unreal Engine 5 für globale Beleuchtung (Global Illumination, GI) und Reflexionen, das direkt ab Lieferung aktiviert ist. In diesem Blog-Post sehen wir uns an, wie Lumen im 4. Kapitel von Fortnite Battle Royale arbeitet, und heben einige Verbesserungen hervor, die das Team bei der Fertigstellung des 4. Kapitels vornahm (diese sind in der Unreal Engine 5.1 jetzt für alle Entwickler verfügbar). Wir haben bereits zuvor einen Tech-Blog zur Einführung von Lumen geschrieben, den wir sehr empfehlen, um eine allgemeine Übersicht über das System zu erhalten.

Das 4. Kapitel von Fortnite Battle Royale wird auf PlayStation 5, Xbox Series X und Xbox Series S mit aktiviertem Lumen veröffentlicht. Lumen wird auf dem PC und in Cloud-Gaming-Lösungen aktiviert, wenn die Qualitätseinstellung „Globale Beleuchtung“ auf „Hoch“ oder „Episch“ gesetzt wird. Dabei besteht die Option, Hardware-Raytracing für noch bessere Qualität zu verwenden, wenn dies von der Grafikkarte unterstützt wird.
 

Lumen im 4. Kapitel von Fortnite Battle Royale

Vor Kapitel 4 war Fortnite auf Konsolen der nächsten Generation auf die dynamischen Beleuchtungstechnologien der Unreal Engine 4 beschränkt. Umgebungsbeleuchtung wurde ausschließlich durch Distanzfeld-Umgebungsverdeckung verwendet, wodurch Innenbereiche kalt aussahen, da das blaue Skylight (vom Himmel abgestrahltes Licht) in Gebäude strahlte. Im 4. Kapitel berechnet Lumen die globale Beleuchtung mit hoher Qualität, was die warme Sonnenlicht-Abstrahlung und detaillierte indirekte Schatten wieder ermöglicht.
Distanzfeld-Umgebungsverdeckung vs. Lumen GI. Automatische Belichtung wird gemeinsam mit Lumen GI aktiviert.
Innenbereiche werden mit akkurater globaler Beleuchtung wesentlich dunkler als Außenbereiche, da das Skylight korrekt blockiert wird, was die Aktivierung von automatischer Belichtung erforderlich macht.

In früheren Versionen von Fortnite waren Reflexionen auf Konsolen der nächsten Generation auf Bildschirmraum-Reflexionen (Screen Space Reflections, SSR) beschränkt. Dieser Effekt kann nur zurückwerfen, was auf dem Bildschirm angezeigt wird, und das reicht nicht aus, um zu verhindern, dass Skylight ins Innere eines Gebäudes dringt, in dem sich die Spielfigur befindet. SSR generiert außerdem nur gute Ergebnisse auf spiegelnden Oberflächen, ungenaue Reflexionen lassen also zu wünschen übrig. Fortnite-Künstler haben diese Einschränkungen bisher umgangen, indem sie in Innenbereichen vollkommen auf spiegelnde Materialien verzichteten! Lumen-Reflexionen bieten auf glänzenden Oberflächen akkurate Raytracing-Reflexionen, wodurch Metalle und glatte Materialien auch in Innenräumen korrekt gerendert werden. Künstler können die komplette Reaktion des Materials auf Beleuchtung nun in Echtzeit erleben.
Bildschirmraum-Reflexionen vs. Lumen-Reflexionen auf Eis.
Lumen-Reflexionen treten auf Wasserflächen ebenfalls oft auf, wo sie verglichen mit SSR wesentlich schärfer und nicht auf Objekte beschränkt sind, die auf dem Bildschirm dargestellt werden.
Bildschirmraum-Reflexionen vs. Lumen-Reflexionen auf Wasser.
Fortnite Battle Royale hat viele Spiel-Events, die dynamische Beleuchtung erfordern – die Tageszeit ändert sich, Spieler bauen und zerstören Gebäude, öffnen Türen und so weiter. Lumen ist voll dynamisch und reagiert in Echtzeit auf diese Änderungen. Lumen amortisiert seine Berechnungen über mehrere Bilder, um die Kosten zu verringern, aber durch die hohe Framerate, auf die Fortnite abzielt, werden über Zeit aufgebaute Artefakte minimiert.

Auf dem Weg zu Kapitel 4

Als wir die Arbeit an der Unreal Engine 5.0 zur Veröffentlichung beendeten, wandten wir uns dem 4. Kapitel von Fortnite Battle Royale und dessen Herausforderungen zu. Fortnite hat auf Konsolen mindestens 60 FPS als Zielwert, was pro Einzelbild gerade mal 16,67 Millisekunden zulässt, oder noch weniger mit Sicherheitspuffer für dynamische Auflösung und Gameplay-Kosten bei heftigen Kämpfen. Bedenkt man all die Rendering-Funktionen, die wir wollten, hatten wir für dynamische globale Beleuchtung und Reflexionen zusammengenommen gerade mal vier Millisekunden. Das ist ein extrem kurzer Zeitraum – die meisten AAA-Spiele verwenden vier Millisekunden allein auf Raytracing-Reflexionen. Wir mussten also jede uns zur Verfügung stehende Optimierung nutzen, ohne dabei Beleuchtungsqualität der nächsten Generation zu opfern.

Als Erstes mussten wir uns entscheiden, welche Raytracing-Methode wir für das 4. Kapitel von Fortnite Battle Royale nutzen wollten. Wir hatten bereits The Matrix Awakens: An Unreal Engine 5 Experience mit Lumen und Hardware-Raytracing auf Konsolen veröffentlicht und dabei signifikante Optimierungen durchgeführt, aber diese Tech-Demo war auf 30 FPS ausgelegt. Nach den ersten Tests konnten wir sicher sein, dass Lumens Software-Raytracing aufgrund seiner niedrigeren Tracing-Kosten nötig sein würde, um die 60 FPS zu erreichen. Aber die recht ungenaue Natur von Software-Raytracing stellte uns vor mehrere Herausforderungen – insbesondere was Vegetationsqualität und Wasser-Reflexionen anging.

Im 4. Kapitel von Fortnite Battle Royale sind Wälder und sanfte, grasbewachsene Hügel zu sehen. In keinem der bisherigen Projekte, die wir mit Lumen veröffentlichten, waren viele Pflanzen enthalten, daher hatten wir noch keine Gelegenheit, damit zu arbeiten. Eins der größten Probleme war zu hohe Verdeckung bei Vegetation.

Das Software-Raytracing von Lumen verwendet ein vorzeichenbehaftetes Distanzfeld, um die Oberflächen einer Szene zu repräsentieren. Vorzeichenbehaftete Distanzfelder können nur opake Oberflächen repräsentieren, und beim Ray Marching geben diese ein binäres Ergebnis: „Treffer“ oder „Verfehlt“. Dies führt bei Vegetations-Meshes zu viel zu hoher Verdeckung, da diese als Gesamtobjekt generiert werden. Wir entwickelten eine neue Art, vorzeichenbehaftete Distanzfelder überschneiden zu lassen – bei jedem Ray-Marching-Schritt wird entschieden, ob eine Überschneidung stattfindet. Dadurch wird es zu einer stochastischen Technik und ermöglicht es uns, die Gesamtgeometrie akkurat darzustellen, dabei jedoch gleichzeitig die Repräsentation durch das vorzeichenbehaftete Distanzfeld zu behalten, die für den Rest der Szene wunderbar funktioniert.
Übermäßige Verdeckung bei Vegetation, gelöst durch halbtransparente stochastische Distanzfeld-Überschneidungen.
Einige Probleme waren leichter zu lösen. Lumen verwendet Screentracing für mehr Details in Bereichen, in denen Software-Raytracing zurückfällt, aber Gras ist so detailliert, dass diese Screentraces zu auffälligem Aliasing führten. Ein einfacher Workaround, durch den Screentracing-Treffer auf Vegetation übersprungen wurden, genügte, um diese Artefakte aufzulösen.
Extremes Rauschen durch Screentracing auf Gras, gelöst durch Überspringen von Vegetationstreffern.
Ein weiteres großes Hindernis bei Software-Raytracing war die niedrige Auflösung der Beleuchtung auf in Reflexionen sichtbaren Oberflächen. Lumen unterhält einen recht hoch aufgelösten Oberflächen-Cache für jedes Mesh, um jedem Strahlentreffer effizient Licht zuzuweisen, aber wir verbanden diese zu einer Voxel-Repräsentation, die wesentlich verwaschener war. Wir entwickelten eine umgekehrte Lookup-Struktur, mit der wir den Mesh-spezifischen Oberflächen-Cache direkt bei Strahlentreffern auslesen konnten, was sehr viel genaueres ausgestrahltes Licht und schärfere Wasserreflexionen ermöglichte.
Schärfere Reflexionen mit Software-Raytracing, wenn Strahlen den Oberflächen-Cache von Lumen direkt auslesen (Screentracing zu Darstellungszwecken deaktiviert).
Apropos Wasserreflexionen: Jedes Mal, wenn Lumen-Screentracing durch ein Objekt im Vordergrund unterbrochen wurde, führte dies zu vertikalen Streifenartefakten. Das war für Charaktere in Bewegung unfassbar ablenkend. Das Screentracing von Lumen kann die Dicke eines Objekts nicht erkennen. Für den übrigen Strahl müssen wir also Software-Raytracing aktivieren, was oft zu einer verfälschten Farbe führt. Das war selbst im Vergleich zu Bildschirmraum-Reflexionen ein Rückschritt, die eine wesentlich kostengünstigere, weniger genaue Methode sich kreuzender Strahlen verwendeten, dafür jedoch hinter Objekten im Vordergrund fortgeführt werden konnten. Wir waren in der Lage, die vertikalen Streifen zu beheben, indem wir die Bildschirmfarbe auch für Software-Raytracing-Treffer auslasen, was die Unstimmigkeiten verringerte. Diese Lösung kam so kurz vor knapp, dass wir sie nicht in die Veröffentlichung von UE 5.1 aufnehmen konnten.
Vertikale Streifen, die durch eine Unstimmigkeit zwischen Screentraces und Software-Raytracing entstehen, werden durch Auslesen der Bildschirmfarbe am Strahltreffer minimiert.
Andere Verbesserungen der Qualität kamen eher überraschend. Lumen GI führt ein enormes Downsampling durch, um die Zeitvorgabe von vier Millisekunden zu erfüllen. Dadurch wird Rauschen sichtbarer und kann das Spielerlebnis beeinträchtigen. Wir konnten dieses Rauschen stark verringern, indem wir NVIDIAs Spatiotemporal Blue Noise integrierten, eine Technik, die Rauschmuster vorab optimiert, um diese rasch loszuwerden, wenn sie über mehrere Einzelbilder ansteigen. Dadurch konnten wir sehr viel sauberere indirekte Beleuchtung generieren, ohne zusätzliche Strahlen verfolgen zu müssen.
Himmelsbeleuchtung hat mit Spatiotemporal Blue Noise weniger Rauschen, wenn es durch eine Tür dringt.

Werkzeuge für die künstlerische Leitung

Künstler haben bereits einige Werkzeuge, um indirekte Beleuchtung zu steuern, darunter „Indirect Lighting Intensity“ für gerichtetes Licht. In Fortnite wurde ein Wert von 2,0 verwendet, um zurückgeworfenes Licht zu verstärken und das Spiel wärmer wirken zu lassen. Innenbereiche stellten uns aber vor ein Problem: Ohne akkurate globale Beleuchtung wurden diese extrem dunkel, wenn keine Fenster oder Lichtquellen in der Nähe waren. Das führte zu riesigen Änderungen bei der Belichtung, wenn man von Innenbereichen in Außenbereiche ging. Die Künstler konnten das Problem zwar umgehen, indem sie zusätzliche Lichtquellen hinzufügten, aber das führte zu höheren Schattenkosten.

Wir entwickelten neue Bedienelemente für die indirekte Beleuchtung von Lumen: „Skylight Leaking“ und „Diffuse Color Boost“ im Nachbearbeitungsvolumen. „Skylight Leaking“ kann verwendet werden, um in Innenbereichen eine gewisse Menge Umgebungsbeleuchtung zuzulassen, wobei die Beleuchtungsmenge beschränkt wird. „Diffuse Color Boost“ wiederum erhöht, wie oft indirektes Licht zurückgeworfen wird. Diese beiden Optionen erhöhen die GPU-Kosten nicht merklich, wie es beim Hinzufügen weiterer Lichtquellen der Fall wäre. Fortnite-Künstler nutzten eindringendes Skylight, damit Innenbereiche für Gameplay-Zwecke nicht zu dunkel wurden.
Eindringendes Skylight wird verwendet, um Bereiche nicht völlig schwarz werden zu lassen.
Akkurate globale Beleuchtung erschafft kontrastreiche Beleuchtung, bei der kein einzelner Belichtungswert gut funktioniert. Helle Bereiche des Bilds – besonders der Himmel und sämtliche von der Sonne beleuchtete Oberflächen – werden blendend, dunkle Bereiche erhalten zu wenig Licht. Unreal Engine 5.0 führte eine neue Funktion namens Lokale Belichtung ein, mit der Fortnite-Künstler die Highlight- und Schattendetails in herausfordernden Beleuchtungsbedingungen mit hohem Dynamikbereich erhalten konnten.
Highlight- und Schattendetails bleiben dank lokaler Belichtung erhalten, einer neuen Funktion von UE 5.0. Lokale Belichtung sollte bei der Nutzung von Lumen immer eingerichtet sein!

Performance

Lumen verlässt sich für 4K-Darstellungen sehr auf Temporal Upsampling über die Funktion „Temporal Super Resolution (TSR)“ in der Unreal Engine 5. Da wir intern mit TSR in 1080p rendern, erhalten wir die beste finale Bildqualität, anders als bei Verwendung von Lumen bei nativen 4K- und wesentlich niedrigeren Qualitätseinstellungen.

Lumen kann auf Konsolen der nächsten Generation 60 FPS erreichen, wenn im Geräteprofil der Plattform die Qualitätsgruppen „Globale Beleuchtung“ und „Reflexion“ auf „Hoch“ gesetzt werden:

; Lumen GI und Reflexionsqualität auf Hoch setzen, Ziel: 60 FPS
+CVars=sg.GlobalIlluminationQuality=2
+CVars=sg.ReflectionQuality=2

Lumen GI skaliert durch noch stärkeres Downsampling runter, bis zu 1/16 eines Strahls pro Pixel. Indirekte Beleuchtung wird bei einer so geringen Anzahl von Raytracing-Strahlen zeitlich weniger stabil und Grafikrauschen in dunklen Bereichen offensichtlicher. Die geschickte Nutzung des hereinstrahlenden Skylights kann dieses verstärkte Rauschen verbergen.
Lumen bei Einstellungen mit 60 FPS vs. Lumen bei Einstellungen mit 30 FPS. Lumen fängt kleine Details besser ein und ist bei Einstellungen mit 30 FPS zeitlich sehr viel stabiler, was im Screenshot-Vergleich nicht zu sehen ist.
Wir haben an Lumen GI eine Menge kleinerer Verbesserungen vorgenommen, als wir am 4. Kapitel für Fortnite Battle Royale arbeiteten, aber am schnellsten wurde der Prozess, als wir die gesamte Methode in die asynchrone Berechnungs-Pipeline verschoben haben und so 0,8 Millisekunden einsparen konnten. Lumen hat viele Berechnungsanfragen für verschiedene Algorithmen, zwischen denen die GPU kurz untätig ist. In der Summe kommt einiges zusammen.

Zusätzlich neigen Raytracing-Anfragen dazu, einen wahren Rattenschwanz nach sich zu ziehen, bei denen ein paar Strahlen wesentlich später fertig berechnet werden als der Rest. Indem wir diese Arbeit in die asynchrone Berechnungs-Pipeline verschoben haben, konnte die GPU die Pausen mit Berechnungen für den Rest des Bilds verbringen, wodurch wir die Rechenleistung der GPU besser ausnutzen konnten. Asynchrones Lumen wird auf Konsolen mit UE 5.2 standardmäßig aktiviert, da wir einige Anpassungen vornehmen mussten, die für UE 5.1 nicht rechtzeitig abgeschlossen waren.
Lumen arbeitet nun über die asynchrone Berechnungs-Pipeline und nutzt die Rechenleistung der GPU besser aus.
Die Spiegelungen von Lumen skalieren auf das 60-FPS-Budget herunter, indem sie in allen Bereichen außer auf Wasser mit halber Auflösung gerendert werden. Lumen GI generiert bereits erste Spiegelungen, aber für scharfe Spiegelungen müssen weitere Strahlen ermittelt werden. Die Kosten von Reflexionen können sich stark unterscheiden, abhängig davon, wie viele Materialien auf dem Bildschirm glatt genug sind, um Reflexionsstrahlen zu benötigen. Eine der größten Optimierungen, die eine oder zwei Millisekunden einsparte, war das häufigere Überspringen von Reflexionsstrahlen auf Vegetation, was bereits in Base Pass und Schattentiefen höhere Kosten verursachte und keinen merklichen Qualitätsverlust nach sich zog.

Xbox Series S stellt eine besondere Herausforderung dar. Diese hat eine GPU mit vier Teraflops (verglichen mit der 12-Teraflop-GPU der Xbox Series X), also war eine niedrigere interne Auflösung vonnöten, was aber noch nicht ausreichte. Wir wollten nicht auf Distanzfeld-Umgebungsverdeckung zurückgreifen, weil sich dadurch das Aussehen merklich verändern würde. Stattdessen entwickelten wir einen Modus, in dem Lumen GI unscharfe Reflexionen generiert und Bildschirmraum-Reflexionen für die Spiegel-Reflexionen sorgen. So sparen wir etwa eine Millisekunde durch Deaktivieren der Lumen-Spiegelungen, aber das Ergebnis sieht großartig aus verglichen mit dem, was man nur mit Bildschirmraum-Reflexionen schaffen kann.
Lumen GI generiert selbst dann unscharfe Reflexionen, wenn Lumen-Reflexionen zur Skalierbarkeit deaktiviert sind.
Schlussendlich waren wir in der Lage, Lumen GI und Reflexionen erfolgreich in unserem durchschnittlichen Kosten-Budget von vier Millisekunden unterzubringen, das für das Erreichen von 60 FPS auf Konsolen der nächsten Generation gilt. Im 4. Kapitel von Fortnite Battle Royale wird eine durchschnittliche interne Auflösung von 55–60 % von 4K auf Konsolen der nächsten Generation und zuverlässig 60 FPS erreicht.

Runterskalieren

Fortnite wird auf einer breiten Auswahl von Plattformen veröffentlicht, von denen nur die besten Lumen unterstützen. Das Spielerlebnis muss auf allen so ähnlich wie möglich sein, ohne dass die Entwickler auf jeder Plattform neue Beleuchtung einrichten müssen. Wir skalieren Umgebungsbeleuchtung anhand der Einstellung „globale Beleuchtung“:

Episch und Hoch
  • Lumen ist aktiviert und generiert vollständige globale Beleuchtung
  • Lumen verwendet hereinstrahlendes Skylight und verhindert, dass dunkle Bereiche komplett schwarz werden
  • Automatische Belichtung ist aktiviert und sorgt in Innenbereichen für die korrekte Belichtung
  • Lokale Belichtung ist aktiviert

Mittel
  • Distanzfeld-Umgebungsverdeckung ersetzt Lumen für großflächige UV
  • Bildschirmraum-Umgebungsverdeckung wird für kleinformatige UV verwendet
  • Automatische Belichtung ist deaktiviert

Niedrig
  • Skylight ohne Schatten
  • Die Intensität des Skylights wird durch r.SkylightIntensityMultiplier=0.7 verringert, um besser zur Einstellung „Mittel“ zu passen, da es keine Art von Skylight-Schattierungen gibt

Wir hoffen, dass diese Zusammenfassung der Lumen-Verbesserungen für das 4. Kapitel von Fortnite Battle Royale hilfreich war und einige Fragen beantwortet, wie ein plattformübergreifendes Spiel mit Lumen veröffentlicht werden kann. Unreal Engine-Entwickler können bereits mit Unreal Engine 5.1 auf die große Mehrheit dieser Verbesserungen zugreifen. Weitere Informationen finden Sie in der Dokumentation für Lumen.

    Sichern Sie sich die Unreal Engine noch heute!

    Sichern Sie sich das offenste und fortschrittlichste Werkzeug der Welt.
    Die Unreal Engine wird mit allen Funktionen und vollem Zugriff auf den Quellcode geliefert und ist sofort einsatzbereit.