CH NEO-ZÜRICH EDITION
WEATHER · CLEAR 25°C
BLEND OF THE DAY · 07/ROGUE
EST. 2027
PAZ ACADEMY
THE AEC CYBER MORNING NEWS

PAZ Kaffi

DESIGN · DEMOLITION · CAFFEINE · DISPATCH
EDITION 0703 · 3 July 2026
BROADCAST 04:42 CET
2,400 BROADSHEETS PRINTED
READ TIME · 47 MIN
The Flow Field: Where Noise Pretends to Be a Force
ACADEMY
FRAME · 06:50
19-06-2026

The Flow Field: Where Noise Pretends to Be a Force

A flow field is a vector field; a streamline its integral curve. Perlin noise looks like load paths but minimises nothing — a 10-line p5.js Hack shows why.

Start with the object, not the picture. A flow field is a vector field: a rule that hands every point on the plane a direction. A streamline is what you get when you stop reading directions and start obeying them — you drop a particle, read the arrow under its feet, take a step, and repeat. The curve it traces is an integral curve of the field. That single primitive — field in, trajectory out — is the whole engine behind Tyler Hobbs’ Fidenza (Art Blocks, 2021), every “Coding Train” demo Daniel Shiffman ever filmed, and, with a different field underneath, every principal-stress diagram an engineer has drawn since Culmann.

←TODAY: In 2026 a ten-line p5.js sketch turns gradient noise into a thousand streamlines a junior architect can fork before lunch. →3012: The fields that survive are the ones whose source you can name — a stress tensor, a wind solution — not the ones whose source was a random seed nobody wrote down. Fulcrum: Noise streamlines and load-path streamlines are geometrically identical; only the objective function tells them apart.

The maths is honest and small. Perlin noise — Ken Perlin’s 1983 invention, presented as “An Image Synthesizer” at SIGGRAPH 1985 and rewarded with a 1997 Academy Award for Technical Achievement — is a band-limited gradient noise: smooth, continuous, and deterministic for a given seed. Sample it at (x·scale, y·scale), multiply the result by 2π, and you have an angle at every point. That is the sleight of hand worth seeing clearly: noise is a scalar field, and we are reading it as a direction field. Nothing in the physics of the plane requires those arrows to point the way they do. They are smooth because Perlin made them smooth, not because a force put them there.

That distinction is the entire intellectual payload of this piece. Perlin’s later Simplex noise (2001, patent now lapsed) lowers directional artefacts and scales better into 3D — add a third z axis and the field animates, the streamlines breathe. But cheaper, smoother noise does not make the field mean anything. A flow field minimises no energy. It follows no gradient of a potential. It is, to borrow the structural reviewer’s phrase, a beautiful guess.

Compare it to its load-bearing twin. A principal-stress trajectory — the ETH graphic-statics lineage of Culmann and Maxwell, already in PAZ’s corpus — is also a streamline, but its field is the eigenvector field of a stress tensor solved from real boundary conditions. A CFD wind streamline over a Zürich courtyard is the integral curve of a Navier–Stokes solution. Same geometry, same “follow the arrows” integration. Utterly different provenance. One you can defend in a structural review; the other you cannot.

Atelier: Use the noise field exactly where it belongs — as an intuition pump. Drive a façade striation, a louver-orientation study, or a path-of-travel layout from one editable field, get the eye and the team aligned on the gesture, then swap the field source for a solver before anyone pours concrete. The honest move is to keep the same streamline integrator and change only what feeds it: noise for the sketch, principal stresses for the rib pattern that actually carries roof load.

Hack: This Hack teaches you to turn a scalar noise field into a direction field and integrate one streamline — the geometric heart of the whole effect. The medium is runnable code; the domain is Geometry. Drop this in any p5.js sketch:

let p = createVector(width/2, height/2);
for (let i = 0; i < 400; i++) {
  let a = noise(p.x*0.005, p.y*0.005) * TWO_PI; // scalar → angle
  let step = p5.Vector.fromAngle(a).mult(2);     // direction → move
  line(p.x, p.y, p.x+step.x, p.y+step.y);
  p.add(step);                                   // integrate
}

Change the 0.005 zoom and watch the curvature scale; add noiseDetail(4, 0.5) for fractal Brownian octaves. The seed makes it reproducible — which is precisely why you can ship it as “remix and download.”

If you want the deeper version, read Hobbs’ “Flow Fields” essay and Shiffman’s The Nature of Code for the integrator, then take the same field thinking into McNeel Europe’s Grasshopper Level 3 form-finding sessions where the field stops being noise and starts being force. Today: run the snippet, then write down, in one sentence, which field you wish were under those arrows.

FILED FROM
CO-SIGNERS
PAZ Academy
CONFIDENCE
HIGH
REPRINTS
© PAZ - PARAMETRIC ACADEMY ZURICH · ALL RIGHTS RESERVED

PAZ Kaffi · multidisciplinary editorial, led by PAZ Academy

⚑ REPORT AN ERROR · SUBMIT A CORRECTION
◂ BACK TO FRONT PAGE · PAZ KAFFI

© 2026 PAZ Academy.