Summary
In an Open World level (New Level > Open World) containing multiple LandscapeStreamingProxy actors, a Chaos physical material update notification causes temporary CPU frame drops when viewport Collision Visualization (Show > Collision or Player Collision) is enabled. In LandscapeModule.cpp, FLandscapeModule listens to FPhysicalMaterialManager::OnMaterialUpdated. When triggered, OnUpdatePhysicalMaterial unconditionally iterates over all loaded ULandscapeHeightfieldCollisionComponents via TObjectRange and calls MarkRenderStateDirty(), without checking if the component actually references the updated material. When Collision Visualization is active, SendAllEndOfFrameUpdates → DeferredRenderUpdates_GameThread forces end-of-frame debug scene proxy rebuilds on the CPU across hundreds of components. Profiling via Unreal Insights confirms the bottleneck is purely CPU/GameThread-bound (tested on Intel Core i7-14700, 20 Cores / 28 Threads), while GPU load remains completely unaffected.
What Type of Bug are you experiencing?
World Creation Tools
Steps to Reproduce
- In UE 5.7, create a level using the New Level > Open World template (generating multiple LandscapeStreamingProxy actors / 400+ collision components).
- Enable Collision Visualization in an Editor Viewport (Show > Collision or Player Collision view mode).
- Enter PIE and trigger an event that fires a Chaos physical material update (FPhysicalMaterialManager::OnMaterialUpdated).
- Inspect Unreal Insights: observe a CPU GameThread stall under DeferredRenderUpdates_GameThread.
- Disable Collision Visualization or remove Landscape streaming proxies: observe that the CPU frame drop disappears or scales down proportionally.
Expected Result
MarkRenderStateDirty() should only be called on LandscapeHeightfieldCollisionComponents that actually reference the updated physical material (e.g., checked against UsedChaosMaterials), preventing unnecessary CPU frame drops when Collision Visualization is active.
Observed Result
All ~424 loaded Landscape collision components are marked dirty across two consecutive update waves, causing ~200–237ms and ~120–150ms CPU GameThread stalls during debug proxy recreation. The frame drop disappears completely when Collision Visualization is turned off.
Affects Versions
5.7
Platform(s)
Windows
Upload an image

Additional Notes
I reviewed related issue UE-169387 (Landscape collision scene proxy allocation overhead). While both involve debug scene proxy costs on large Landscapes, this appears to be a distinct issue: an unrelated Chaos physical material update triggers an unconditional global MarkRenderStateDirty() on all loaded Landscape collision components without filtering by used materials.