— TECHNIQUE
Discrete mean-curvature flow, with no rendering between you and it.
The signature element is the solver itself. Each film is a plain Float32Array mesh:
every frame, each triangle reports the exact gradient of its area to its three vertices
(½·N×e per opposite edge), vertices accumulate a lumped mass of one third of their
incident area, and every unpinned vertex steps downhill by −∇A·dt/m — mass-normalised
area descent, the discrete cousin of mean-curvature flow. Boundary vertices are soldered to the
wires. A tangential Laplacian (projected off the vertex normal so it cannot fake area loss)
keeps the triangulation from starving anywhere, and the stepped positions are written straight
into the three.js BufferGeometry with recomputed normals — the render is the
simulation state, nothing tweened.
The colour is a fresnel-shifted thin-film sketch in one fragment shader: optical path length
grows as thickness / cos θ, so a cosine palette phased 120° apart makes
magenta and cyan crowd the silhouette exactly where a real film's fringes crowd
grazing incidence. Opacity rides the same fresnel term, which is why the film is glass-clear
face-on and burns at the rim.
The snap is not scripted. Past the critical gap the descent has no floor: the neck pinches on
its own, a watchdog only guards the integrator (if the neck stalls at full step size, the
step is cooled — a hot dt can bounce instead of collapse), and when the neck radius crosses
0.085 R the mesh is handed to a Goldschmidt build whose starting area sits just below
the area at the pinch, so the readout keeps one continuous downhill argument through the whole
event. Once any film stops improving at full step size it is frozen at its best computed state —
equilibrium, honestly reached, cheaply held.
0.8479 / 0.8483NECK, SIM / EULER EXACT
120.1° 120.0° 120.0°CUBE DIHEDRALS AT MINIMUM
2.6479 / 2.6473HELICOID AREA, SIM / CLOSED FORM
6.2653 / 48-GONGOLDSCHMIDT DISCS, EXACT ON THE MESH