Zurück zum Blog

Unreal Engine 5.8 Lumen Reflections Bug: Den silent Screen-Space Fallback beheben

Veröffentlicht am 23. Juni 2026
Unreal Engine 5.8 Lumen Reflections Bug: Den silent Screen-Space Fallback beheben

Kurz und knapp

Dieser Artikel analysiert einen Bug in Unreal Engine 5.8, der bei deaktivierter Lumen Global Illumination fälschlicherweise auch die Lumen Reflections abschaltet und einen silent Fallback auf Screen-Space Reflections (SSR) erzwingt. Wir erläutern die architektonischen Ursachen im Surface Cache der Lumen Scene sowie die Performance-Auswirkungen auf Konsolen. Zudem präsentieren wir praktische C++-Fixes, CVar-Workarounds für die Konfiguration sowie den entsprechenden Engine-Source-Patch in `LumenScene.cpp` zur Behebung des Render-Regressionsfehlers.

Der silent Fallback: Warum Ihre Reflections in UE 5.8 ausfallen

Ein Upgrade auf Unreal Engine 5.8 hätte ein standardmäßiges Pipeline-Update sein sollen, doch Graphics Engineers stellen fest, dass ihre glänzenden metallischen Materialien flach und matschig wirken. Oberflächen, die zuvor gestochen scharfe Raytracing-Details zeigten, fallen nun auf unscharfe Screen-Space Reflections (SSR) zurück, sobald das reflektierte Objekt aus dem Bildausschnitt verschwindet. Diese silent Degradierung des Renderings wird durch den unreal engine 5.8 lumen reflections bug verursacht, bei dem die Engine keine Reflections generiert, es sei denn, Lumen Global Illumination (GI) ist vollständig aktiv. Für Spiele, die auf Baked Lighting oder alternative GI-Lösungen setzen, erzwingt dies die Entscheidung zwischen massivem GPU-Overhead und ruinierter visueller Qualität.

Das Kernproblem liegt in der Art und Weise, wie Unreal Engine 5.8 seine Rendering Pipeline initialisiert. In früheren Versionen konnten Entwickler Lumen Global Illumination deaktivieren, um GPU-Ressourcen zu sparen, während Lumen Reflections aktiv blieben, um qualitativ hochwertige Specular Highlights auf Metall und Glas beizubehalten. Dieser Standalone-Reflections-Modus ist ein Standardwerkzeug für Mid-Tier-Hardware und Ziel-Optimierungsprofile, bei denen globales indirektes Licht in Lightmaps gebacken wird. In UE 5.8 deaktiviert das Deaktivieren von Lumen GI jedoch stillschweigend die gesamte Lumen Scene-Repräsentation, was dazu führt, dass Reflections ohne Vorwarnung oder Fehlermeldungen in den Logs sofort auf Screen-Space-Methoden zurückfallen.

Diese Regression ist besonders schädlich für Multi-Plattform-Releases. Ein Spiel, das für stabile 60 FPS auf Konsolen optimiert ist, kann sein GPU-Budget komplett überschreiten, wenn Entwickler gezwungen sind, Lumen GI wieder zu aktivieren, nur damit ihre glänzenden Materialien korrekt aussehen. Zu verstehen, warum dieser Fallback auftritt und wie man ihn patcht, ist entscheidend für jeden, der im Jahr 2026 ein Unreal Engine-Projekt ausliefert oder upgradet.

Die Architektur verstehen: Lumen Reflections vs. Global Illumination

Um zu verstehen, warum dieser Bug auftritt, muss man untersuchen, wie Lumen unter der Haube Reflections und indirekte Beleuchtung generiert. Lumen führt das Raytracing nicht direkt auf den hochdetaillierten Static Meshes in Ihrem Level aus, da dies für Echtzeitanwendungen viel zu rechenintensiv wäre. Stattdessen erstellt es eine vereinfachte Darstellung der Szene, die sogenannte Lumen Scene, die aus niedrigauflösenden Voxel-Strukturen und 2D-Cards besteht, welche Oberflächenattribute wie Base Color, Roughness und Opacity enthalten. Diese Datensammlung wird als Surface Cache bezeichnet.

In einem fehlerfreien Zustand der Engine wird der Surface Cache kontinuierlich aktualisiert, während sich die Kamera durch die Umgebung bewegt. Wenn eine reflektierende Oberfläche einen Ray-Trace erfordert, schießt die Engine Strahlen in diese Lumen Scene, um zu bestimmen, welche Objekte sichtbar sind und welches Licht sie aussenden. Diese Architektur ermöglicht es dem Reflection Pass, komplexe glänzende Reflections zu einem Bruchteil der Kosten eines vollständigen Path Tracings zu berechnen. Entscheidend ist, dass die Lumen Scene und ihr Surface Cache unabhängig davon initialisiert werden können, ob die Engine Lumen zur Berechnung der globalen indirekten Beleuchtung verwendet.

