Hello! Back in 2017-2018, when Roblox was working on Future lighting, they released several amazing features that didn’t make it into modern Roblox, such as the VoxelGPUCascaded technology which introduced particle shadows and more, auto exposure and even volumetric lighting.
I. How to download these Roblox Studio builds?
Roblox used to save these builds in a designated GitHub repository which is now deleted. Luckily, we can still access it on the Web Archive and download the builds from there.
Here’s the link: Wayback Machine
Wait for it to load. Web Archive tends to take more time than other websites.
II. Which builds do you need?
There are quite a bit of interesting builds uploaded, however, the most notable ones are Patch release (Sep 28, 2018 | v15)
which is the last version that supports volumetric lighting and Bugfix release (Dec 7, 2017 | v11)
which is the last version that features the VoxelGPUCascaded mode.
III. How to install these builds?
It’s pretty simple. Unlike the modern Roblox Studio version, it doesn’t have an installation process; you just need to extract it in a folder.
IV. How to bypass the log in screen?
Sadly, older Roblox Studio builds do not let you get past the log in screen because they use older protocols which cannot connect to the modern servers, thus not letting you to log in and proceed.
However! There’s a clever workaround which I have found.
- First, open the normal Roblox Studio build and create a new baseplate project.
- Save it to file.
- You can now close Roblox Studio.
Next, you need to disable your internet. Here’s how to do so on Windows 11:
- Press Win+I. This will open the settings app.
- Proceed to Network & internet.
- Select Advanced network settings.
- Located next to your Ethernet/WiFi adapter, click ‘Disable’.
Now you need to:
- Open the RobloxStudioBeta.exe file in the folder where you have extracted the build.
- You will be met with an error; this is expected behavior, just click OK and it’ll go away.
- Then, you need to Drag’n’Drop the saved place file from earlier onto the build window.
- This part is VERY important! Place down a part.
- When the previous step is done, you can turn your internet back on.
- A few seconds later, your studio will freeze for a couple of seconds; this is expected behavior, as studio will attempt to close itself but wont because you have unsaved changes.
- A confirmation window will appear, make sure you click cancel.
V. FiB v15 section: how to enable Future is Bright and how to get volumetric lighting.
Future is Bright is not enabled by default, so you’ll need to enable it yourself and relaunch studio following the same steps from earlier.
- Click File → Settings.
- Navigate to Rendering.
- Scroll down to the General section; you’ll find the
FutureIsBright
setting. Make sure you tick it. - Relaunch studio following the same steps from earlier.
Now, you should have Future lighting enabled. But in order to get volumetric lighting, you must take additional steps:
- Add a
LocalScript
inside of StarterPlayer → StarterPlayerScripts. - Add a
ModuleScript
inside of theLocalScript
which you have just created. Name it ‘VolumetricCamera’, - Paste the following code inside the LocalScript:
local VolumetricCamera = require(script:WaitForChild("VolumetricCamera"))
local RunService = game:GetService("RunService")
local Camera = workspace.Camera
local cameraPart = Instance.new("Part", workspace)
cameraPart.Transparency = 1
cameraPart.Size = Vector3.new(1, 1, 1)
cameraPart.CanCollide = false
cameraPart.Anchored = true
cameraPart.Name = "CAMERA"
local volumetricCamera = VolumetricCamera.new(
cameraPart,
Camera.ViewportSize,
Camera.FieldOfView,
150,
0.7,
NumberSequence.new(0.996),
1,
ColorSequence.new(
Color3.new(0, 0, 0)
)
)
volumetricCamera.LayerColor = ColorSequence.new(Color3.new(0.8, 0.8, 0.8))
volumetricCamera:ReDraw()
do
local viewport = Camera.ViewportSize
cameraPart.Parent = workspace
RunService.RenderStepped:Connect(function()
if Camera == nil then
Camera = workspace:WaitForChild("Camera")
end
if cameraPart.Parent == nil then
local s = pcall(function() cameraPart.Parent = workspace end)
if s == false then
local newCamera = cameraPart:Clone()
volumetricCamera.CameraPart = newCamera
volumetricCamera:UpdateView(Camera.ViewportSize, Camera.FieldOfView)
newCamera.Parent = workspace
end
end
cameraPart.CFrame = Camera.CFrame
if Camera.ViewportSize ~= viewport then
volumetricCamera:UpdateView(Camera.ViewportSize, Camera.FieldOfView)
viewport = Camera.ViewportSize
end
end)
end
- Paste the following code in the ‘VolumetricCamera’
ModuleScript
.
--Feel free to edit and do what ever with this
local ATTACHMENT_OBJECT = Instance.new("Attachment")
ATTACHMENT_OBJECT.Visible = false
local BEAM_OBJECT = Instance.new("Beam")
BEAM_OBJECT.TextureMode = Enum.TextureMode.Static
BEAM_OBJECT.TextureLength = 1
BEAM_OBJECT.Segments = 1
--BEAM_OBJECT.Texture = "rbxassetid://2957618348"
BEAM_OBJECT.TextureSpeed = 0
BEAM_OBJECT.FaceCamera = false
BEAM_OBJECT.LightEmission = 1
local VolumetricCamera = {}
VolumetricCamera.Layers = {}
VolumetricCamera.LayerSpacing = 0.5
VolumetricCamera.CameraPart = nil
VolumetricCamera.LayerLightInfluence = 1
VolumetricCamera.LayerColor = ColorSequence.new(Color3.new(.5, .5, .5))
VolumetricCamera.LayerTransparency = NumberSequence.new(0.996)
local function updateLayers(layers, viewport, fov, layerSpacing, cameraPart)
local tan = math.tan(math.rad(fov/2))
local ratioY = (0.1*tan)/0.1
local ratioX = (0.1*viewport.X*tan)/viewport.Y/0.1
for i=1, #layers do
local layer = layers[i]
local b = layer[1]
local a1 = layer[2]
local a2 = layer[3]
local index = (i-1)*layerSpacing
a1.Position = Vector3.new((ratioX*index), 0, -index)
a2.Position = Vector3.new(-(ratioX*index), 0, -index)
b.Width0 = (ratioY*index)*2
b.Width1 = (ratioY*index)*2
a1.Parent = cameraPart
a2.Parent = cameraPart
b.Parent = cameraPart
end
end
--[[
This will redraw the beams with the defined color, transparency, and light
influence defined in the properties
--]]
VolumetricCamera.ReDraw = function(self)
local layers = self.Layers
local color = self.LayerColor
local trans = self.LayerTransparency
local influ = self.LayerLightInfluence
for i=1, #layers do
local beam = layers[i][1]
beam.Color = color
beam.Transparency = trans
beam.LightInfluence = influ
end
end
--[[
This will resize and position the layers, usefull for when the screen resizes, or when
the camera part changes
--]]
VolumetricCamera.UpdateView = function(self, viewport, fov)
updateLayers(self.Layers, viewport, fov, self.LayerSpacing, self.CameraPart)
end
--[[
This will construct a new VolumetricCamera object
--]]
VolumetricCamera.new = function(camera, viewport, fov, layerDepth, layerSpace, transparency, lightInfluence, color)
local self = {}
local layers = {}
do
local nLayers = 1
BEAM_OBJECT.Transparency = transparency
BEAM_OBJECT.LightInfluence = lightInfluence
BEAM_OBJECT.Color = color
local tan = math.tan(math.rad(fov/2))
local ratioY = (0.1*tan)/0.1
local ratioX = (0.1*viewport.X*tan)/viewport.Y/0.1
for i=1, layerDepth do
local b = BEAM_OBJECT:Clone()
local a1 = ATTACHMENT_OBJECT:Clone()
local a2 = ATTACHMENT_OBJECT:Clone()
b.Attachment0 = a1
b.Attachment1 = a2
layers[nLayers] = {b, a1, a2}
nLayers = nLayers + 1
end
end
updateLayers(layers, viewport, fov, layerSpace, camera)
--Set object's values
self.Layers = layers
self.LayerDepth = layerDepth
self.CameraPart = camera
self.LayerLightInfluence = lightInfluence
self.LayerColor = color
self.LayerTransparency = transparency
return setmetatable(self, {__index = VolumetricCamera})
end
--And return the class
return VolumetricCamera
Attention! I didn’t write this code! It’s available publicly here: https://create.roblox.com/store/asset/7660065009/VolumetricLightingOld
- Make a small test map: you need to make at least one light source and set it’s
Shadows
property totrue
. It’s also recommended that you put theBrightness
of Lighting to 0,Ambient
andOutdoorAmbient
to (0,0,0), andClockTime
to 0. - Playtest! Unfortunately it doesn’t perform well on low-end hardware; My PC runs it just fine. My PC: RTX 2060 Super, 16GB of DDR4 RAM, R7 2700X CPU.
VI. FiB v11 section: how to enable VoxelGPUCascaded mode.
VoxelGPUCascaded is a lighting technology that vastly improves the Voxel
technology. It introduces particle shadows amongst other technical things.
For some reason, FiB v11 is much easier to use. You don’t need to disable your internet connection as there is no log in screen.
- Open the build.
- Drag’n’Drop the baseplate file.
- Navigate to Lighting, scroll down to Experimental and set
LightingMode
toVoxelGPUCascaded
. - Try it out!
Huge thanks to the author of this video! https://www.youtube.com/watch?v=vLHh3d2x6Gc