One module, one source of truth
Every material exports its name, its TSL apply() function, and the readable source fragment displayed in the Lab.
Shader Lab is Aurelius' public rendering workbench. Pick a material, drag the geometry, adjust the clock, and inspect the source that built the result. Every material here is a reusable module verified on both WebGPU and WebGL2 before it appears.
Interactive workbench
DRAG TO ROTATE · SCROLL TO ZOOM
Loading the pinned renderer and verified material modules.
These are not screenshots or separate shader forks. The material selected above is the same ES module used by the benchmark, the landing-page preview, and this dedicated workbench. The source pane is exported by that module, so it cannot silently diverge from the implementation. The chip list is not written here either — the page walks the library's own material roster, so a material that ships is a material that appears.
Every material exports its name, its TSL apply() function, and the readable source fragment displayed in the Lab.
The bench renders frozen parity frames, live animation, and a mobile advisory pass on WebGPU and WebGL2. Console errors and invalid frames fail the gate.
Each chip carries its measured cost class and baseline provenance. Expensive materials remain visible, but never hidden behind a performance claim.
Eleven new materials, each built on a mechanism the library did not already own:
Two sources, summed as phasors. The envelope of that sum has no time term in it, so the dark hyperbolae where the waves always cancel are drawn as the fixed geometry they are — not caught on a lucky frame.
The over/under swap of a plain weave chooses which way the fibre runs, and the anisotropic sheen band turns ninety degrees with it. An isotropic specular cannot make cloth flash in a chequer.
A second density sample offset along the light direction, attenuated through exp(−τ). That one-step light march is the whole reason a cloud has a blinding top and a flat grey base.
A logarithmic spiral advanced by a rigid pattern speed — the density-wave model. Arms made of fixed stars would wind shut within a few orbits. Colour comes from the Planckian locus, not from taste.
Each drop samples the backdrop at a coordinate inverted about its own centre, which is what a converging lens does. Every bead carries a small upside-down copy of what is behind the window.
Twelve mirror sectors give ice its point group; row parity turns stacked washers into mail; two rulings a few degrees apart produce rosettes at a frequency the shader never evaluates.
Ferrofluid, Cracked Clay, and Tiger’s Eye round out the wave — Rosensweig spikes gated by field alignment, crack width driven by a dryness field, and chatoyancy from a sheen band that slides along the fibres instead of sitting still.
Five library primitives shipped with this wave and are visible in their own right: interference (phasor sum with a time-independent envelope), weave (over/under interlacing), polarFold (mirror-fold into a wedge, promoted out of Kaleidoscope so one copy serves both), anisoSheen (the Kajiya–Kay fibre highlight), and valueNoise2D.
Modern browser rendering spans two backends: WebGPU uses WGSL and WebGL2 uses GLSL. Three.js Shading Language lets Aurelius author one node graph and compile it for both. That reduces parallel maintenance, but only if the graph is tested on both paths. The Lab exists to make that testable work public.
Materials receive a frozen clock for screenshot comparison, then run live under each backend. Differences beyond a material-specific tolerance block release.
Cost classes come from a documented Intel UHD 630 baseline. The live readout is your machine's current frame time, not a borrowed benchmark number.
Drag the knot, change the clock, and switch materials. Direct interaction is a useful test of behavior that static imagery cannot provide.