Whenever a single instance is moving near a medium-density area of instances (but not a humanoid? characters don’t seem to influence it), nearby lighting updates get throttled extremely aggressively. I believe this started happening since ThrottleLightGridUpdate3 got enabled (bit more than a month ago by now). Performance is perfectly fine, so this throttling is very unexpected. Finally been able to isolate it down to this root cause.
See the following videos:
Case 1 — There’s a moving part on the left of the screen, and an animating light (brightness) on the right. Note how lighting updates are extremely slow.
Case 2 — The moving part is moved to ReplicatedStorage, out of the workspace. Suddenly lighting updates are visually instant again.
Case 3: — The moving part is back, but I’ve reduced graphics quality to 1. It updates quickly again. Do note that while this is the case for me, many players in my games still have this issue on low graphics quality settings. Intermediate qualities will update lights more quickly too (but 1 is the fastest, 10 the slowest, generally).
Other cases: Looking away from the denser geometry will also cause it to update more quickly again. Or just removing a bunch of it. It also happens in much lower density cases, but the severity is lower in that case.
Moving away from the light slows down updates even more.
The light does not cast shadows.
In all cases I’m running at 60 fps, so this throttling is not at all expected (although even at 15 fps this throttling seems rather overkill when you’re in the lighting chunk yourself…). My own specs: 1080 Ti, Ryzen 1800X, Win 10.
Before ThrottleLightGridUpdate3 got enabled, very large amounts of lights and dynamically updating parts could co-exist at high update rates for both the parts and lights.
All cases use this script to update the moving part and animating light:
local light = workspace.Part.testlight
local pt = workspace.movepart
while true do
pt.Position = Vector3.new(pt.Position.X, 50 + tick() % 4, pt.Position.Z)
light.Brightness = (math.sin(tick() * 3) * 0.5 + 0.5) * 5
game["Run Service"].Heartbeat:Wait()
end
The rest of the game is static geometry for demonstration purposes.
Please reach out in private for a reproduction file with this static geometry.