Color filters for celestial objects (Sun, Moon, and others)

Related feature requests:

Problem

As a Roblox developer, it is currently impossible to achieve a color shift effect on celestial objects (Sun and Moon) as what would happen in reality. See this post for additional information. In reality, at dawn when the sun rises from the horizon, it takes on a yellow-orange hue which gradually transitions to white as the sun climbs in the sky. At sunset, the sun can take on a orange or even red hue as it slips behind the horizon. The same thing happens with the moon. When the moon rises or sets, at the horizon, the moon has a yellowish hue to it. But when it’s higher in the sky, it’s more white.

Use Cases

The following use cases are presented.

Use Case 1

Since Roblox games tend to be situated on terrestrial environments (Earth), it would make sense to keep things white. However, the first use case was specified above, and will be repeated here for completeness.

Even on Earth, a number of physical processes cause celestial bodies (Sun and Moon) to change colors depending on where they are at in the sky. For instance, since the Earth’s shadow is red, the moon turns red during a lunar eclipse. Additionally, the moon appears more yellowish at or near the horizon than it does when high in the sky. This is due to atmospheric backscatter which scatters the shorter wavelength photons when they pass through the atmosphere. A similar situation occurs with the sun. When the sun is at or near the horizon, it takes on a more yellow-orange hue (or even red at sunset) than when high in the sky.

Another effect is the apparent size change as the celestial objects travel through the sky. It is well known that the moon, in addition to having a more yellowish hue, is also larger. Although not part of this feature request, I have been able to achieve this using tweens for the Sky instance properties of MoonAngularSize and SunAngularSize.

Therefore the first use case is to provide a more realistic environment for players who are immersed in these environments. By simulating the physical processes involved through software by applying color filters to celestial objects, such realism can be achieved, even with the default Roblox provided textures for the sun and moon.

Use Case 2

The sun (Sol) has a stellar classification as a G5 star with an average surface temperature of about 5900K. Being a black body radiator, this makes the sun a predominately yellow star. However, most stars within the Milky Way galaxy are class K and M which means they are orange and red stars. Stars that are O, B, and A don’t live as long (millions as opposed to billions of years). They output more energy, therefore their colors shift to white and blue-white. See the image below:
image

To achieve the effect of an non-Earth environment in which a planet orbits a different star, a color filter for celestial bodies would be of paramount importance. If these feature was implemented, using the above chart, one could create an accurate immersive alien landscape with the sun being red or orange in conjunction with ambient colors for lighting.

Implementation Suggestions

One possible way to implement this would be to apply the mechanism that is used to color images for ImageLabel, ImageButton, and Decal classes. These classes have a Color3 parameter which can be used to tint or color an image.

Conclusion

If Roblox is able to address this issue, it would improve my development experience because it would enable the creation of more realistic environments for player immersion.

17 Likes

It would be awesome to have a feature that does this.
But so far, what works for me is to make a 10000x10000x10000 inverted sphere mesh, apply a highlight to it, set it’s material to glass and 100% transparency, set the highlight fill transparency to 2, outline transparency to 1, and tweak the fill color until the sky gets tinted orange. It’s like a skybox specific color-correction effect, but without the contrast property. Oh, but you can make it invert colors.

If it were possible to have an object greater than 2048x2048x2048 studs, then this would be a viable solution. But as it stands, it’s not really feasible. That gives me an idea for another feature request though. I have in the works a space game that has VERY large structures such as moons, planets, and stars (you can visit anything in the star system). If you have ever played EvE Online, it’s something along those lines.

1 Like

This would be a nice feature. Especially for non-Earth environments. (Personally I’m working on a horror game so that incomprehensible different colored sun/moon would be an awesome tool). It could be something as simple as giving them a Color3 value. I definitely support this idea.

You can use SpecialMesh’s Scale property to make the visual mesh appear as large as you want, but the collision remains as a box. You can only make it like 90000studs in radius because the camera will stop rendering surfaces past 100,000 studs.

Well. I was not aware of that. Man, that’s actually pretty cool. The big question that I have now then is what if your coordinates are past 100,000 studs? If you have ever played the game EvE Online, each solar system is a separate place. Unlike other MMORPG style games, this one is based in space. That would make moons, planets, and stars much easier to deal with.

I wouldn’t recommend going out as far from the origin of the world, since you begin to notice floating point rounding errors which intensify the further out you go. I think if you still wanted crazy long distances, you could either shrink the world so the ratios of the world remain the same or somehow find a way to change the components of Vector3 (used in CFrame) to use doubles instead of just numbers, as they are far more precise and allow you to go out significantly further before running into issues with rounding. But I think most people will settle with hiding a loading zone in-between different areas to avoid those issues.

What I meant by things not rendering past 100,000 studs I meant in the context of distance from the camera. If you are out at 500,000 studs you can still see the world, but issues will definitely be present. It is just that, if you were to move out 500,000 studs, you would no longer see the baseplate, no matter how much you zoom in, until the moment you are within 100,000 studs of the baseplate, at which point seeing the baseplate is possible.