Brownian

Method  /  Generative Assets · Wave VII — Chance

How Brownian was made

A GPU field of 65,536 pollen motes, each kicked by independent Gaussian noise every frame. One mote is traced in gold; a side plot measures the crowd's mean-square displacement rising in a straight line — the moment randomness turns into the law that weighed the atom.

01The concept

Robert Brown's 1827 puzzle — pollen that jitters in still water for no visible reason — is the seed of the atomic theory. Einstein's 1905 paper showed the jitter is water molecules bombarding the grain at random, and that the grain's mean-square displacement must grow linearly with time, ⟨r²⟩ ∝ t. The site's single job is to let a viewer see both halves at once: the incomprehensible chaos of one grain, and the ruler-straight law hiding in the average. The audience is anyone who likes the idea that panic, repeated enough, becomes physics.

02Palette

Argued from the subject: dark water, pale motes, one gold thread. The mote colour is a line/mark token; body copy uses a dedicated high-contrast ink so nothing small ever sits on the bright accent.

Dark water

#0B0E12

The still medium. Near-black with a blue cast so the field reads as fluid, not void.

Mote (line/mark)

#AEBED2

Cool pollen-pale. Marks and points only — never small text.

Tagged trail

#E0C24A

The one traced grain and the measured MSD line. The only warm note in the frame.

Foam ink

#DCE2E8

Body copy. ~14:1 on dark water — reads at any size.

Muted ink

#9BA6B4

Secondary copy and labels. Derived to hold ≥4.5:1 on the ground.

03Type
04Technique

Hardening throughout: DPR capped at 2, sized to the container, resize-debounced, rAF paused on document.hidden with a clamped delta on resume, a WebGL context-loss fallback (static gradient + a still MSD plot), and a reduced-motion path that primes one settled frame and never starts the loop.

05Iteration log

Pass 1 — Craft

Found: the storm read as flat static; motes were uniform size and opacity, so the field had no depth. The MSD plot's theoretical line and measured line were the same weight, so you couldn't tell which was the law and which the measurement. Hero lede wrapped to six lines on desktop.

Changed: gave each mote a per-instance size/alpha from a hashed random for a granular shimmer; made the analytic line a thin dashed pale-blue and the measured MSD a solid gold with a head dot so the story is legible at a glance; tightened the lede to 34ch and re-set the type scale.

Pass 2 — Depth

Found: the traced walk was a single flat gold colour — no sense of time in the tangle. The plot reset was an abrupt jump. No second-read reward.

Changed: added a per-vertex fade along the trail (old strokes dim, recent strokes bright) so the eye can read the walk's direction; let the MSD loop refill smoothly from zero so it visibly re-derives the same straight line every cycle — the second-read detail is realising the line is inevitable, not lucky; added the live head dot pulsing at the walk's tip.

Pass 3 — Hardening

Found: at 375px the instrument card crowded the hero and the two nav links plus wordmark were tight; DPR wasn't clamped on the head-dot sprite; reduced-motion still spun up the loop briefly.

Changed: single-column hero under 860px with the card capped at 440px, hid the "Method" nav link under 480px (it survives in the footer), clamped every pixel-size uniform to DPR≤2, and gated the animation start behind the reduced-motion check so it renders exactly one primed frame. Removed one ornament — a decorative corner tick on the card — per the Chanel rule.