Crafts

Morph ball

AABB physics

A ball with gravity loose in a Metroid room — tile collision, bomb jumps, and a dithered lamp that is the only thing lighting the cave.

Tap anywhere to drop a bomb

Ordered dithering

Bayer 4×4

Three interfering sine waves crushed to one bit through a 4×4 Bayer matrix, drawn at a fifth scale and blown up with smoothing off.

Drop a ripple anywhere

Reaction diffusion

Gray–Scott

Two chemicals on a grid, one eating the other. Nobody drew the coral — it is four constants arguing, quantised through the same Bayer matrix.

Move over it to seed growth

Falling sand

Cellular automata

Sand, water and stone, one rule per grain. No bodies, no forces — just cells checking what is underneath them, bottom row first.

Move over it to pour sand

Metaballs

SVG filter

Blur a layer of circles, then crush the alpha channel with a colour matrix until they fuse. No maths, just a filter behaving badly on purpose.

One blob follows you

Marching squares

Isosurface

The honest version of the piece above — sample a scalar field on a grid, then trace the line where it crosses a threshold. Three thresholds, so it reads as a contour map.

Your cursor is a sixth blob

Verlet rope

Verlet + constraints

Three chains that never store a velocity. Move a point and it gains momentum for free, because the physics reads it from where the point used to be.

Grab a rope and throw it

Truchet tiles

Canvas 2D

Two quarter-arcs per cell, one of two rotations. Neighbours join up and the whole grid reads as continuous loops nobody drew.

Click to send a ripple

Flow field

Value noise

Four hundred particles reading their heading from a drifting noise field. Trails are erased rather than painted over, so it floats on any background.

Cursor bends the field

WebGPU icon shader

WGSL

The icon at the top of every page. Seventeen gradient rows, each sweeping at its own phase, plus film grain. One uniform buffer, no textures.

Pick a palette

Everything above runs on one shared animation loop that pauses whatever scrolls off screen. Open any card to play with it properly, with the maths and the full source. The rest is on GitHub.