A soft little man.
Shaken by small things.
Learning to hold his shape.
Grab him anywhere and pull. Let go and watch him settle. Try the same poke in every chapter.
Illustrative units: 1 sim unit = 10 cm. Mass is the sum of tet volumes × an assumed 1.05 g/cm³; kinetic energy in µJ at that scale.
He is a volumetric soft body: a few thousand tetrahedra on — particles, cut from a lattice around an implicit (SDF) figure. The glossy skin you see (— vertices), the amber core, the face beads and the air bubbles are not simulated separately — each point is embedded in a tet with barycentric coordinates, so it moves, stretches and rotates with the jelly around it.
XPBD on the GPU in WGSL compute shaders: 720 substeps per second, each tet carrying a deviatoric (shape) constraint and a volume constraint, solved Gauss–Seidel in — graph colours so no two threads touch the same particle. Volume stays within a few percent; a strain limit keeps him from tearing; a NaN guard and inversion-safe volume term keep him whole.
Every story beat is a uniform: per-region compliance (core vs. flesh), damping, gravity, shiver, flinch and a blend of three precomputed rest poses (tense, slumped, upright). In I damping is nearly zero, so a poke rings for seconds. In II he is soft and heavily damped under 1.5 g: no rebound, just ooze. Each session in III moves one “set” value. In IV his core is about ten times stiffer than his skin and damping is close to critical: one or two wobbles, then stillness.
A back-face pass gives thickness; the front pass refracts the studio behind him, applies Beer–Lambert absorption and in-scattering, lets light through thin hands, feet and the rim of his head, and adds Fresnel studio reflections. The core is a cloudy amber volume seen through the jelly. Contact shadows are percentage-closer soft shadows, tinted by the light passing through him.
If this feels familiar, talking to someone helps.
This browser did not provide a WebGPU device.
The jelly is a live soft-body simulation running in WebGPU compute shaders, so there is no fallback renderer. WebGPU is available in:
If you are already using one of these, check that hardware acceleration is turned on, or try chrome://gpu to see why WebGPU is blocked.