[Studio Beta] Beyond Static Skies: Rotate Your Worlds with SkyboxOrientation!

Hi Creators,

Get ready to add a subtle yet impactful new dimension to your experiences! We’re happy to announce the release of Skybox Orientation as a Studio Beta, allowing you to easily manipulate and rotate the textures of your skybox at virtually no rendering cost (low performance cost and zero memory cost).

Rotate Your World: Introducing Skybox Orientation

This new feature gives you precise control over the orientation of your environment map, opening up many creative possibilities.

When enabled, you’ll find a new property, SkyboxOrientation, conveniently located under the Sky instance within the Lighting service. Its Vector3 values (X, Y, and Z) determine the rotation angle of your skybox textures, measured in degrees.

By default, all values are set to zero, ensuring existing experiences remain visually unchanged and incur no additional rendering cost.

Once you introduce non-zero values, your skybox textures will rotate sequentially around the Y-axis, then X, and finally Z. This behavior is consistent with how most other Roblox orientation properties function, making it intuitive to use.


The new properties with their default values


Tilting the sky 45 degrees about the x-axis.
Note that the moon & stars didn’t change since they’re not part of the skybox.

The ability to rotate your skybox enables a diverse range of effects and visual storytelling:

  • Dynamic Sunsets: If your environment map features a sunset, simply rotate around the Y (up) axis to reposition the sunset and shift the mood of your experience throughout the day.
  • Cosmic Journeys: For space-themed experiences with nebulae environment maps, you can go wild and spin them in any direction imaginable to create mesmerizing cosmic vistas.
  • Unique Perspectives: Want to flip your environment map upside down in a “Modern City” setting? Why not! This feature lets you experiment and push the boundaries of your visual design.

Scripting the SkyboxOrientation

The new SkyboxOrientation property is fully animatable with Lua script and is replicated, meaning all players will see the same skybox rotation.

For instance, to create a continuously spinning skybox with a subtle 45-degree tilt, you can use this simple script:

local sky = game.Lighting.Sky
local rotationSpeed = 10 -- Adjust this value to control the speed

game:GetService("RunService").Heartbeat:Connect(function(deltaTime)
	sky.SkyboxOrientation = Vector3.new(45, (sky.SkyboxOrientation.Y + rotationSpeed * deltaTime) % 360, 0)
end)

-- Rotate around Y (Up) first, then apply X and Z for the tilt

:bulb: Understanding Rotation Order:

When you apply rotations around more than one axis, the order in which they are applied matters. For SkyboxOrientation, we apply rotations in the order of Y, then X, then Z. This means if you want your sky to spin and be tilted, you can animate the Y-axis for the spin and set the X and Z values for the tilt. The script above, for example, animates the Y-axis for spinning while keeping a consistent 45-degree tilt on the X-axis. This gives you predictable control over complex movements.

Imagine animating a space-nebula skybox to create the convincing illusion of a space station spinning on its axis, mimicking gravity. Or, reorient, speed up, or slow down your spinning sky based on in-game events – the possibilities are endless!

Important Considerations and Limitations

We’ve designed Skybox Orientation as a low-cost feature that works seamlessly across all platforms and quality levels. We encourage you to dive in and experiment!

However, it’s important to be aware of a few intentional visual limitations:

Under the hood, we rotate the skybox and then counter-rotate reflection vectors. This technique creates the intended illusion without the need to costly re-bake reflection probes. The trade-off is that certain effects will not reflect the rotated sky:

  • Indoor Reflections: If the sky is visible in indoor reflections (e.g., through an open window), that specific reflected view of the sky will not be rotated. Achieving this would require expensive re-rendering and convolving of cubemaps, which would significantly impact performance and broad availability. This is a deliberate design choice to ensure the feature remains widely accessible at low cost.
  • Sun, Moon, and Stars: Only the skybox textures rotate. The sun, moon, and stars remain unaffected by the SkyboxOrientation setting. As you can see in the screenshot above with the tilted clouds, the moon’s position doesn’t change.
  • Clouds Feature: Similarly, the existing Clouds feature (under Terrain) is not impacted by Skybox Orientation.

Keep in mind these are by design. This feature focuses specifically on rotating skybox textures and delivering corresponding reflections, and does not extend to other elements.

Interaction with ViewportFrames

