ForMatter/Previews
Wireframe sphere on the left, rendered sphere on the right — two ways to look at the same body.

Previews

Every material on this site shows a sphere. Two different things render that sphere depending on context: a stylized CSS proxy at thumbnail size, and a real-time WebGL render on entry-page heroes. This page is the map.

The CSS sphere proxy

A gradient ball, finish-aware, drawn entirely in CSS from the entry's authored palette (base / highlight / shadow / accent). Owns every thumbnail position — listing pages, by-finish gallery, substitute pills, search results — and stands as the fallback for browsers without WebGL2 or for users who turn the live preview off in Preferences. Stylized, never claims to be photoreal, scales to six hundred entries cheaply, reads as the right family of material at sphere-thumbnail distance.

The WebGL live preview

A real-time Three.js MeshPhysicalMaterial sphere, lit by a synthetic studio environment, draggable. Renders on every entry-page hero across every category — metals, woods, polymers, ceramics, paints, textiles, gemstones, glass. Same derive_pbr() values that feed the Blender / Rhino / glTF / USD snippets drive what you see here; one source of truth, one renderer. Optional — disabled per browser in Preferences for slower hardware.


The principle

One render path, every material. Earlier rounds carried four — CSS proxy, WebGL with hand-tuned per-family recipes, Cycles turntables baked from a third-party material library, static Cycles renders — and each fell down at a different boundary: the WebGL recipe couldn't reach gem refraction, the Cycles library didn't cover all 25 gemstones, the static renders didn't rotate. Replacing the lot with a single MeshPhysicalMaterial setup lit by a synthetic environment gets one code path that carries every category, including the gems that broke earlier passes. The CSS proxy stays as the floor — never wrong, never over-promising, always there.

What this means in practice

Open any entry page. The hero sphere is the live render, drag it to rotate. Click into a thumbnail elsewhere (on listings, in the by-finish gallery, on a substitute pill) and you're looking at the CSS proxy. They share the same authored palette, so the family read is consistent across both — what you see in the listing matches what you see on the entry page, just at lower fidelity.

If the live preview is missing on an entry page, your browser doesn't support WebGL2 (rare) or the Live Preview is turned off in Preferences. The CSS proxy fills the spot.