The other thing is that actors are only culled if they have a mesh component. Having just a point light in an actor did not trigger the culling process.
Stat LightRendering does show that lights are at least frustum culled.
It is complicated to explain why, but i have to use instanced static meshes for most things, and they do not support perinstance culling. I expect this results in alot of unculled objects and that is why the lights cannot be properly culled - The lights often have an object to affect, even when they are totally obscured from view.
when a light becomes occluded it seems to change from a “shadowed” light to a “batched” light. so the systems understands when a light is occluded, but for some reason rather than disabling rendering on it, it just disables shadows on it.
I tried tying light to an array inside of an actor and testing against its render status, setting lights intensity to 0 and reverting back to normal values if visible. It semi worked. Though it’s probably not optimal.
I’ve done a test where I link a line test function to the room and do a line trace by channel every 0,2 from the camera manager position to the actor and if it hits then I turn on the lights, if it misses then I turn them off. It works, though you would need to activate / deactivate the timers with a sphere trace overlap from your character to keep it optimized. The lights then physically turn off
you were pretty bang on with your previous suggestion tbh. I didnt need to do line traces.
I added a sphere mesh component to my lights that represents the light bounds. I turned off render in main pass, and render in depth pass, and use the “WasRecentlyRendered” function to check if it is occluded. If it is occluded, i set the light to be hidden.