If you utilize a Skybox within a ViewportFrame, it will reflect the global SkyboxOrientation values. You cannot override the orientation on a per-viewport basis. This aligns with the existing pattern where you can change skybox textures within a ViewportFrame, but other global settings are inherited.

Next Steps and Feedback

To start experimenting, simply enable the Skybox Orientation feature in your Studio Beta Settings! Take your sky for a literal spin and observe its behavior with different setups.

We’re particularly interested in your feedback regarding any reflections that appear “off,” keeping the above limitations and design choices in mind.

We view this as a stand-alone feature that is largely complete, but we’re always eager to hear your thoughts and discover how you’re leveraging it in your creations!

Thanks for your valuable feedback, and we hope you enjoy bringing a new dimension to your experiences with Skybox Orientation!

Best,
Roblox Rendering Team

458 Likes

This topic was automatically opened after 10 minutes.

This week is looking really good omg. Before this, meshes were used and would be the skybox and you can rotate it. Those days are over! I will be looking forward for it to work in game. This will greatly improve the immersive experience.

10/10 announcement! :fire::sparkles:

54 Likes

This is very cool. I hope to see this expanded on in the future with other things like clouds as well. But what I ultimately want to see is the ability to put objects inside of the Skybox so that it is rendered at the same level. This would allow for things like custom clouds with that same behavior, or even better, custom celestial objects. I’d love to be able to have planets inside of the Skybox that allow it to appear much larger than the actual rendered object is, and also allowing it to interact with lighting on a perceived large-scale (when it’s actually small-scale).

To summarize, I’d like to see the ability to have objects render behind the Workspace like the Sky does.

50 Likes

Wow . Well I did not think Roblox would add this . Very good, I’m going to be using this !

13 Likes

The creator of the spinning storm skybox egg must be proud.

45 Likes

This should be exposed as a CFrame property, not a vector3. Exposing it as a vector3 disallows us from using CFrame math operations to manipulate rotation.

Besides that, great feature that’s been long overdue. However, I’d like to see more work being put into procedural/dynamic sky systems rather than static cubemaps.

17 Likes

You can convert CFrame to Vector3 rotation:

function CFrameToOrientation(cf: CFrame)
	local rx, ry, rz = cf:ToOrientation()
	return Vector3.new(math.deg(rx), math.deg(ry), math.deg(rz))
end
26 Likes

Fake planets gonna be so much easier to make now

11 Likes

I’m aware, it just adds an additional layer of unnecessary complexity to my code, albeit small.

6 Likes

As somebody who requested this back in 2013 (!!) THANK YOU

Would love to see support for more procedural skyboxes, night/star upgrades, and tweening between skybox imagery. :heart:

62 Likes

Thank you for this. Skies are a vital object that have rarely seen any improvements since their first addition nearly 20 years ago!

I’m hoping this means they’re being considered for more; I know for a fact developers have been wanting the ability to tint skyboxes or fade between 2 different skies for years now. Maybe support for ZIndex/Transparency?

16 Likes

We need tweening skyboxes next. So a skybox fades into another one, instead of instantly switching.

33 Likes

I like this. Is there any chance we could also have something like skybox layers? For example, if my experience’s setting is on the surface of a planet with a ring system, I would want the ring to be part of the skybox, but I would probably not want the ring to rotate with the sky if I’m doing anything like that dynamic sunset thing that was described.

8 Likes

HOLY HECK! moving skyboxes??!! This is NEW! and VERY useful for space games

10 Likes

Awesome man. Hopefully we can get HDRI support soon.

8 Likes

I always thought ROBLOX would never touch skyboxes again. I stand corrected, this is awesome!

7 Likes

This is one of the most unexpected updates that I anticipated would be released next.
I can already see how well it will fit with the ideas I wanted to implement earlier in my game. Thank you! >:)

1 Like

This is wonderful! I really love this and I will definitely enjoy playing around with this feature.
I am however wondering, do you guys plan to ever add custom reflections/cubemaps?

I’ve made a post about what I imagined this would work, so I would definitely love seeing this coming out as well someday! :]

4 Likes

Playing with this now, if I have any feedback: Positive Y numbers should spin the Skybox right instead of the left it is now.

Nevermind, apparently the same way Roblox handles rotation on other objects.

8 Likes