Currently, it’s impossible to blend two or more skyboxes together to create seamless transitions and dynamically changing skyboxes. You can only change the skybox instantly, which does not promote immersion.
If we could layer and blend skyboxes, this would allow us to seamlessly transition between them. This would be useful for effects such as moving into different environments or changing backdrops for a storm or other environmental situation.
I replied to someone below and decided to include it up here for clarity’s sake:
Currently, the only workaround I can think of for this is mapping a skybox to the inside of a sphere and blending textures, but that wouldn’t work for existing skyboxes that are built to be added to Lighting.
I definitely feel like this should be a thing. We already have Skybox instances so why can’t we have multiple? Could be done via a Skybox.Transparency property. That would allow for blending of skyboxes and a smooth transition between them. The background skybox could be a solid color (e.g. black)
Perhaps I used the word “Blend” too loosely. The main takeaway is that we should be given a Transparency property for Skyboxes. As you can see, texture instances already have such a Transparency property:
But how would an opaque skybox act? This feature seems to be only useful for your specific case and most games don’t actually require animated skyboxes. Textures have a transparency property because of alpha channels being a very common thing in models, but not skyboxes. Clouds are a different story, but they are most often procedurally generated.
Blending for skyboxes would be a useful feature for games that are in an open world. The current skybox system already does this, but at a suboptimal level - purely for blending from the skybox to the default night skybox Roblox has. Obviously the only usecase for this feature is to have blending skyboxes - it’s literally the title.
Perhaps if this feature was implemented, itd encourage games to utilize it. No games had dynamic lighting until Roblox implemented it.
Well said. I think it’s a “nice to have” feature. Not exactly critical, but I don’t see why we shouldn’t have it. It would add that much more depth to the visuals we can achieve.
I think Skybox instances can easily get a ZIndex/Transparency property. Perhaps they could extend from Texture instances since they are very similar. I don’t see the point of bashing this feature request, it’s up to Roblox to decide that stuff not you.
To answer your other questions:
The sky can have a default background color for transparent skies. This probably wouldn’t need to be controlled by a property, but it would be preferred. It could just be black or white if a transparent skybox is inserted. Without a skybox the sky would remain the default Roblox skybox (meaning backwards compatibility)
Opaque skyboxes will overlay on top of each other like any other opaque texture. I don’t know what the purpose of that question is because it would behave exactly the same as it currently does. Insert two skyboxes and one will display over the other.
Alpha channels are not common in skyboxes but transitions via Transparency are very very common. I’ve seen tons of games that do this. Exhibit A: Minecraft
With this feature we could:
Quickly create performance-cheap lightning
Create other weather effects such as adding clouds during different situations while keeping a default sky
For events or holidays we could overlay different textures to follow the theme of the event
Tons more. I could list a hundred ideas that I think would be cool for all genres of games
It is up to us to question whether a request is required though.
Minecraft is a bad example as it has a single skybox layer. They only change its hue depending on the time and when the player is looking at it, while the stellar objects are just polygons.
Anyways, you didn’t actually explain why this would be a better solution to a texture blending API, but essentially rendering something to a canvas before applying it to the skybox instead of doing it directly seems like a waste of memory so I understand why this request would be useful.
That’s not how rendering works at all. There is no “direct rendering.” It’s all drawn to the screen somehow. A “canvas” is nothing but an API meant to handle this for you. By the same “memory usage” argument you’re basically saying that decals and textures should only support one image at a time because having more than one takes up more memory. Of course it does and nobody wants to limit themselves to one texture. If you don’t want multiple skyboxes that’s up to you to decide.
Why exactly do I need to explain why a blending API is expensive? You should be able to figure out why that would have much more of an impact on CPU, memory, and GPU. And Minecraft is still an example of how this sky blending is used. The implementation is completely irrelevant to the feature! That is stated in the feature request guidelines.
Nobody said this request is required. By that logic no features should be implemented because we’ve been making Roblox games without them for more than 10 years.
Because you wrote an entire rant about it without giving a single reason why my link to another request wouldn’t be suitable? I’m going to rewrite what I said in my DM to you about why canvases aren’t a good solution and why I was wrong.
A canvas is just a fancy word for an image container. Viewports use them as they allow you to avoid re-rendering a scene each frame at the cost of memory. Using an API would create an image composed of multiple blended images which would basically be a canvas. This would make it highly inefficient for animated skyboxes which would be the main use of this feature.
You said yourself that Minecraft uses alpha, which is wrong and I tried to correct you. Apparently you got offended by that, so here we are.
I did not ever ever say Minecraft uses alpha. Alpha has nothing to do with this. It was an example of this feature being used which is exactly what I said if you read my post before getting angry. You aren’t correcting me you are just attacking me. A “canvas” doesn’t avoid “re-rendering” a frame. That’s impossible. It’s not at the “cost of memory.” There is always memory being used to draw images. If you want to continue this, use DMs like I have already tried to and stop replying here.
Additionally, that was in reply to this post, not the post containing the link.