Here’s an attempt at a decent skybox transition. The skybox’s resting position can be however far away you want it to be to not cut into terrain.
This effect is still limited though, as it requires the atmosphere’s ‘Offset’ value to be 0, and I tween it to come close to the viewport’s camera to make it fade, so this may not be ideal for large open world games or such.
This doesn’t handle setting the lighting’s actual skybox after the fade is done. You should do that! Basic usage looks something like this:
local Skybox = require(path.to.module).start(FakeSkyboxBillboardUI) -- @Joesmaller_xyz
local targetSky = game.ReplicatedStorage.Sky
-- First argument is the faces of the skybox. Then the fade duration (3).
-- Function is fired when skybox is close to viewport camera,
-- so its safe to change the sky without it being an abrupt change.
Skybox.changeSkybox(Skybox.getSkyFaces(targetSky), 3, function()
game.Lighting:FindFirstChildOfClass("Sky").Parent = game.ReplicatedStorage
targetSky.Parent = game.Lighting
end)
This uses a skybox model from joesmaller_xyz. Remember to change anything in the code to fit your needs.
I hope this gives someone a step in the right direction. You can get the module here.