Wenn Sie ein standardmäßiges Performance-Profil auf einer modernen Konsole wie der PlayStation 5 ausführen, zeigt die Aufschlüsselung der Performance-Kosten deutlich, warum die Entkopplung dieser Features unerlässlich ist:

  • Lumen GI + Lumen Reflections: Die Berechnung der indirekten Beleuchtung der gesamten Szene, das Aktualisieren des Surface Caches und das Tracing von glänzenden Reflections benötigt etwa 6,5 ms GPU-Frame-Time bei einer Auflösung von 1440p.
  • Standalone Lumen Reflections: Das Tracing von Reflections gegen den Surface Cache bei Verwendung von Baked Lightmaps für GI benötigt nur 1,8 ms GPU-Frame-Time.
  • Screen-Space Reflections (SSR): Das Tracing von Reflections ausschließlich über den sichtbaren Screen Buffer benötigt 0,5 ms GPU-Frame-Time, leidet jedoch unter erheblichem visuellem Clipping an den Rändern des Viewports.

Durch das Erzwingen des Fallbacks auf SSR nimmt die Engine der Szene den Parallax-Effekt und die Off-Screen-Reflection-Fähigkeit, die moderne Szenen realistisch wirken lassen. Umgekehrt bedeutet der Zwang für Entwickler, Lumen GI einzuschalten, um diese Reflections zurückzuerhalten, eine massive Zusatzbelastung von 4,7 ms für das GPU-Frame-Budget. Diese zusätzliche Latenz ist für schnelle kompetitive Titel oder Action-Games, die hohe Frameraten anstreben, inakzeptabel.

Diagnose des Unreal Engine 5.8 Lumen Reflections Bugs

Diesen Bug während der Entwicklung zu erkennen, erfordert einen Blick über das Standardverhalten des Viewports im Unreal Editor hinaus, da dieses das Problem aufgrund von Editor-spezifischen Rendering Paths manchmal maskieren kann. Der Bug tritt speziell dann auf, wenn Hardware Ray Tracing (HWRT) aktiviert, aber die Methode für Dynamic Global Illumination deaktiviert ist. Um zu bestätigen, ob Ihr Projekt betroffen ist, müssen Sie genau die Konfigurationseinstellungen replizieren, bei denen der Fallback auftritt.

Überprüfen Sie zunächst die Rendering-Konfiguration Ihres Projekts. Navigieren Sie unter Project Settings > Engine > Rendering zum Bereich Global Illumination und stellen Sie die Dynamic Global Illumination Method auf None (oder eine andere Nicht-Lumen-Methode wie Screen Space) ein. Gehen Sie als Nächstes zum Bereich Reflections und setzen Sie die Reflection Method auf Lumen. Stellen Sie unter der Überschrift Hardware Ray Tracing sicher, dass sowohl Support Hardware Ray Tracing als auch Use Hardware Ray Tracing When Available auf true gesetzt sind.

+-------------------------------------------------------------------+
| Project Settings -> Engine -> Rendering                           |
+-------------------------------------------------------------------+
| Dynamic Global Illumination Method:  [ None / Screen Space ]      |
| Reflection Method:                   [ Lumen ]                    |
| Support Hardware Ray Tracing:        [ True ]                     |
| Use Hardware Ray Tracing:            [ True ]                     |
+-------------------------------------------------------------------+

Sobald diese Einstellungen angewendet wurden, starten Sie Ihre Szene in einer Standalone-Game-Instanz oder einem aktiven PIE-Fenster. Führen Sie den Konsolenbefehl r.Lumen.Visualize.CardPlacement 1 aus, um die Lumen Scene zu inspizieren. In Unreal Engine 5.8 sehen Sie einen komplett leeren Bildschirm, was bestätigt, dass der Surface Cache inaktiv ist. Dies weist darauf hin, dass die Engine die Card-Update-Pipeline abgeschaltet hat, was dazu führt, dass die Reflections auf Screen-Space Reflections zurückfallen.

Profilen Sie die Szene mit dem Tool Unreal Insights oder dem Standard-Konsolenbefehl stat GPU. Sie werden sehen, dass LumenReflections aus dem Profiling-Pass verschwindet und vollständig durch ScreenSpaceReflections ersetzt wird, was je nach Screen Coverage etwa ~0,4 ms bis ~0,8 ms beansprucht.

