Inspiration
One of the most important aspects to creating immersive environments is having an animated dynamic sky. I wanted to build a drop-in system that anyone could use to add immersive day/night cycles to their worlds without complex scripting or asset setup. The goal was to balance simplicity for beginners with enough flexibility for advanced creators to customize and extend.
What it does
The Time of Day Dynamic Sky System animates the sun, moon, stars, horizon glow, and clouds through a full day/night cycle. Creators can set cycle length, starting time, and color palettes for dawn, noon, dusk, and night. It automatically handles star fading, horizon boosts at sunrise/sunset, and cloud rotation.
How I built it
The project was built in the Horizon Worlds desktop editor using extensive TypeScript scripting. Custom meshes and grayscale textures were modeled and painted to provide a base that can be tinted at runtime. The script drives transforms and material tints frame-by-frame, with inspector properties for easy configuration. The system was tested iteratively, refining rotation math, palette interpolation, and visibility toggles until the visuals felt natural.
Challenges we ran into
The Horizon scripting API presents some interesting challenges for tech art. There’s no shader graph, opacity animation, or built-in time system. So I had to work around this by building everything around the principles of transform rotation and tint color. Getting sun and moon paths correct, aligning sky tints with the right times, and ensuring stars faded in/out smoothly were all tricky.
Accomplishments that I'm proud of
I was able to build a complete, flexible prefab that any creator can drag and drop for an instant dynamic sky. The system smoothly blends between color palettes, keeps the sun and moon opposite each other, and even tracks in-game days with a clock display. It’s simple enough for beginners but powerful enough to be extended with gameplay events.
What I learned
I learned a lot about Horizon’s entity system, especially the difference between groups and MeshEntities, and how tint/visibility properties work. I also deepened my understanding of quaternion math for rotation, how to smoothly interpolate colors over custom timelines, and how to structure scripts so they’re readable and reusable by others.
What's next for Time of Day Dynamic Sky System
Future improvements could include weather variations (fog, storms, clear days), preset sharing, and integration with environment lighting if Horizon exposes those APIs. I’d also like to add optional gameplay hooks so events in the world can be tied more directly to the time system (for example, NPCs that wake up at sunrise or activities that only happen at night).


Log in or sign up for Devpost to join the conversation.