MeshPartition: mesh-less FarFieldMeshComponent drags CompiledSection bounds to the world origin

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

  1. Enable the MeshPartition plugin. Create a World Partition map with streaming enabled.
  2. 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.
  3. 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.
  4. Build Mesh Partition.
  5. 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.