Programmatische Fixes: Abfragen und Beheben des Fallbacks in C++

Während Sie auf einen offiziellen Hotfix warten, können Sie diesen Zustand programmgesteuert auf dem Client erkennen und die erforderlichen Engine-Konfigurationen erzwingen. Dies verhindert, dass sich die silent Degradierung auf Systeme Ihrer Spieler auswirkt, die Hardware Ray Tracing unterstützen. Unten finden Sie eine Implementierung einer C++ Actor Component, die den Console Manager abfragt, die aktuelle Rendering-Konfiguration überprüft und den Konflikt dynamisch löst.

#include "CoreMinimal.h"
#include "Components/ActorComponent.h"
#include "HAL/IConsoleManager.h"
#include "Engine/World.h"
#include "LumenReflectionsChecker.generated.h"

UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent))
class MYGAME_API ULumenReflectionsChecker : public UActorComponent

{
    GENERATED_BODY()

public:
    ULumenReflectionsChecker();

protected:
    virtual void BeginPlay() override;

private:
    void ValidateLumenConfiguration();
};

ULumenReflectionsChecker::ULumenReflectionsChecker()
{
    PrimaryComponentTick.bCanEverTick = false;
}

void ULumenReflectionsChecker::BeginPlay()
{
    Super::BeginPlay();
    ValidateLumenConfiguration();
}

void ULumenReflectionsChecker::ValidateLumenConfiguration()
{
    // Retrieve critical engine console variables for Lumen setup
    IConsoleVariable* GiMethodVar = IConsoleManager::Get().FindConsoleVariable(TEXT("r.DynamicGlobalIlluminationMethod"));
    IConsoleVariable* ReflectionMethodVar = IConsoleManager::Get().FindConsoleVariable(TEXT("r.ReflectionMethod"));
    IConsoleVariable* ForceLumenSceneVar = IConsoleManager::Get().FindConsoleVariable(TEXT("r.Lumen.ForceLumenScene"));

    if (GiMethodVar && ReflectionMethodVar)
    { 
        int32 GiMethod = GiMethodVar->GetInt();
        int32 ReflectionMethod = ReflectionMethodVar->GetInt();

        // In UE 5.8, if GI is 0 (None) and Reflection is 1 (Lumen), reflections fall back to SSR.
        if (GiMethod == 0 && ReflectionMethod == 1)
        { 
            UE_LOG(LogTemp, Warning, TEXT("[LumenChecker] Warning: Lumen GI is disabled, but Lumen Reflections are active. UE 5.8 forces SSR fallback in this state."));

            if (ForceLumenSceneVar)
            {
                // Mitigate the fallback by forcing the Lumen Scene to update
                ForceLumenSceneVar->Set(1, ECVF_SetByCode);
                UE_LOG(LogTemp, Log, TEXT("[LumenChecker] Applied CVar workaround: r.Lumen.ForceLumenScene set to 1."));
            }
        }
    }
}

Diese Component kann an Ihren primären Game State oder Initialisierungs-Actor angehängt werden. Wenn das Spiel gestartet wird, prüft das Script, ob die Project Settings mit der fehlerhaften Konfiguration übereinstimmen. Ist dies der Fall, setzt es r.Lumen.ForceLumenScene programmgesteuert auf 1. Dies weist den Renderer an, den Surface Cache beizubehalten, obwohl das Global-Illumination-System diesen nicht anfordert, wodurch Ihre Reflections voll funktionsfähig bleiben.

Manuelle Workarounds und Engine-Source-Fixes

Für Entwickler, die keine C++-Laufzeit-Scripts zur Änderung von Konsolenvariablen ausführen möchten, gibt es zwei primäre Methoden, um den Fallback zu beheben: das direkte Modifizieren von Konfigurationsdateien oder das Patchen des Source Codes der Engine. Beide Ansätze sind valide, je nachdem, ob Sie die Launcher-Version der Unreal Engine oder einen Custom Source Build verwenden.

Workaround 1: Konfigurations-Overrides über Konsolenvariablen

Wenn Sie die Epic Games Launcher-Version der Unreal Engine 5.8 verwenden, können Sie den Engine-Code nicht direkt modifizieren. Stattdessen müssen Sie die Engine mithilfe von Konfigurationsdateien zwingen, die Lumen Scene aktiv zu halten. Öffnen Sie Ihr Projektverzeichnis und navigieren Sie zu Config/DefaultEngine.ini.

Fügen Sie unter der Kategorie [/Script/Engine.RendererSettings] folgende Zeilen hinzu:

r.DynamicGlobalIlluminationMethod=0
r.ReflectionMethod=1
r.Lumen.ForceLumenScene=1.Lumen.Reflections.AllowWithoutGI=1

