ANAMORPH
METHOD NOTES

Making Anamorph

Anamorph is a fictional single-work gallery: six hundred flat shards suspended in a white volume, meaningless from everywhere except one station, where they lock into a red circle inscribing the word FORM. The page has a single job — walk you past the lock once, and make you wait for the second pass.

01

Concept

The piece borrows Felice Varini's move — paint scattered across architecture that resolves from one point — and rebuilds it as live geometry. The figure is never faded, morphed or crossdissolved into place. The shards hang still; only the camera moves. The lock is the one moment the projection happens to agree with the drawing.

02

Palette

Argued from the gallery, not from taste: white walls, one red, and the greys a room makes by itself.

#E9E7E2
Gallery white — walls, air, page ground.
#C8202F
Varini red — the figure, the station disc, eyebrows and lock state. Lines and marks only, plus large type.
#9A968E
Shadow grey — hairline dial track and mid-tone debris. Never body text.
#1E1C1A
Wall-text ink — headings and body copy on the light ground.
#57534C
Derived muted ink for captions and HUD — keeps small text above 4.5:1 where the spec grey could not.
03

Type

Hanken Grotesk

Display and body. A humanist grotesk with museum-signage plainness; weight 800 tightened to −0.025em carries the wordmark and the outlined FORM ghost — the page's one moment of typographic excess.

Anonymous Pro

The surveyor's voice: station labels, the Δ / θ / ALIGN readout, stat blocks. Everything measured speaks mono; everything argued speaks grotesk.

04

Technique

Vanilla three.js (0.160), one InstancedMesh of 600 plane instances, no textures, no post. The figure is authored flat in image-plane units — a ring of 130 tiles and four letters sampled into ~100 stroke tiles. For each tile, four rays are cast from the station through its corners. A depth t is thrown along the centre ray, the first corner is displaced to t(1+ε), and the remaining three depths are recovered from a 3×3 linear solve so the four corners form a genuine tilted parallelogram still riding all four rays — the one-parameter family of planes that project exactly to the original rectangle. Each solution becomes an instance basis matrix, so the anamorphosis is exact by construction: a verification hook reprojects all ~940 corners at runtime and reports a residual around 10⁻¹⁵ units.

The camera walks a closed centripetal Catmull-Rom loop whose first control point is the station. Time is choreographed in three segments — a 12 s drift through the debris, a 13 s approach easing in-out-cubic so velocity dies exactly at the lock, then a 1.8 s dwell at the exact pose — and orientation is a quaternion slerp from the walking gaze to the lock gaze, weighted by a bump that reaches 1 only at the station. Cursor parallax lets you lean off the path everywhere except near the lock, where its gain is scaled to zero: the viewpoint is not negotiable.

Housekeeping: shards that would pierce the floor get per-ray depth caps; a cone around the sight line is kept free of grey debris; the floor grid fades to the background colour before the figure zone so nothing hangs below a visible plane. DPR capped at 2, rAF paused on document.hidden, reduced motion renders the locked viewpoint as a settled frame, and context loss swaps in an inline-SVG plate of the resolved figure built from the same stroke data.

05

Iteration log