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
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