Outliner does not report proper uncached lighting count

There is an issue with the scene outliner display of uncached lighting info. The count provided only scores actors with uncached lighting. The problem is that an actor can report 0 for uncached lighting while having any number of components as children with all sorts of uncached lighting problems. These are rather difficult to find. The scene outliner needs to count an actor’s components in addition to the parent actor when reporting uncached lighting in the scene outliner.

Hello Whammy,

I would like some more information in order to better understand this issue.

You are saying that you have a light and then you have other lights parented under it. Whenever you profile your scene the children return a value of zero even if they have issues.

Is this correct?

If it is not could your provide some repro steps and the version you are using so I can attempt to recreate it.

No. That’s not what’s happening.

The problem was discovered when using the Spline Generated Fence from the market place. What it was doing was creating spline component meshes under a parent actor. For whatever reason, the spline meshes were not lighting properly and the engine was constantly reporting that there were unlit objects no matter how many times you ran the lighting build. The scene outliner reported that there were no unlit objects which didn’t agree with the error message in the upper left of the screen. I added code to the engine to check all the actors and components to see who was unlit. That’s when I discovered that actors who had problems with component lighting were being reported in the outliner as being fully lit (no uncached lighting). The outliner didn’t check to see if the actor had unlit components attached to it as children.

Hey Whammy,

I would like a little big more information in order to further clarify this issue.

1.) “What I was doing was creating a spline component meshes under a parent actor.” Could clarify on that. How exactly are you parenting these splines to another actor.

2.) What kind of lights do you have in your scene. Are they static/stationary?

3.) The world outliner does not report anything. Where you would be seeing this is either in your viewport or your Message Logs. I am a little confused as to where exactly you are receiving these messages.

4.) Also, if you could link me your DxDiag as well.

Armed with this information I will attempt to recreate this issue.

  1. I can’t really clarify much on that. It’s not my BP. I purchased it on market place, so I don’t really know exactly how the author created the spline meshes other than they exist as components to a parent actor.

  2. The lighting is directional light being used as a sun. It is stationary. There is also a skylight actor.

  3. If you open the world outliner and select #uncached lights, it will report 0 for the count even thought the actor has components with uncached lighting. (This is the problem.)

  4. The problem was found by iterating through all the actors and components and checking for a non-zero return from GetNumUncachedStaticLightingInteractions().

The real problem is item 3 above. Right now, if an actor has components with a lighting problem, there’s no way to find it without resorting to adding code to the engine to get it to spill its guts. The outliner needs to check components of an actor when reporting uncached lighting.

Hey Whammy,

I actually have this content for my personal projects, and I believe I can help clarify this issue you are experiencing. I took a read over our documentation and you might also find this section of information helpful when explaining why your fences are not generating the indirect lighting cache as you are describing. One of the main points, is to make sure you have a ‘LightmassImportanceVolume’ as this is needed for Indirect lighting to be calculated.

Indirect Lighting Cache

This information was drawn from our documentation below:

The main thing here is how the samples are placed in the scene itself. “Since 'Lightmass places the lighting samples on top of upward facing surfaces with high density, and everywhere else with low density. The samples are limited to being within the ‘LightmassImportanceVolume’, and they are only placed on static surfaces.”

In this case I decided to reduce the ‘Volume Light Sample Placement Scale’ to increase the density of the indirect lighting. In the images below you can see the difference between a small scene with a sample placement scale of 1.0 versus a scale of 0.25.

Above is the scale of 1.0 and you can see how scattered these volumes are, and the color they have adopted from the surrounding objects in the scene.

Here I have set the scale to 0.25 and the density of the samples has increased. Now the fences samples are beginning to pick up some color from the fences. The individual pickets of the fences are so narrow that their density is harder to calculate as their faces are not upwards.

This seems to be the reason as well as the objects being dynamic with not available lighting, so it interpolates the lighting from the precomputed samples.

If you have other questions, or think your issue is related to something else please let me know. Also, providing me with some reproducible steps so I can see what you are reporting on my end would be helpful.

Thank you,

I think you missed the point to this particular bug. The issue is not that the fence is having issues with lighting, The problem is that the outliner doesn’t report components to actors with bad lighting making finding problem objects very difficult. Also, I do have an importance volume already set up. That’s not what’s causing the problems with the fence. The current theory is that the fence BP is creating duplicate splines/meshes that are overlapping which is making lighting problematic.

The info on the Volume Light Sample Placement Scale is helpful.

Hey Whammy,

Thank you for clarifying. At this point, the most helpful thing for me to reproduce, and see what you are reporting is to have some screenshots and simple steps to follow.

I am a bit confused when you say outliner, as the ‘World Outliner’ to my knowledge does not have the functions you are mentioning? The ‘World Outliner’ is a list of objects in the current level which you can use to help select, transform, and hide specific actors.

Thank you,

The screen shots are unremarkable. The lighting looks normal. However, the build reports failure. Reproducing the problem on demand is difficult. I had about 100 fences in my level and 3 of them were causing problems erratically.

If you select the World Outliner pull-down tab on the upper right, you can tell it to display ‘# Uncached Lights’ as a display option.

Unless I can get this to reproduce on my end, or if you provide me with a project in which this issue occurs there is no way to fix this bug. If out of 100 fences it was causing issues with three, you can try adjusting the light type to ‘Movable’, since you mentioned you tried force no precomputed lighting.

I think you’re still missing the issue. It’s not that a BP is having lighting issues. No, no, no. That’s a whole different problem. The issue here is that the World Outliner does not report uncached lighting for an actor even when the actor has components which do. The outliner needs to report uncached lighting for the actor PLUS any uncached lighting for child components.

I do see what you are saying, but I need to reproduce it on my end to enter a bug report.

Just have GetNumUncachedStaticLightingInteractions() return a non-zero value for a component and see if it shows up in the outliner.

Hey Whammy,

I do see what you are reporting now, and I have one more question in order to clarify.

Are you able to see any of the # of Uncached Lights for other actors in your World Outliner, or are they all reporting 0?

Thanks,

I added a static mesh actor, skipped lighting, and started PIE. The error message about unlit objects appeared as expected. Exiting PIE and checking the outliner showed that the new actor had 1 uncached light. So it it appears that objects without components do get reported properly.

Okay thank you for clarifying. Would you mind answering one more question in regards to your specific issue.

What is the mobility of your Directional Light actor, or lights in your scene? i.e. Static, Stationary, or Movable?

If they are movable, there will be none reported as your scenes lighting is fully dynamic at that point.

Directional light is stationary. There are a few point lights as well. They are also stationary. There is no moveable lighting in the level.