Das Setzen von r.Lumen.ForceLumenScene auf 1 überschreibt den Optimierungspass der Rendering Pipeline, der die Lumen Scene als ungenutzt markiert, wenn GI deaktiviert ist. Dies zwingt die Engine, den erforderlichen GPU-Speicher und die Compute Passes bereitzustellen, um die Surface Cache Cards zu erstellen und zu aktualisieren. Dies stellt zwar die Reflections wieder her, erhöht jedoch die Kosten für den GPU Base Pass im Vergleich zu UE 5.7 geringfügig, da die Engine diese Updates nun ohne den Optimierungskontext durchführt, den sie in früheren Releases hatte.

Workaround 2: Engine Source Code modifizieren

Wenn Sie die Unreal Engine 5.8 aus dem Source Code kompilieren, können Sie den Bug direkt an der Quelle patchen. Die Ursache dieser Regression liegt in FDeferredShadingSceneRenderer::InitLumenScene, zu finden in den privaten Rendering-Dateien der Engine (Private/Lumen/LumenScene.cpp). In UE 5.8 wurden die Abfragen, die bestimmen, ob die Lumen Scene benötigt wird, optimiert, ließen dabei jedoch versehentlich die Überprüfung der Reflection-Settings aus.

Um dies zu beheben, öffnen Sie LumenScene.cpp und suchen Sie die Stelle, an der bNeedLumenScene definiert ist. Der fehlerhafte Code und sein korrigiertes Gegenstück sehen wie folgt aus:

- // Faulty check in UE 5.8 that ignores reflection settings
- const bool bNeedLumenScene = Scene->DynamicGIProjectSetting == EEDynamicGlobalIlluminationMethod::Lumen;
+ // Corrected check restoring reflections-only compatibility
+ const bool bNeedLumenScene = Scene->DynamicGIProjectSetting == EEDynamicGlobalIlluminationMethod::Lumen || Scene->ReflectionProjectSetting == EEReflectionMethod::Lumen;

Bauen Sie Ihre Engine nach der Änderung dieser Zeile neu. Diese Anpassung stellt genau die Pipeline-Logik aus UE 5.7 wieder her und ermöglicht es dem Renderer, die Lumen Scene zu initialisieren, wann immer Lumen Reflections ausgewählt sind – unabhängig von der Global Illumination-Methode. Dies ist der sauberste Weg, um das Problem zu lösen, da CVar-Overrides vermieden werden, die Teammitglieder verwirren oder Ihre Konfigurationsdateien unübersichtlich machen können.

Die Folgeauswirkungen: Client-Frame-Spikes und Multiplayer-Desync

Obwohl Graphics Bugs oft als isolierte visuelle Probleme behandelt werden, können ihre Folgeeffekte sich auf Ihre gesamte Game Architecture auswirken. Wenn Entwickler auf diesen Bug stoßen, besteht ihre erste Reaktion oft darin, Lumen GI einfach wieder einzuschalten, um die Reflections wiederherzustellen. Das Hinzufügen von 4 ms bis 6 ms GPU-Workload auf einem Client kann jedoch zu schweren Einbrüchen der Framerate führen, was wiederum Multiplayer-Desync-Probleme verursachen kann.

In Multiplayer-Spielen sind die Physiksimulation und die Verarbeitung der Spielereingaben eng an die Frame-Tick-Rate des Clients gekoppelt. Wenn ein Client einen plötzlichen Rendering-Stall erfährt – beispielsweise weil ein Reflection Pass die GPU während einer Kameradrehung überlastet –, steigt die Simulations-Frame-Time des Clients sprunghaft an. Diese Verzögerung kann dazu führen, dass Netzwerkpakete verspätet gesendet oder in der falschen Reihenfolge verarbeitet werden, was zu sichtbarem Lag und Serverkorrekturen führt. Um zu verhindern, dass diese Performance Spikes das Multiplayer-Gefühl Ihres Spiels beeinträchtigen, lesen Sie unseren Leitfaden darüber, wie Sie Location Desync von Spielern in UEFN und Unreal Engine Multiplayer beheben.

Darüber hinaus verdeutlichen diese Rendering-Probleme, wie wichtig es ist, clientseitige Grafikeinstellungen von der Serverlogik zu trennen. Headless Dedicated Server sollten niemals Rendering Pipelines, Materialien oder Post-Processing-Volumes kompilieren oder laden. Wenn Sie Ihr Server-Executable kompilieren und diese Assets nicht strippen, führt dies zu einem aufgeblähten Memory Footprint und langsamen Startzeiten, was die Antwortzeiten des Matchmakers verschlechtern kann. Eine detaillierte Anleitung zur Optimierung Ihrer Server-Builds finden Sie in unserem Artikel darüber, wie Sie das Dedicated Server Asset Stripping in Unreal Engine meistern.

