Construction script + lights (actors) + streaming levels = 'rebuild lighting' even without changes

I’m working on an archviz project and want to visualize several design options for the interior design of an office.

On the persistent level there is;

  • sun (stationary) & sky light (static)
  • most of the static meshes of the building

I use two streaming levels, both loaded by blueprint, both with a lighting scenario. On these levels are;

  • different layouts for the furniture (all static meshes)
  • different lighting layout (IES spots + mesh, all static).
  • these layouts are created by a BP actor using its construction script (and using csv data for the position/rotation) that adds the individual lights as actors (mesh + spot light, all static)

The problem is; after building lighting all looks fine. But when you continue working on one level, switching levels a few times, running the game, etc the message ‘rebuild lighting’ appears again. I have not yet seen a consistent way to reproduce this but most of the time, toggling levels in the editor a few times, rebuilding lighting on 1 level etc etc breaks it within one minute.

So my question is; anyone else noticed these kind of problems when using actors with mesh&lights on several streaming levels? What can be done to prevent this problem? I would like to avoid having to place all objects & lights by hand again.

Max

We’ve had something similar happen, what I figured out is that having ChildActors that are responsible for lights in another blueprint do not seem to like it very much. Additionally another thing that I noticed is that if you having some objects parented in the level then it tends to break lighting as wel and invalidates them.

If you enter “DumpUnbuiltLightInteractions” in the console(output log bottom) then it should give you a list of all things that are currently unbuilt in the level. Maybe it can help you find out exactly why it is happening.

In general I think one of the issues might lie in the fact that when you open a level or play it the construction script is executed and if the light for some reason is just off by 0.0001 in it’s position or rotation it invalidates the lighting. There is an option in C++ where you can adjust that threshold of checking when it should invalidate lighting. Not sure exactly where that is, I’d have to ask our lead programmer. Let me know if you want this info or if any of the previous info helps you out.