I’ve recently noticed ,while working on a rain system, that lighting updates still happen when a part is transparent. These light updates reduce the FPS by half.
Here is a little video demonstration:
(I’m flying up to get out of the render distance of light updates)
The script just spawns some parts and moves them around:
local H = game:GetService("RunService").Heartbeat
local parts = Instance.new("Model",workspace)
parts.Name = "parts"
local x = 0
local z = 0
local r = 0
local function getpart(name)
local part = parts:FindFirstChild(name)
if (part == nil) then
part = Instance.new("Part")
part.Size = Vector3.new(1,1,1)
part.CanCollide = false
part.CastShadow = false
part.Transparency = 0
part.Anchored = true
part.Name = (name)
part.Parent = parts
end
return part
end
local size = 25 --set it higher if you have a good computer
while true do
local t = script:GetAttribute("transparency") --for changing transparency
r = math.random(-10,10) --if a part just gets moved to the same spot, light doesn't get updated
for x = 1, size do
for z = 1, size do
local part = getpart(x..":"..z)
if (part ~= nil) then
part.Transparency = t --for changing transparency
part.Position = Vector3.new(-(size/2)+x+r,1,-(size/2)+z+r)
end
if z % 150 == 0 then
H:Wait()
end
end
H:Wait()
end
end
Images from MicroProfiler, for proof that they are light updates:
Non-transparent, close
Non-transparent, far (you can see that Update LightGrid completely disappeared)
For transparent parts it’s pretty much the same, but rendering is shorter.
Transparent, close
Transparent, far
I know there have already been hundreds of requests to add a option to have a material or part type that has no textures, lighting or reflections. Since Roblox doesn’t seem to care about that, I’m wondering if there is some kind of other way to bypass these light updates.
Maybe something like:
- Changing the render distance of lighting
- Tricking the render distance
- The rain is using SurfaceGuis, so I’m wondering if there is some kind of other way to use them without parts.
I have looked for solutions in the forum for a while and tried a lot of potential solutions I had in mind, but I just ended up in a dead end.



