Low performance

Hello,

I’m reaching out regarding a persistent performance issue I’ve been facing in my Unreal Engine 5.6.1 project.

My project is a large outdoor environment with dense foliage (trees, grass, mountains, etc.). Despite multiple optimization attempts, I’m getting only 30–40 FPS, even on a RTX 4070 Ti, Ryzen 7 5800X (8-core), and 64 GB RAM.

Here are the key points I’ve observed:

1. Shadows Severely Impact Performance

  • When shadows are active, the GPU time sits around 36 ms (≈27 FPS).
  • Disabling shadows increases FPS to 70+, so the bottleneck is clearly shadow rendering.
  • According to the GPU Visualizer (stat gpu), the Shadow Depths pass alone takes about 7.5 ms, and BasePass about 6.7 ms.
  • I’m using Lumen for GI and reflections, with Virtual Shadow Maps (VSM) enabled.
  • Reducing cascades or light distance helps a bit, but the performance drop remains severe, even in medium-scale scenes.

2. Nanite and Lumen Are Enabled

  • All meshes use Nanite.
  • Lighting is configured following the official Unreal documentation and tutorials (Directional Light + Sky Light + Skylight capture + Atmospheric Light + Volumetric Clouds).
  • Despite Nanite and Lumen’s supposed optimizations, frame rate does not improve significantly.

3. GPU Is Under Heavy Load, CPU Is Fine

  • Using stat unit, GPU time dominates the frame (CPU threads are well below 10 ms).
  • The issue reproduces both in the Editor and in packaged builds.

4. Dlss Stopped Working

  • In earlier versions of this same project, Dlss, project Now I have a lot of aliasing and the output log gives this message:

LogStreamlineAPI: Warning: [15-17-37][streamline][warn][tid:73724][1s:567ms:748us]dlss_gEntry.cpp:302[updateEmbeddedJSON] Disabling DLSS-G since it is not supported on current hardware

5. Optimization Attempts Already Tried

  • Enabled Nanite for all static meshes.
  • Reduced shadow cascades and shadow distance.
  • Tested both Virtual Shadow Maps and Cascaded Shadow Maps.
  • Adjusted Lumen settings (r.Lumen.Reflections, r.Lumen.ScreenProbeGather.*).
  • None of these changes raise FPS beyond 40 with shadows enabled.

Request

Could you please review this setup and advise:

  1. Whether this level of shadow performance is expected for Nanite + Lumen in foliage-heavy scenes.
  2. If there are specific project settings, console variables, or engine limitations I should adjust to improve shadow rendering performance.
  3. Why Dlss stopped working and how to fix it.

I can provide the project’s GPU Visualizer screenshot, full stat gpu log, or packaged build if needed.

Thank you very much for your time and help.

Steps to Reproduce

Hi there,

First off, are you using Nanite for your foliage? And are you using masked foliage with leaf cards, or opaque mesh foliage, where every leaf is geometry? You’re probably going to get better performance out of using geometry based foliage with Nanite, as it avoids the more expensive programmable raster path that is required for masked materials (even in the shadow pass). You might find these two technical blog posts (here and here) from Epic useful. They discus bringing virtual shadow maps and Nanite to Fortnite. Both articles have sections for how they optimized the rendering for Trees and Grass. Some key takeaways are to use opaque geometry based foliage, and use the World Position Offset Disable Distance setting on Foliage Type assets to cull WPO at a distance. Culling WPO at a distance is important for VSMs, as WPO on trees and foliage will constantly invalidate the VSM cache, forcing the VSMs to re-render every frame.

[Image Removed]Another takeaway is that they used screen space contact shadows for the grass, instead of VSMs. This allowed both better artistic control of the grass shadow intensity, and also increases performance, since this is a much simpler screen space technique, and doesn’t require re-rendering VSMs invalidated by moving grass every frame.

I’d recommend having a look at the Virtual Shadow Map -> Cached Page view mode to if your foliage is causing a lot of VSM invalidations, then try to optimize that as much as possible.

Let me know if you have any more questions, or require further assistance with this.

Regards,

Lance Chaney