From licensee:

The streaming bounds of an instantiated level instances are incorrect in the world partition editor.


When the bounds are computed for a level instance during FLevelInstanceActorDesc::RegisterContainerInstance, it is based on the actors in the ContainerInstance.

The RunTimeBounds are retrieved for each individual actor in the function


to compute the full bound of the level instance.


However, if the level instance has a non-trivial transform (which all instantiated level instances are likely to have), the actor bounds are _not recomputed relative to this transform._


Instead, the bounds are later simply transformed by the LevelInstanceTransform in the function FLevelInstanceActorDesc::UpdateBounds().

This will lead to incorrect bounds in general.


Thus, if the level instance is instantiated in a level with an arbitrary transform, the bounds will not match the correct bounds of the level instance!

On the figure, the layout of a level instance is shown (left) and its bounds in the world partition editor with two different transforms of an instantiated instance.

When the transform is identity, the bounds match (middle), when it is rotated 45 degrees they differ (right).


For larger level instances, the bounds are quite important when selecting loaded regions for level designers. If the level instance bounds can not be relative to the transform, it would be preferable to load selected regions based on the StreamingBounds as shown in the World Partition Editor on selection.

Steps to Reproduce
  1. Create a WP level.
  2. Add a couple of cubes and create a level instance from them.
  3. Change the rotation on the z-axis to 45.
  4. Observe that the bounds for non-trivial transforms (scale, rotation, translation) do not match the actor content of the level instance.

Have Comments or More Details?

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

Login to Vote

CreatedMar 5, 2024
UpdatedMar 16, 2024
View Jira Issue