GPU-driven pipeline
Frustum, horizon and distance culling, LOD binning and indirect dispatch run in compute shaders.
About 400,000 lines of TypeScript and WGSL, organised into focused modules with strict contracts between them. Here is what is inside.
Bract was designed for WebGPU from the start, not ported to it. The frame is built from compute: the GPU culls, bins and dispatches its own work, and a residency system pages data in as the camera needs it.
Frustum, horizon and distance culling, LOD binning and indirect dispatch run in compute shaders.
Virtual-memory-style page allocation and eviction under a per-frame budget.
Page-resident shadow maps driven by what receivers actually need, sharp up close and stable at distance.
Roughness, metallic and AO workflows, plus 8-sample spectral reflectance, detail normals and triplanar sampling.
16-bit targets, pre-exposure and tone mapping, with depth of field, motion blur and lens effects.
Camera temporal history, temporal anti-aliasing and roughness-aware specular anti-aliasing.
The sky is simulated, not painted. A spectral atmosphere drives the sun, the sky dome and image-based lighting, so every surface sits in the same light as everything around it.
Precomputed sky lookup tables, updated live from celestial positions.
GGX-prefiltered specular and irradiance convolution, taken from the live sky.
GPU light binning for dense punctual lighting at predictable cost.
Probe-based global illumination for indirect light.
Large worlds break most engines at the edges, through precision loss, streaming hitches and shadow swimming. Bract treats scale as a primary constraint in every subsystem.
Entity positions are stored in double precision and rendered through a floating, cell-anchored origin.
Separate visual and physics trees, organised into cell bands for streaming.
Multi-scale spatial grids driven by what the observer needs.
Planets and stars placed from ephemeris data, connected to terrain at planetary scale.
The generators are first-class engine modules. They are seeded and deterministic and run on the GPU or in WASM, so a world can be described in kilobytes and rebuilt anywhere.
Layered noise stacks, biome layers and thermal, particle and wind erosion, run as GPU compute stages.
Virtual texture atlases with biome-driven surface materials and LOD streaming.
Procedural trees compiled through WASM and scattered by biome, with LOD built in.
Procedural mesh building with CSG, deformation kernels and surface generation.
Simulation runs in fixed steps and is deterministic by tier. The same inputs give the same world, which makes replays, networking and testing practical.
Jolt, Havok and a native TypeScript solver behind a single adapter contract.
Bit-exact CPU math, structurally stable GPU generation and visually stable rendering, each guarded by CI canaries.
FFT ocean surfaces and GPU-resident fluid state.
Compute-driven particles and an effects framework with a budget governor.
Data-driven event rules, keyframe curves and attachment lifecycles under budget control.
Backend-abstracted audio with spatialisation and worklet processing.
Every subsystem sits behind a typed contract, and every major decision is recorded before it is built. The engine is meant to grow for years without collapsing under its own weight.
Rendering, physics, compute, audio, input and HUD backends can be swapped without changing game code.
A null render adapter runs the full engine in CI with no GPU attached.
Serializable state lives in an entity–component model built for persistence.
64 architecture decision records cover the renderer, streaming, determinism, content and tooling.
Early access opens in waves for studios, technical artists and teams building large worlds on the web. Tell us what you are making.