Lumen and Ray Traced Ambient Occlusion

Hi, I noticed that when Lumen is active, the Ambient Occlusion buffer goes completely white. When I switch back to Screen Space, Ray Traced, or no GI, AO returns. Is this a known limitation of Lumen, which disables AO, or is there some console command I can use to get it back?

Lumen Global Illumination replaces Screen Space Global Illumination (SSGI) and Distance Field Ambient Occlusion (DFAO). Lumen Reflections replace Unreal Engine 4’s Screen Space Reflections.

Thanks for the link, but that doesn’t seem to answer my question. It replaces DFAO, but what about Ray Traced AO? Raytraced reflections, shadows, and refraction can be active concurrently with Lumen, so why does ray traced AO vanish?

Hey jrgalim.

Did you find a solution to your problem? Im running in some ambient occlusion problems myself but cant find anything regarding lumen and AO.


Unfortunately I did not, and now that 4.27 is out, I switched to using the pathtracer for my visualization needs.

There is no ambient occlusion required or needed when using Lumen if you have Lumen enabled then all of that is disabled.

Unfortunately @NavJack27 is right.

If you’re just trying to get “lighting” of course it’s true you don’t need AO, why would you, you’ve got realtime pathtracing (well, a good approximation of it). But if you’re looking for more fine grained and artistic control you’re out of luck for now. In the future we could hope to see variables like “darken corners” or “colorbleed” as sliders or something to get more stylized effects, but I doubt any of that is an immediate priority.

well furthermore it is already IN the lumen. and it is quite fine grained detail as is. i mean, adjusting the length and intensity of the AO before was just artistic and not physically accurate. i’m thinking lumen is leaning on getting automagically physically accurate first and then once things are more final and set, the artistic tuning knobs can come.

I have played with the AO controls while in the AO buffer visualization but I could not get any detail to show up. So I am serieus doubting it has been implemented completly / correctly.

For now I baked the AO maps in my DCC which work good enough. Hopefully there will be an update of the UE5 engine soon.

No its definitely there and its working in lumen for sure as NavJack27 said. You can easily see AO in scenes when lumen is turned on, its just not in the buffer visualization anymore because that is only for screen space. Lumen AO is way more physically accurate than the screen space effect so for that reason, its not going to show up in places where it wouldn’t make sense for it to be.

That sucks. I brought a C4D animation in and the Lumen lighting is amazing, and renders in 43 seconds as opposed to 3 hours in C4D. But the client wanted to see more AO and there’s no way of rendering out a separate pass for it.

I suggest using an AO map in combination with a Bent Normal map. These work wonders for me

I am also facing limitations in UE5 with Lumen.
The solutions provided here work well for AO within the same object or for static meshes.

But when working with an animation I need the AO to be interactive and not baked.

The only solution I have found is rerendering everything with RayTracing and extract a AO Pass. Then composite in Post.

I cannot do this in Lumen since the Pass renders the Gbuffer which is not availeable with Lumen.

Having the same control over AO as we have with RTX or Other DCC is a must for an animation workflow imo and would love to see it implemented.

yes, i wish there was an art directable way of controlling AO in lumen, even though its not physically accurate.

1 Like

Guys maybe you can try disabling “Allow Static Lighting” in the Project Setting. The documentation says this is to create space in the GBuffer for AO.

Source: Lumen Global Illumination and Reflections in Unreal Engine | Unreal Engine Documentation

I am trying to render cinematics and would like the AO to be dynamic and appear in the interactions between SKM and other meshes.
With these maps it deffinitly improves the AO of a model but is static and doesn’t account for interactions. Or am I reading this wrong?

Hey, I had the same problem, and if using a custom engine build, you can easily “fix” it.

  1. In file Engine\Source\Runtime\Renderer\Private\IndirectLightRendering.cpp (line 413) replase : “else if (DiffuseIndirectMethod != EDiffuseIndirectMethod::Lumen)” to “else”. It adds AO render pass with Lumen (GBufferAO is not white now).
  2. In shader file Engine\Shaders\Private\DiffuseIndirectComposite.usf, before “if (GBuffer.ShadingModelID == SHADINGMODELID_HAIR)” u need add something like this : DiffuseIndirectAO = FinalAmbientOcclusion;
  3. After building sources and compiling shader, done…

hey there! How did you render so you can extract the AO pass?

Hey, thanks! Adding another render pass would help a lot but I am not used do messing with code.

So I need to build a different engine and alter lines of code?
Can I do it in the official release?

Is there a way to do this without having to mess with code?