Empty ParticleSystemComponent breaks bounds generated on owning actor

Hello.

I have an issue where leaving ParticleSystemComponent with empty particle template, causes that the bounds of an actor are totally messed up. I’ve also noticed the same problem with couple BSP actors, but I wasn’t able to come up with reliable repro for that case.

To visualize the issue I’m using ALevelBounds actor. Besides ALevelBounds actor, on the level there are also two instances of the same, custom blueprint (deriving from actor), that has at least 2 components where one of them is mentioned ParticleSystemComponent.

Here’s the image of how it looks when the particle template is set:

And here is the image of how it looks when the particle template is empty:

Additionally, it causes that it’s possible to select these actors by dragging a selection through 0/0/0 location:

Also, this issue shows up when a ParticleSystemComponent has a particles, that aren’t looped and finished their ‘animation’ in viewport.

From what I’ve seen in code, the issue may be with one of these:

  • FBoxSphereBounds::GetBox() - function doesn’t check if its Origin and BoxExtent will provide valid FBox
  • FBox( const FVector& InMin, const FVector& InMax ) - constructor assumes that created FBox is always valid (even if it is a box with origin in 0/0/0 location, of size 0/0/0) and thus FBox += operator adds it with no problems.

Tested and reproduced this issue on customized 4.12.5 and vanilla 4.14 versions of the engine.

Hey Atheist91-

Can you provide additional details about how you’re setting up your project? How are you using the LevelBound actor? Are you screenshots of the viewport or the blueprint? If you’re reproduced this in a clean project, can you provide the reproduction steps to help me investigate the issue on my end?

Hey there.

How are you using the LevelBound actor?

Well, I’m not really sure what you mean. I just put it on the level and select it to see calculated bounds after I move an actor on the level (to refresh bounds).

Are you screenshots of the viewport or the blueprint?

Screenshots are taken from the level viewport in ‘top’ view.

As for the repro steps, here they are:

  1. Launch UE4.14, create new project (blueprint, blank, desktop, max quality, no starter content)
  2. Click anywhere in World Outliner → ctrl + a → delete → yes all.
  3. Go to Modes window. In Search filter type “level” and place Level Bounds on the level.
  4. In Content Browser create new blueprint deriving from Actor.
  5. Open created blueprint.
  6. In Components section add new Particle System. It’ll be attached to DefaultSceneRoot component and it’s fine. Recompile component and save it.
  7. Go back to level viewport switch to Orthographic Top view. Pan the viewport so the origin of the world is in bottom left corner of the screen (intersection of the red and green line).
  8. Place instance of created blueprint on the level so it’s not too close to the origin (e.g: (X=500.000000,Y=-500.000000,Z=0.000000) ).
  9. In World Outliner select instance of Level Bounds actor to see calculated bounds in viewport.

To see properly calculated bounds do these additional steps:

  1. Open the blueprint you’ve created in steps 4-6.
  2. Select created ParticleSystem component in Components section.
  3. Change template used by the above ParticleSystemComponent to particles included in the engine (TutorialParticleSystem).
  4. Recompile and save blueprint.
  5. Switch back to level viewport.
  6. Select instance of the blueprint on the level and move it somewhere further from the world’s origin.
  7. Select instance of Level Bounds actor again to see updated bounds.

Hey Atheist91-

I think I understand what is going on now. What you’re seeing appears to be expected behavior. The tooltip for LevelBounds says that it “updates automatically based on actors transformation changes or holds fixed user defined bounding box.” If you have the level bounds selected and uncheck the “Auto Update Bounds” checkbox, adding the blueprint should keep the bounds in their original location.

Cheers

Yeah… Good to know that such feature exist, however it’s not the main problem here. I’m talking about ALevelBounds actor here, only because it helps visualize the actual issue I’m having in a quick way…

And the issue is, that actor bounds (the ones that are calculated per each actor on scene and then summed up by ALevelBounds actor) are wrong.

Thank you for the clarification. I was able to reproduce the behavior you described and have entered a report about the inconsistency with the bounds results that you can find here Unreal Engine Issues and Bug Tracker (UE-38870) . You can track the report’s status as the issue is reviewed by our development staff. Please be aware that this issue may not be prioritized or fixed soon.

I’ve also just run into this problem. I evaluate the bounds of a handful of actors to fit them in view of the camera and attaching a particle system component to one of them causes the camera to zoom out hundreds of meters.

The bounds also break if the particle system is hidden or not activated, even with a template particle effect assigned.

I hope this gets fixed soon as it looks like it’s been a year since it was reported.