Skybox Overhaul

Hello! As a Roblox developer, it’s fairly difficult to make a game with lighting and a skybox that stands out at any time of day. I think it goes without saying that the current skybox system is pretty ancient, and whilst the addition of being able to specify sun and moon textures was greatly appreciated, there’s still a lot of room for improvement. This is a list! I’m sorry.

  • Custom sun/moon paths: Being tied to hard-coded paths for the sun and moon based on GeographicLatitude and TimeOfDay is fairly limiting - being able to specify our own paths for both would be great, using Vector3Sequences (Color3Sequences, but for Vector3s). One use case for this would be adapting sunrise/sunset times to match those in the real world for a certain time of year.
  • Specify a skybox for night time: Rather than having a blank black skybox with procedurally generated single pixels for stars, we could have our own, much more vibrant skyboxes at night to make our games really stand out. Seeing an entire galaxy when you look up really is something else.
  • Custom skybox objects: This would allow for multiple suns and moons, or to specify fixed star constellations or other objects of interest we might want to always render in the far distance. These could also benefit from custom paths like suns and moons, so they can move on different trajectories; think a gas giant you’re orbiting around.

I wholly understand that none of these may even be feasible, and would like to make the disclaimer that this is purely a shopping list of improvements to a very old system. I don’t even pretend to know how any of the rendering pipeline works.

Thank you for your time!

179 Likes

One thing that really bothers me is that I can’t quite move the sun close to the “horizon”, as it very clearly turns yellow, or completely disappears if moved too low.
I’d like to disable this behavior. I don’t want to be dictated where my “horizon” should be. I may not want it at all if I’m making a space game.

I also want to have full control over the sun’s color (and so, the color of the light it casts, too).
I don’t want it to suddenly change color depending where I place it in the sky. I also may not want it to shine white light all the time. I may want to make it orange or blue, but I can’t do any of that. CollorCorrection does not solve this issue, as it changes color of everything, not just the sunlight.

And also…
Why is the moon’s location so weirdly constrained to the sun??
This behavior should be removed. I don’t want sun to tell me where moon should be located. Every celestial body should have it’s individual settings, and they should not be linked to each other, unless it could be toggled.

50 Likes

I also vote in favor of a skybox overhaul. The skybox has been around for 14 years now, basically as long as Roblox has been and it has had little to no visual changes.

The procedural cloud generation that is coming soon™ and Atmosphere class has been wonderful additions to the skybox and it’s a really great start but I believe it’s also important that we have a more realistic sky since right now it’s pretty plain and some parts of it as @Veldaren said doesn’t make any logical sense like how the moon and sun are polar opposites, in real life the sun and moon appear to ‘orbit’ around the sky in their own time, so one night you might see a full moon far away from the Sun which is at opposition and a crescent moon a couple of weeks later with it being near the Sun in the sky.

Here’s a few of my suggestions that I think would go a very long way to perfecting the skybox.


CelestialBody Instance

