Description

Summary

The FWaterBodyInfoMeshSceneProxy constructor (WaterBodyInfoMeshComponent.cpp) calls UWaterBodyComponent::MarkOwningWaterZoneForRebuild(). The proxy is created from CreateRenderState_Concurrent / AddPrimitive, which can run in parallel with other components of the same actor and level. This happens through:

  • FRegisterComponentContext::Process, which runs a ParallelFor over the batched primitives;
  • DoDeferredRenderUpdates_Concurrent;
  • async level registration.

As a result:

  • MarkOwningWaterZoneForRebuild reads Bounds.GetBox() on the parent UWaterBodyComponent while another worker may be writing it via UpdateBounds() in that component's CreateRenderState_Concurrent.
  • Multiple UWaterBodyInfoMeshComponent}}s call {{AWaterZone::MarkForRebuild() on the same zone concurrently, with no synchronization.
  • A torn or stale bounds value can make AWaterZone::MarkForRebuild reject the update region as not intersecting the zone. The water info texture is then not rebuilt after the proxy is recreated, and water can disappear.

The call was introduced with [Link Removed] (triggering a water info rebuild during scene proxy creation). It is still present in UE5 Main and UE6 Main.

Workaround (provided by licensee)

Wrap the MarkOwningWaterZoneForRebuild call in ExecuteOnGameThread. This can add one frame of lag to the WaterInfo texture update.

A cleaner fix may be to queue the rebuild request in a thread-safe way, or to trigger it from a game-thread hook on the component.

Steps to Reproduce
  1. Create a World Partition map.
  2. Place multiple AWaterZone actors that are spatially loaded, each containing multiple AWaterBody actors.
  3. Stream the zones in and out repeatedly (with multithreaded render state creation enabled, which is the default).

Result: sporadically, the water info texture is not rebuilt for a zone and water disappears. Bounds on UWaterBodyComponent are read concurrently with UpdateBounds in MarkOwningWaterZoneForRebuild.

Expected: water info is rebuilt reliably; no concurrent access to water body bounds or water zone state from scene proxy creation.

Have Comments or More Details?

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

0
Login to Vote

Unresolved
ComponentUE - Graphics Tools - Terrain - Water
Affects Versions5.7.4
Target Fix5.8.5
CreatedOct 14, 2026
UpdatedOct 19, 2026
View Jira Issue