Engine Version: UE5.7.4, Windows target. Lumen, Nanite, VSM enabled.
When Global Illumination scalability setting is being changed from High or Epic to Medium or Low, Lumen gets partially (or fully?) disabled via r.Lumen.DiffuseIndirect.Allow=0 (BaseScalability.ini). The issue here is, that FLumenSceneData::RemoveAllMeshCards() is being called every frame, but it actually doesn’t Remove the MeshCards. The function is being called every frame as long r.Lumen.DiffuseIndirect.Allow is set to 0. In our case this causes durations of about 10-40ms for RemoveAllCards on the RenderThread (big open world).
To make sure that this issue doesn’t appear in our projecte only, I did also some Unreal Insights profiles with Lyra:
Lyra PIE session started with Low Scalability settings. RemoveAllCards duration on every frame with 500ns to 2µs (no LumenScene yet created):
After switching to Epic Scalability setting - no more RemoveAllCards calls on every frame:
When switching to Low Scalability again, we have one spike with 2.4ms where it seems to actually clears the surface cache:
The following frames will still have RemoveAllCards calls, but now with durations 16-35µs:
Remember: this is in Lyra on Expanse Level with a small lumen scene. In our project the RemoveAllCards duration is 10-40ms every frame, which leads to FPS drop from over 200 to around 50.
Example frame from our project:
So within FLumenSceneData::RemoveAllMeshCards() function FLumenSceneData::RemoveMeshCards(int32 PrimitiveGroupIndex, bool bUpdateCullingInfo) gets called for every PrimitiveGroup (in our case up to 3.6 million). Inside that function it never enters the if-block here, as MeshCardsIndex is always -1:
if (PrimitiveGroup.MeshCardsIndex >= 0)
For me it looks like an engine bug or does someone know a workaround for that? For lower end hardware we need the low scalability settings to work as intended in BaseScalability.ini.
Thanks in advance.




