Determine when the game is falling back to not using Lumen GI

Hi there!

Our game has Lumen with Software Ray Tracing, and we are using Lumen GI to do the heavy lifting of the final visual result.
We are having an issue with some of our users that report that our game looks as if the lights were turned off. These users are all integrated graphics users, and we’ve validated on our own machines that integrated graphics result in Lumen GI not working. We’ve found that if we compare our levels when Lumen GI stops working AND overriding Global Illumination in a Post Process Volume with “None”, the results are identical. So, it seems that Unreal is falling back to turning off GI whenever an iGPU is used. We are trying show the user a prompt if this is the case, so the user knows what to expect if they open the game with an unsupported GPU. However, even after combing through the engine’s code, I haven’t been able to find a clear sign of when this fallback is happening, to be able to detect it a the beginning of the game.

Are there any C++ accessible signs to tell when this is the case? Is there something I’m missing here?

Bump!

These global variables give insight into whether the current rendering hardware supports features like Ray Tracing or Lumen.

bool bIsRayTracingSupported = GRHISupportsRayTracing;
bool bIsLumenSupported = GRHISupportsLumen;

When Lumen falls back due to an unsupported GPU, the engine likely switches the global illumination (GI) to a fallback mode. You can check the current GI method in use within a post-process volume or global settings by querying the Global Illumination Method set in the post-process chain.

FPostProcessSettings PostProcessSettings = GetWorld()->GetGameViewport()->EngineShowFlags;
if (PostProcessSettings.bOverride_GlobalIlluminationMethod && 
    PostProcessSettings.GlobalIlluminationMethod == EGlobalIlluminationMethod::None)
{
    // GI is turned off, potentially due to a fallback on iGPU
    ShowPromptToUser();
}

You could also detect when an integrated GPU is being used by checking the GPU vendor information. For instance, if the GPU brand contains “Intel”, which is commonly associated with integrated graphics, you can trigger a prompt.

FString GPUName = FPlatformMisc::GetPrimaryGPUBrand();
if (GPUName.Contains("Intel")) {
    ShowPromptToUser();
}

It makes sense to try including all of these methods in the detection function.

can you check the feature level of the hardware? lumen runs in dx11 on my lil rig. this gotta be an outdated af igpu that can’t handle it. maybe just discard it.