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.
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.
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 Pluto–Charon 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