Behebung des Konfigurations-Overheads mit horizOn

Das Beheben von Rendering-Bugs wie dem unreal engine 5.8 lumen reflections bug auf Ihrem lokalen Rechner ist nur die halbe Miete. Sobald Ihr Spiel live ist, müssen Sie Grafikprofile, Console-Variable-Overrides und Engine-Einstellungen über Tausende verschiedener PC-Konfigurationen der Clients hinweg verwalten. Das Hardcoden von CVars in Ihren lokalen Konfigurationen bedeutet, dass Sie bei einer weiteren Rendering-Regression in einem kleineren Engine-Update einen völlig neuen Patch kompilieren, packen und an Ihre Spieler verteilen müssen.

Dieser Overhead beim Konfigurationsmanagement ist der Punkt, an dem horizOn zu einem unschätzbaren Tool für Game Developer wird. Anstatt Sie zu zwingen, umfangreiche Updates des Game-Clients auszuliefern, um Rendering-Probleme zu beheben, ermöglicht es Ihnen unsere Plattform, Ihre Spieleinstellungen dynamisch von einem zentralen Backend aus zu verwalten. Mit dem Remote-Konfigurationsdienst von horizOn können Sie Zielprofile für verschiedene Hardwarekonfigurationen definieren und diese in Echtzeit aktualisieren.

Wenn beispielsweise ein Spieler Ihr Spiel startet, kann der Client das Backend abfragen und Details zur erkannten GPU und Engine-Version übergeben. Der Server wertet diese Daten anhand Ihrer aktuellen Konfigurationsregeln aus und gibt die optimierte CVar-Liste zurück. Wenn der Spieler UE 5.8 auf einer Mid-Range-Karte ausführt, sendet das Backend dynamisch r.Lumen.ForceLumenScene=1 zurück. Dadurch funktionieren die Reflections weiterhin einwandfrei, ohne dass Sie komplexe clientseitige Profile schreiben und pflegen oder Notfall-Patches veröffentlichen müssen.

Best Practices für die Konfiguration von Lumen in der Production

Wenn Sie ein Spiel ausliefern, das Lumen Reflections oder Global Illumination nutzt, verhindert ein strukturierter QA-Prozess, dass visuelle Regressionen Ihre Spieler erreichen. Nachfolgend finden Sie vier Best Practices, die Sie in Ihre Development Pipeline integrieren können:

  1. GBuffer-Prüfungen automatisieren: Erstellen Sie automatisierte Tests in Ihrer CI/CD-Pipeline, die Viewport-Bilder unter Verwendung spezifischer Rendering-Flags erfassen. Nutzen Sie diese Tests, um zu verifizieren, dass der Reflection Channel valide Raytracing-Daten enthält, anstatt auf leeren Screen Space zurückzufallen.
  2. GI und Reflections während der Optimierung entkoppeln: Testen Sie Ihr Spiel mit deaktiviertem GI und aktivierten Lumen Reflections. Dies ermöglicht es Ihnen, die Performance-Gewinne von Baked Lighting-Lösungen auf schwächeren Systemen zu bewerten und gleichzeitig glänzende Specular Highlights zu erhalten.
  3. CVar-Validierungen beim Start ausführen: Implementieren Sie Laufzeit-Validierungsscripts, die den Status von Konsolenvariablen wie r.DynamicGlobalIlluminationMethod und r.ReflectionMethod während der initialen Ladephase des Spiels überprüfen, um sicherzustellen, dass sie keine Fallbacks auslösen.
  4. Dynamische Client-Profile nutzen: Vermeiden Sie es, Grafik-Presets in Ihren Projekt-Binaries fest zu codieren. Nutzen Sie dynamische Konfigurations-Tools, um Render-Variablen on-the-fly anzupassen, sodass Sie sofort auf Engine-Regressionen reagieren können, ohne ein vollständiges Client-Update zu veröffentlichen.

Sind Sie bereit, Ihr Konfigurationsmanagement für Spiele zu vereinfachen und stabile Dedicated Server bereitzustellen? Registrieren Sie sich noch heute bei horizOn oder lesen Sie unsere Entwicklerdokumentation, um zu erfahren, wie Sie dynamische Einstellungsupdates in Ihre Unreal Engine-Pipeline integrieren.


Quelle: UE 5.8 Release - Lumen Reflections not working unless Lumen GI enabled