Description

When UGameViewportClient::bDisableWorldRendering is true and the scene is rendered only through manually triggered scene captures, FDistanceFieldSceneData::PrimitiveModifiedBounds is never reset and grows without bound while primitives move (reported ~500 MB/h depending on the scene).

Cause: the per-frame renderer cleanup CleanupViewFamilies_RenderThread (SceneRendering.cpp) is only queued from FRendererModule::BeginRenderingViewFamilies. With world rendering disabled, UGameViewportClient::Draw only calls PerFrameCleanupIfSkipRenderer, and scene captures (USceneCaptureComponent2D/Cube::CaptureScene -> FScene::UpdateSceneCaptureContents -> FSceneRenderBuilder::Execute) never run that cleanup. ResetAndShrinkModifiedBounds is only called from it, so the scene-level array is never reset. The other work in that cleanup (ray tracing scene/SBT EndFrame, IPersistentViewUniformBufferExtension::EndFrame, hair strands end-of-frame, PrevFrameViewInfo update) is also skipped on this path.

Related to [Link Removed], which covers the per-view-state ClipmapViewState.Cache[].PrimitiveModifiedBounds growth caused by the same setup (FrameNumber not incremented). Fixing [Link Removed] alone does not reset the scene-level array.

Workaround: call ResetAndShrinkModifiedBounds on each Scene->DistanceFieldSceneData.PrimitiveModifiedBounds[] entry once per frame after captures (requires a local engine change), or leave bDisableWorldRendering false.

Present in 5.8 and in current UE5/Main and UE6/Main code.

Steps to Reproduce
  1. Create a UGameViewportClient subclass that overrides Draw() and sets bDisableWorldRendering = true before calling Super::Draw().
  2. Set it as the project's Game Viewport Client class.
  3. Create an actor with one or more SceneCaptureComponent2D (bCaptureEveryFrame = false) and call CaptureScene() on them in Tick().
  4. Open a non-empty map with distance fields enabled and moving primitives, and place the actor.
  5. Run the game and monitor memory (e.g. LLM / memreport).

Result: memory grows continuously; Scene->DistanceFieldSceneData.PrimitiveModifiedBounds is never reset.

Expected: PrimitiveModifiedBounds is reset/shrunk every frame as it is when the main view renders.

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-404496 in the post.

0
Login to Vote

Unresolved
ComponentUE - Rendering - Features
Affects Versions5.8
CreatedOct 20, 2026
UpdatedOct 21, 2026
View Jira Issue