Summary
MeshPartition: an empty FarFieldMeshComponent drags every CompiledSection’s World Partition streaming bounds to the world origin, breaking terrain streaming and HLOD cell placement
ENGINE VERSION
5.8 (binary install). Plugin: MeshPartition (Experimental).
PLATFORM
Windows / Editor. Not platform-specific — the fault is in editor-time streaming bounds.
REPRO RATE
100% — reproduces with the plugin’s own default transformer pipelines.
What Type of Bug are you experiencing?
World Creation Tools
Steps to Reproduce
- Enable the MeshPartition plugin. Create a World Partition map with streaming enabled.
- Create a Mesh Partition using a UMeshPartitionDefinition whose build variants use the stock pipelines (TP_DefaultHighEndPlatformRenderData etc.), or any pipeline that does NOT include an FFarFieldTransformer. None of the four shipped TP_Default* pipelines include one.
- To make the damage visible, set bSplitSectionsToMatchWorldPartitionRuntimeGrid = true on the build variant and add an FWPActorPropertiesTransformer with RuntimeGrid set, so the terrain splits into many sections instead of one.
- Build Mesh Partition.
- Run wp.Editor.DumpStreamingGenerationLog and inspect the CompiledSection entries.
Expected Result
Each ACompiledSection’s RuntimeBounds equal its own tile — for a 512 m runtime grid, roughly 512 m across, positioned where the tile is.
Observed Result
Each section’s RuntimeBounds run from the WORLD ORIGIN out to its tile’s far corner. The
near corner is (0,0) on both X and Y for every section that does not straddle the origin.
Measured on a 16 km map with 1,224 HighEnd sections on a 512 m grid:
- 1,088 of 1,224 sections (88.9%) had a bounds corner at exactly X=0 AND Y=0.
- Median section width 4,609 m against an actual tile size of 515.8 m.
- Live confirmation: a 2 m query box at the world origin intersects 604 of the 604
currently-loaded sections. A box at the far side of the map intersects 54. A box off
the terrain intersects 0. - Consequences: ~450 sections stayed resident with the camera 5 km outside the terrain
entirely, and 604 of 1,224 were resident at any point on the map. Terrain HLOD collapsed
to 20 actors clustered at grid levels L0..L4, X in {-1,0}, Y in {-1,0} near the origin,
instead of tiling the map.
Affects Versions
5.8
Platform(s)
Windows
Additional Notes
WORKAROUND
Add an FFarFieldTransformer to the build variant’s TransformerPipeline so the component
receives a real mesh. Verified: after adding one (edge length 1000) and rebuilding, sections
with origin-anchored RuntimeBounds went from 1,088/1,224 to 0/1,224, median section width
from 4,609 m to 515.8 m, resident sections from 604 to 356 on-map and ~450 to 261 off-map,
and terrain HLOD from 20 degenerate actors to 1,282 tiling the map.
This is a workaround rather than a fix: it requires generating far-field geometry you may not
want, and it does not help the editor-side bounds. AActor::GetStreamingBounds computes its
editor bounds with bForEditor=true, which also walks non-primitive components, so the plain
USceneComponent root at the actor origin contributes its own zero-extent box there. After the
workaround, EditorBounds remained 88.9% origin-anchored while RuntimeBounds were fully fixed.
That second path is arguably the same bug and would need the same treatment.