Solaris

View Live
Audiovisual / spatial audio experiment depicting the solar system. Solaris uses positional audio attached to each planetary object to place the listener at the centre of the sound stage.
Brief screen recording of the Solaris 3D project (no audio)

Solaris is a spatial audio experiment built around the solar system, using positional sound to place the listener at the centre of an ever-shifting sound stage. Each planet carries its own audio layer, and as the planets orbit, the sound moves with them. Fly the camera somewhere new and the mix changes with you: proximity, distance and position all shape what you hear.

The whole piece runs in the browser using React Three Fiber on top of Three.js. Every planet and the sun share a single custom shader material, which kept the render pipeline lean and let me focus effort on tuning rather than managing a scattered library of one-off materials.

Shared shader, per-planet control

Rather than writing separate materials for each celestial body, I built one shader and exposed a wide set of uniforms so each planet could be tuned individually in situ, colour, surface detail, glow, atmosphere thickness, all adjustable without touching the underlying shader code. This made it possible to iterate on the look of the whole system quickly, nudging one planet at a time until the overall balance felt right.

The score is my own composition. Each planet holds an infinitely looping audio layer, and I deliberately gave each loop a different length. The result is a piece that never quite repeats itself, the loops drift in and out of phase with each other over time, so the harmonic relationship between planets is always shifting.

Positional audio as compositional tool

Because each layer is attached to a planet in 3D space, moving the camera through the scene effectively remixes the piece. Flying close to one planet brings its loop forward; pulling back blends everything into a fuller, more distant wash. The camera becomes an instrument adjusting the sound stage, not just a way of looking around.

A small mixer sits alongside the scene, letting you manually adjust the level of each planetary layer. On load, those levels are randomised, so no two sessions sound quite the same from the start.

Most of the build time went into atmosphere: getting the shader glow right, balancing the audio layers against each other, and making sure camera movement felt smooth and intentional rather than mechanical. It's a small piece in scope but a dense one in craft, built entirely solo across React, React Three Fiber, Three.js and custom sound design.