The head shape
A head here is an ellipsoid that four things happen to. It needs no more – and the line would not take more either.
Every point on the head's surface has two coordinates: u
is longitude (0 at the bridge of the nose, ±1.48 at the ear),
v is latitude (+1.57 at the crown, −1.57 at the chin).
Out of those two kopfPunkt makes a point in space. That
is the only place where the shape of the head comes about; everything
further – rotation, projection, outline, hairdo – only computes with
what comes out here.
Because features sit in spherical coordinates and not in pixels, they travel along correctly by themselves when the head turns – foreshortening and occlusion included. Nobody computes where the left eye ends up at 20 degrees of rotation. It sits at u = −0.5, and the rest follows.
Eight numbers, one head
The three semi-axes rx, ry, rz
give the basic form: wide, tall, deep. The remaining five deform it.
The fastest way to understand them is to touch them – underneath runs
the same code as in the sheet next door.
kegel and scheitelHoch
kegel tapers the head downwards,
scheitelHoch widens it upwards. Both reach into the same
factor k, and they do so through a single smooth
polynomial instead of two branches for top and bottom.
The reason stands in the second line of the comment: two separate
branches would have a kink in the derivative at the equator. A kink in
the shape function is an edge in the silhouette – and an edge running
across both cheeks does not look like a skull but like a mistake. The
polynomial hits the same three support points
(k(−1) = 1 − kegel, k(0) = 1,
k(1) = 1 + scheitelHoch) and is continuously
differentiable everywhere.
beule – the bump
beule bulges the skull so that it does not look turned on
a lathe. What matters is the factor cos(u + …) in the
wave: without it the bump would depend on height alone.
A wave that depends only on height multiplies x and
z evenly – that is not a bump, that is a
ridge all around the skull. In the silhouette it
appears on both sides as the same edge at the same height, and in
every rotation. With the cos(u) term the bump sits at
one spot on the surface: asymmetric, organic, as if by
hand.
kastig – the boxiness
kastig pulls the ellipsoid towards a superellipse: flat
sides, flat crown, rounded corners. The nearest way there would be an
exponent on sin and cos. It is wrong.
An exponent has infinite slope at the equator. The surface is sampled so fast there that gaps open up between two sample points – and a gap in the outline is an empty angular bin, which is later smoothed into a deep dent in the cheek (see Point cloud). On top of that the exponent distorts the tangents on which every anchor hangs its local coordinate system.
Instead: a smooth radial bump on the diagonals via
sin(2v) and sin(2u). It approximates the
superellipse without becoming infinitely steep anywhere.
Named shapes
The DNA rolls continuously within the ranges from
macheDna – rx between 0.6 and 0.86,
ry between 0.8 and 1.08 and so on; every tenth draw may
go beyond as an outlier (rx down to 0.5 and up to 0.98,
kegel up to ±0.58, see
Randomness). Beside them the
catalogue holds six named anchors. They are not used when drawing;
they are vocabulary, so that one can talk about families of shapes
instead of number ranges.
The span is deliberately narrower than in the first press and wider than in the first draft of this one: jaws broader than foreheads, boxy skulls, long faces. But no pears and no towers. Since August 2026 there are outliers on top, rare and deliberate: pumpkins and cucumbers, pointed chins and jaws. The span itself is unchanged, a draw in its middle still lands there; only the edges lie further out.
Without that span all heads are eggs – and eggs are babies. The scatter of the head shape is the first place where a sheet either looks like people or like an assortment.
Everything is unit measure
The semi-axes are not pixels. Everything is computed at
mass = 1: a head is about two units tall, a line of
0.024 is a good two percent of that wide. The target size
only joins at the very end as ctx.scale.
That is not a convenience but the precondition for the cache on the
next page: because the projection is
homothetic, an outline at size 1, times mass, is exactly
the outline at mass. That is why the same computed point
cloud carries both the small grid and the close-up.