Skip to content
Absence & VoidAchillesexperiment

The Rift in N-Space

A bident built by subtraction — unlit black prongs with tone mapping disabled, and a simplex vortex between them that the cursor drags like a hand through smoke.

Built here · no external address

Achilles: Supreme. Highest learning value in the canon. Used sparingly.

Why it matters

Every other object in this hall is built by adding light. This one is built by removing it, and it is the hardest of the three for exactly that reason.

The bident's prongs are MeshBasicMaterial at #000000 with toneMapped: false. That combination is unusual enough to be worth stating precisely: no light reaches them, no bloom bleeds into them, and the ACES filmic curve that lifts every other black in the scene toward grey does not touch them. The result is not a dark object sitting in a dark room — it is a hole cut in the page, and the eye reads it as absence rather than as material.

Which means all the luminance in the chamber has to come from one place: a plane of simplex noise trapped between the prongs. That constraint is the whole design. With one light source and one dark shape, composition is no longer optional decoration; it is the only thing holding the image together.

Key techniques

  • MeshBasicMaterial({ color: 0x000000, toneMapped: false }) — the "absence" material. toneMapped: false is the essential half; without it, exposure lifts the prongs to a soft grey and they become an object again.
  • Ashima simplex 3D rather than value noise. Value noise on a grid produces axis-aligned streaks, and streaks in smoke read as a rendering bug rather than as movement.
  • The vortex comes from multiplying two noise samples in different coordinate frames: one linear, one in polar coordinates (atan of the local position, radius as the second axis). Drifting noise has no centre; this has one.
  • A double smoothstep mask — horizontal on abs(x), vertical on abs(y - 3.5) — so the smoke has no edge and never reveals the quad it lives on.
  • The mask is written in geometry space with a translated PlaneGeometry rather than around a moved mesh, so the mask stays correct however the group is posed.
  • Colour output multiplied by 4.0 before blending, which pushes the mid-values of the smoke past the bloom threshold and lets the post chain do the glowing.
  • Cursor distortion at radius 0.3: the rift plane itself leans toward the pointer, so the smoke appears to be pulled rather than merely translated.
  • AdditiveBlending with depthWrite: false and DoubleSide, drawn as the only luminous surface in the chamber.

What to steal

The transferable part.

`toneMapped: false` on true blacks. If you want a shape to read as a hole rather than as an object, this is the flag. Almost nobody reaches for it, and it is the difference between "dark grey prop" and "absence".

Multiply two noise frames to get rotation. A polar-coordinate sample multiplied into a linear one turns drift into a vortex with a centre. Far cheaper and more controllable than rotating UVs, and it does not shear at the edges.

Mask in geometry space, not screen space. Translating the geometry and writing the mask against local position means the effect survives being rotated, tilted, and parallaxed. Screen-space masks break the moment the object moves.

Let the post chain do the glowing. Output above 1.0 and set the bloom luminanceThreshold low. Painting a glow into the shader with extra passes is more expensive and less coherent with the rest of the scene.

What not to copy

Context-specific or costly.

Do not use a pure black material for something you want the visitor to perceive as solid. This works because absence is the intent. For an object with form, you need light response, and MeshBasicMaterial has none.

Do not run simplex 3D on a full-screen quad without measuring first. It is roughly four times the cost of value noise per sample. It is affordable here because the plane is small and masked; it is a different proposition at full viewport.

Do not couple the noise time-scale directly to raw scroll velocity without a ceiling. Unbounded time advance turns smoke into strobing, and strobing is both ugly and a genuine accessibility hazard.

Inclusion rationale

Achilles, and used sparingly on purpose. It is here because it teaches the least-known technique in the canon — toneMapped: false as a compositional tool — and because it is the clearest case of a constraint producing the design rather than limiting it. One light source, one hole, and nothing else to hide behind.

Technical register

Performance

The rift is a single quad: 4 vertices, and a fragment cost bounded by the on-screen area of a 1.4×4.6 unit plane rather than by the viewport. In the reduced tier the noise time-scale drops to 0.6 (cheaper temporal aliasing, same appearance at rest) and the floor field halves in density.

This chamber runs the highest bloom baseline in the hall (1.4) and the lowest point-light intensity (9), because its only real light source is emissive geometry. Total: 60fps at DPR 1.75 on an M2 with the full post chain active.

Mobile

Cursor distortion has no touch equivalent, so the vortex is authored to be complete without it: the pull is an addition to a composition that already works, not the thing that makes it work. Touch scroll drives the noise rate, which is where the interaction genuinely belongs on a handheld device.

Accessibility

prefers-reduced-motion freezes the velocity coupling completely — the smoke keeps a slow constant drift so the chamber is not a still image, but nothing accelerates and nothing strobes. Bloom intensity is bounded so the audio-reactive term can never blow the frame to white. The audio graph is silent until a click on an explicit "enter with sound" control, and the whole experience is fully usable with it off; the analyser feeds the bloom, so with sound off the visual simply loses one gentle pulse.