(Idea influenced by @Tomarty’s post here: Skybox: keep the sun but get rid of the moon - #5 by Tomarty)

A celestial body instance would be amazing! So far the skybox is really plain and we’re constrained to two celestial bodies in the sky, Sun and Moon. Currently all we can do to customize these celestial bodies is changing their texture and their size in the sky. The ability to have more celestial bodies (Suns, planets, moons, galaxies, nebulae) in the sky would be amazing for Sci-Fi games and would really bring out a fantastic atmosphere for space exploration games.

In real life, we have planets in the sky which orbit around the Sun and which are never static at every time and date like Roblox’s is. At certain months in the year, a planet might appear very bright, usually when it’s at or around its ‘Opposition’, usually when two bodies are polar opposites in the Celestial Sphere, or night sky.


License: CC BY-SA 3.0, Creator: Wmheric, Source: Wikipedia

If this were to happen, we could deprecate Sun & Moon properties in Lighting and have a ‘UseLegacyBodies’ option left over for ease of access.

Here’s an example of some of the properties, functions, and events you may see in the API.
I’m not going to get too complex here as you can get crazy complex eventually if you’d want to, considering extra factors like a binary-star-system.

image

CelestialBody

Image: Image is a property which requires a Content value, or in other words an Image. The ability to easily see the image depends on the magnitude and size of the body from the planet you’re on and the atmospheric conditions. So if there’s high cloud cover where you’re standing (When clouds come out) then it might be impossible to see the body or it could be very hazy.

Magnitude: Magnitude is a property which requires a NumberRange value, where the minimum is the lowest possible magnitude the body can be seen as in the sky (Usually just conjunction) and the maximum is the highest possible magnitude the body can be seen as, or the Opposition. Though to avoid confusion, the best way to do this would be to have magnitude be the brightness from let’s say 1000 units away from the planet you’re on.

Mass: Mass is a property which requires a Number value which sets the Mass of the celestial body. This is essential for physics to figure out the Barycenter, or center of mass, between this and the other celestial body this body is orbiting. You can additionally make it where the body isn’t orbiting anything and is just sitting at some point in space, spinning around its axis.

Size Size is a property which requires a Number value which sets the physical Size of the celestial body. The size rendered on-screen depends on how far or close the body is from Origin.

Eccentricity Eccentricity is a property which requires a Number value from 0-2 that determines the eccentricity of the orbit if given a CelestialBody to orbit around with the Barycenter property. If given a point instead of an Instance, this value will do nothing.


image

License: CC BY-SA 4.0, Creator: Phoenix7777, Source: Wikipedia

Barycenter: Barycenter is an optional property which controls the Barycenter of an object. You can either give it another CelestialBody instance for it to orbit around or a specific point in space (Offset from origin, 0,0,0, where your planet is).


Barycentric view of the PlutoCharon system as seen by New Horizons.
License: Public Domain, Source: Wikipedia

AtOpposition AtOpposition is an event that fires whenever the celestial body reaches opposition between the celestial body and its Barycenter object, if given another CelestialBody instance.

AtConjunction AtConjunction is an event that fires whenever the celestial body reaches conjunction between the celestial body and its Barycenter object, if given another CelestialBody instance.

GetDirection GetDirection is a function that returns the direction of the CelestialBody in the celestial sphere.

GetPosition GetPosition is a function that returns the position of the planet in Space, which doesn’t go by the standard stud measurement that Roblox uses for parts.

That’s just a few of the many API features you could have with something like this. There’s a lot of creative things you could do with this. I do personally think that we should be given the basic tools for celestial bodies and astrophysics so then we can be expected to do even greater things, since right now doing all of this is basically too difficult as using BillboardGuis as alternatives doesn’t work if you have fog enabled, and fog is often an important aspect of atmospheres in eerie games that cannot be exchanged for these.


Realistic transition between Night & Day

Currently, when the Sky in Roblox transitions from day to night and vice versa, stars don’t fade in appropriately like how they would in real life.

You might have to look close to see this but it appears that there’s no actual Magnitude difference between all of the stars. Not only are they appearing way too early before the sky darkens a bit, they all just appear at once. In real life, as the sky darkens the slightest amount some stars might appear, which are the ones in the sky to have the lowest Magnitude (lower magnitude, brighter, The sun ranges at around -26 mag, that and its size in the sky is why you can see it in the daytime but not any other stars!), and then as it gets darker more dimmer stars start to appear in the sky and every star visible to the human eye appears when it’s completely dark, usually the middle of the night and when there’s no Moon in the sky. (The human eye caps to around magnitude 6.5 of what you can see)

You can certainly see problems with the stars around ClockTime 18.82 because one small number change results in tons of stars appearing at once.

You can see how it’s done more accurately on a website called Stellarium Web:


Atmospheric Extinction

Currently, the only two Celestial Bodies that exist right now (Sun & Moon) both aren’t affected by Atmospheric Extinction. Basically, Extinction is where as a celestial body gets closer to the horizon, it has to pass through more of the atmosphere, which absorbs shorter wavelength light. This gives celestial bodies like the Sun & Moon a reddish hue when near the horizon.

Example of Atmospheric Extinction:


Moon Phases

Moon phases are an essential part of the night sky and I’m so surprised they don’t exist.
Currently, the Moon is always a full moon every single night so it hardly has any character.
If moon phases were added, it would make the sky much more pleasant to look at. It wouldn’t hurt to update the moon’s default image in the process either.

Fun fact: There’s actually already a function for getting the moon phase but it currently does nothing and always returns 0.75.

Lighting:GetMoonPhase

While you could make your own moon phases, they will never be smooth and creating tens of decals, even more if you want a feature like extinction, that’s not a viable option. It’s basically the same reason why VideoFrames were created so we don’t have to use many individual frames.


Image Credit: NASA/JPL-Caltech

157 Likes

Bumping as night time in Roblox is currently extremely dated and limited. The current system of only showing stars, the moon and nothing else contrasts greatly with the skybox of daytime and overall just looks tacky and unpolished.

If we had the ability of setting a night time skybox, day-night cycles would be more feasible. As it stands, night time either has to look extremely primitive or it has to be simulated (which is its own giant can of worms).

27 Likes

Bumping again, cause the lack of features makes this limited for devs that require this for their game.

6 Likes

i’d just prefer an overhaul on the way clouds are rendered and the way the sky looks based on different times of day, you can’t convince me it’ll be laggy because games from the 90s have better looking skies and clouds

5 Likes

Have you tried using the Clouds object?

2 Likes

Its laggy bro (on phone and 13 year old mac) and btw it breakes down and goes backward at large distances

1 Like

Of course it’s going to be slow on a 13 year old Mac, that thing’s been around for a bit over half as long as I have! Quite frankly, you shouldn’t really be trying to go for really pretty graphics on mobile hardware either - ARM processors are designed for power efficiency, to prolong battery life, not for performance.

edit: THAT MAC IS OLDER THAN SKYRIM :skull:

10 Likes

Bumping this as making good looking and proper space scenes is nearly impossible without extreme workarounds that are subpar.

Many people that I know, including myself, are working on space games. While all of us are working on different types of space games, one thing is clear - we need more skybox freedom. If the present issues and limitations with the skybox were addressed, it would bring about a new era of good looking space games.

5 Likes

Every space game developer that I know struggles with lighting. Roblox’s day/night system is filled with too many constants, forcing developers to have ugly transitions or hacky/annoying workarounds.

Additionally, I would like to have the sun as a removable source of lighting - the massive spectral glare is incredibly annoying when a ship is in the dark of space with only a few small lights.

5 Likes

image

This is a thing, at the very least.
~
But, seriously, skyboxes and whatnot as mentioned in this thread, ought to have some overhauling.

2 Likes

Lighting deserves some love. The only new thing we’ve gotten with lighting is clouds and Future is Bright, but that’s still really buggy.

5 Likes

Those were both announced in 2020? They are both about 3 years old, not new.

What do you mean buggy? I personally have not really seen any bugs with clouds, and I have only experienced one bug with Future that barely even impacts player experience.

i mentioned a lot of the things this feature request is asking for a few months ago without even realizing that there was a feature request for this stuff:

tl;dr the skybox system (and lighting in general) really need an overhaul, trying to work with a system that hasn’t changed much in over 15 years is a pain…

3 Likes

It would be great, while we’re talking about the sky and atmosphere, that we can get completely volumetric clouds, and maybe even cloud types like cummulus nimus or cirrus.

I agree with this post, thank you.

All of these ideas are awesome, but what I’d rather see is more freedom. Not every Roblox place needs to have such complexity in the skybox. The problem is that some should, most prominently every game which attempts to take place outside of Earth. I think one of the most influential changes that can be made in that regard would be, as has been said by others, the removal of the horizon, or “fade,” and allow the sun and moon to be shown at all times.

In an ideal world, though, I think it’d be best if all of the “simplification” was removed. Developers should be given more access to adjust lighting and skyboxes, as follows:

  • Remove the Sun and Moon celestial bodies entirely
    • This would mean we could get a setting such as the LightDirection setting in ViewportFrames. This could also optionally mean we’d get settings such as LightDirection and LightIntensity.
  • Allow developers to dynamically change the contents of the skybox.
    • If the skyboxes could be treated like UI (Allow for creation of frames, text; or just rects, and individual pixels), then developers could create the Sun and moon in runtime, and program custom behavior themselves. (Default behavior could be enabled using a Legacy option, or through default scripts which could be disabled)

At present, it is possible to disable celestial bodies, disable stars, and create custom (albeit static) skyboxes. The only problem is the hard-coded lighting colors, and horizon “fade” that makes it very challenging to even “hack” space settings, or other-worldy setting.

8 Likes

This would be a neat feature to add to Roblox, I strongly agree that the system could do with a overhaul to entice more developer’s imagination.

2 Likes

This would definitely be a super cool thing to add. The sky definitely needs more customization.

support since i prefer procedual sky more than ever, or just better skybox versatility. its just far more customizable.

also why are graphics feature requests ghosted so much??

1 Like