SpotLights / PointLights disappear or flicker based on camera orientation

SpotLight and PointLight instances are being incorrectly culled based on camera orientation and movement. The light source object itself (and its emitted light) disappears or significantly dims when the camera looks away from or moves relative to the light’s position, even when the light and its parent Part/Attachment should remain within render distance and are not obstructed.

This is reproducible across multiple unrelated experiences, confirming it is an engine-wide regression rather than an experience-specific bug.

Reproduction Steps:

  1. Open any experience containing multiple SpotLight or PointLight instances (especially in enclosed/interior spaces)
  2. Position your camera near a lit area
  3. Rotate the camera away from a light source, or move so the light’s parent part exits the camera frustum momentarily
  4. Observe the light disappearing or significantly dimming
  5. Moving the camera back causes the light to reappear

See here too, as reproduced by @Nichesky in our game: Watch kkr | Streamable

Additional Information

  • The bug is most pronounced in interior/basement environments with many light sources
  • Behaviour is both camera-direction and movement-dependent, suggesting an occlusion culling or LOD system change is responsible
  • A related historical bug exists for ParticleEmitter on Attachment culling (#1769724)

Expected behavior

Lights should remain visible and continue illuminating their surroundings regardless of whether the camera is directly facing their parent object, consistent with behaviour prior to this regression.

Actual Behaviour
Lights are culled (disappear entirely or dim significantly) when their parent part/attachment leaves the camera frustum or is occluded, causing visible flickering as the player moves or rotates the camera.

5 Likes

Reproduced both in Roblox Player and Roblox Studio.


4 Likes

Pretty sure this is the engine culling lights based on the parent part’s bounding box, not the actual light radius. Same root cause as the ParticleEmitter/Attachment issue you linked. If the parent part is small and leaves the frustum (or gets far enough from the camera), the light goes with it even if the room should still be lit. Graphics quality level also affects light render distance, so worth checking if it reproduces the same on max settings.

A known workaround is parenting the light to a bigger part (invisible, CanCollide off, sized close to the light’s range). Bigger bounding box means no culling when you look away or move back.

That said, your video does look more aggressive than the usual behavior, so a threshold change on Roblox’s side wouldn’t surprise me. If you can share a repro file I’ll test it on my end and post results.

Unfortunately not going to share a reproduction file of our entire experience(s) to non-roblox staff. Concurring regarding the aggressive nature here.

1 Like

Totally fair, wouldn’t expect the full experience. A minimal repro is usually enough though: empty baseplate, a few parts with PointLights in an enclosed room, nothing else. If the culling shows up there it also makes the report stronger, since staff can run it directly. If you put one together I’ll test it on my end and post results here.

1 Like

It’s reproducible on any game with a lot of emitters to be honest, so in terms of a reproduction file, just make a baseplate with a ton of emitters. I’ll loop in the assigned engineer with our internals upon their response anyway.

Makes sense, and good that the assigned engineer will get your internals. I’ll put together a minimal baseplate on my end (enclosed room, grid of PointLights with small vs large parent parts) and post what I find here.

1 Like

Ran a controlled test on my end: enclosed room, two rows of PointLights, one with a small parent part (0.5 studs) and one with an invisible larger parent (16 studs) as a workaround. Same camera position and distance for both, just rotated so the parent leaves the frustum while the nearby floor stays in view.

Small-parent row: the floor next to the light goes dark once the parent’s out of frustum, even though the light should still be in range and unobstructed. Large-parent row: stays lit in the same test. So it does look like it’s the parent’s bounding box driving the culling, not the light’s actual range. Matches the pattern in your video.




2 Likes

I’m not sure if this is the reason or not, but before when roblox released an update where models and parts disappeared behind the camera to provide high quality and less lag, some problems started to appear, like parts that weren’t supposed to disappear started disappearing, including some things that controlled the lighting. I’m not sure if this is the reason or not, but this is what happened to me when the update first came out.

1 Like

Thanks for the +1 repro @VariantBD.

2 Likes

Anytime! Glad that was useful.