In legacy ROBLOX games, I believe ROBLOX used the GPU volume buffer to create a technique that basically had infinite resolution sun shadows, they removed this when adding dynamic lighting because that technique simply does not work well alongside dynamic lights. When trying to recreate old ROBLOX lighting to the best of my ability with the modern, heavily restricted tools, the first thing I thought of doing was increasing the shadowmap resolution, but that isn’t really an option from what I can see, can anybody help out with this?
Yeah, I wouldn’t say its trash in terms of dynamic lighting, but in cases where dynamic lighting isn’t needed, I would much prefer to reach something somewhat close to the classic shadow style, closest I’ve gotten with shadowmap is making the shadows incredibly sharp, but the low shadowmap resolution causes issues when trying to get that lossless look of old roblox shadows.
For me, I think ROBLOX changed it somewhere in the game files, it came out at 2019 I think.
Fairly certain dynamic lighting was 2015 ish, and yeah its def something in the files, but I’m talking about achieving a similar look with what we have today.
Hi, again i manage to get a script to change all of this.
IMPORTANT | LocalScript
local lastbright = game.Lighting.Brightness
local lastambient = game.Lighting.OutdoorAmbient
local lastfogend = game.Lighting.FogEnd
local lastfogstart = game.Lighting.FogStart
local bool1 = true
local function changecolor(part)
local H,S,V = part.Color:ToHSV(part.Color)
part.Color = Color3.fromHSV(math.clamp(H - 1.5/255,0,1),math.clamp(S / 1.2,0,1),math.clamp(V + 0.1325,0,1))
--part.Color = Color3.fromHSV(math.clamp(H -1.5/255 * H,0,1),math.clamp(S -0.13 * S / V,0,1),math.clamp(V + 0.13 * V / V,0,1))
end
for i,v in pairs(workspace:GetDescendants()) do
if v:IsA("BasePart") then
local bool = false
local connect
if v.Material == Enum.Material.Neon then
changecolor(v)
connect = v:GetPropertyChangedSignal("Color"):Connect(function()
if v.Material == Enum.Material.Neon then
if bool == false then
bool = true
changecolor(v)
task.wait(0)
bool = false
end
else
connect:Disconnect()
end
end)
end
v:GetPropertyChangedSignal("Material"):Connect(function()
if v.Material == Enum.Material.Neon then
changecolor(v)
connect = v:GetPropertyChangedSignal("Color"):Connect(function()
if bool == false then
bool = true
changecolor(v)
task.wait(0)
bool = false
end
end)
else
connect:Disconnect()
end
end)
elseif v:IsA("PointLight") or v:IsA("SpotLight") or v:IsA("SurfaceLight") then
v.Brightness *= 0.5
v.Range -= 2
changecolor(v)
if v:IsA("SpotLight") then
v.Angle /= 1.5
end
end
end
game.Lighting:GetPropertyChangedSignal("GlobalShadows"):Connect(function()
if game.Lighting.GlobalShadows == false then
lastbright = game.Lighting.Brightness
lastambient = game.Lighting.OutdoorAmbient
game.Lighting.Brightness *= 0.475
game.Lighting.OutdoorAmbient = Color3.fromRGB(0,0,0)
else
game.Lighting.Brightness = lastbright
game.Lighting.OutdoorAmbient = lastambient
end
end)
game.Lighting:GetPropertyChangedSignal("FogEnd"):Connect(function()
if bool1 == false then
bool1 = true
lastfogend = game.Lighting.FogEnd
lastfogstart = game.Lighting.FogStart
game.Lighting.FogEnd *= 1 * math.clamp(math.max(game.Lighting.FogColor.R,game.Lighting.FogColor.G,game.Lighting.FogColor.B) * 5,1,5)
game.Lighting.FogStart -= 5
game.Lighting.FogStart += 5
task.wait(0)
bool1 = false
end
end)
workspace.DescendantAdded:Connect(function(v)
if v:IsA("BasePart") then
local bool = false
local connect
if v.Material == Enum.Material.Neon then
changecolor(v)
connect = v:GetPropertyChangedSignal("Color"):Connect(function()
if v.Material == Enum.Material.Neon then
if bool == false then
bool = true
changecolor(v)
task.wait(0)
bool = false
end
else
connect:Disconnect()
end
end)
end
v:GetPropertyChangedSignal("Material"):Connect(function()
if v.Material == Enum.Material.Neon then
changecolor(v)
connect = v:GetPropertyChangedSignal("Color"):Connect(function()
if bool == false then
bool = true
changecolor(v)
task.wait(0)
bool = false
end
end)
else
connect:Disconnect()
end
end)
elseif v:IsA("PointLight") or v:IsA("SpotLight") or v:IsA("SurfaceLight") then
v.Brightness *= 0.5
changecolor(v)
if v:IsA("SpotLight") then
v.Angle /= 2
end
end
end)
if game.Lighting.GlobalShadows == false then
lastbright = game.Lighting.Brightness
lastambient = game.Lighting.OutdoorAmbient
game.Lighting.Brightness *= 0.475
game.Lighting.OutdoorAmbient = Color3.fromRGB(0,0,0)
else
game.Lighting.Brightness = lastbright
game.Lighting.OutdoorAmbient = lastambient
end
if (game.Lighting.Ambient.R + game.Lighting.Ambient.G + game.Lighting.Ambient.B) / 1.5 > (game.Lighting.OutdoorAmbient.R + game.Lighting.OutdoorAmbient.G + game.Lighting.OutdoorAmbient.B) / 1.5 then
game.Lighting.Brightness *= math.clamp((game.Lighting.Ambient.R + game.Lighting.Ambient.G + game.Lighting.Ambient.B) / 1.5,0.475,2)
else
game.Lighting.Brightness *= math.clamp((game.Lighting.OutdoorAmbient.R + game.Lighting.OutdoorAmbient.G + game.Lighting.OutdoorAmbient.B) / 1.5,0.475,2)
end
game.Lighting.FogEnd *= math.clamp(math.max(game.Lighting.FogColor.R,game.Lighting.FogColor.G,game.Lighting.FogColor.B) * 5,1,5)
game.Lighting.FogStart += 5
bool1 = false
IMPORTANT | How to
The script, in lightning and make a bloom called NoBloom then make the size 24
- ThresHold 0.95
and the rest 0
I mean its nice lighting but it honestly doesn’t really fix the shadow at all, it’s still very soft, and if you set softness to 0 it looks incredibly low-res and pixelated.