Help recreating a similar look to volume buffer lighting that old ROBLOX used with the shadowmap lighting tech?

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?
image

3 Likes


Are you talking about the trash new shadow?

1 Like

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.

1 Like

For me, I think ROBLOX changed it somewhere in the game files, it came out at 2019 I think.

2 Likes

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.

2 Likes

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

Screenshots


This will manage to change the Roblox shadow and change the rest of game.Lighting

2 Likes

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.

2 Likes