Depth before detail.
A depth-only pass establishes the visible surfaces before the expensive procedural interior shader runs. The colour pass uses equal-depth testing, avoiding repeated material work behind nearer walls.
Actual in-game frame · WebGL 2Work 002 / space-horror prologue
You come out of cryo alone.
Nobody else woke up.
Follow a failing ship toward the bridge. Something is waiting outside, and the light is already finding its way in.
Enter the ship▶Desktop keyboard + mouse · WebGL 2 · headphones
Horror atmosphere, darkness, flashing alarms and sudden sound.
Implementation notes
Procedural surfaces are costly even when the room looks simple. The renderer avoids hidden material work, limits the exterior to visible windows, and gives distant detail a smaller budget.
A depth-only pass establishes the visible surfaces before the expensive procedural interior shader runs. The colour pass uses equal-depth testing, avoiding repeated material work behind nearer walls.
The renderer projects the ship’s viewports to screen-space rectangles and scissors the half-resolution exterior to those bounds. Away from a visible window, it skips that pass entirely.
Each anomaly supplies a tiny GPU probe with a light direction and colour. The same interior can respond to three different skies; window intersection tests decide where that light reaches the ship.
← Back to NotesThe render scale drops when the frame budget stays under pressure, then rises again when there is headroom. Distant surfaces also use fewer noise octaves: tiny material detail should not cost more than the pixels that can show it.

The details that give it weight
The ship is voxelised at startup; vertex-level hemisphere sampling bakes occlusion into the geometry. Corners have weight before the moving lights arrive.
Generated planes also get a winding audit. A normal can light a wall correctly while its triangle order makes it disappear from the side you meant to see.
Web Audio generates the ship’s layers and one-shots, with positional emitters, surface-dependent footsteps and story-driven intensity. There are no recordings hidden behind the soundtrack.
Before you enter
W A S D move · mouse look · E interact · F head lamp · Shift run · Esc return to the game menu.
Click inside the game to capture the mouse. Use “Stop & return to WAKE” above the player to unload the experience and its audio. Touch controls are not implemented.
WebGL 2 is required. The renderer uses floating-point HDR when available and falls back to an 8-bit buffer otherwise.