Der Druck

Der Strich allein macht noch keine Zeichnung. Was in den ersten Fassungen nach Vektorgrafik aussah, waren nicht die Linien – es waren die Flächen und das Blatt darunter.

Drei Handgriffe machen daraus einen Druck: die Farbfläche sitzt nicht exakt in ihrer Kontur, sie blutet an ihrem Rand ins Papier aus, und das Papier ist nie gleichmäßig. Dazu kommt die Frage, wer die Farben überhaupt kennt – und die Antwort ist: niemand außer der Palette.

Fehlregister

flaeche() legt die Fläche nicht dorthin, wo ihre Kontur ist. Sie wird um 0.008 bis 0.016 Einheitsmaß verschoben und um bis zu 1,5 % anders groß gezeichnet: die Farbplatte trifft die Strichplatte nicht genau. Mal steht die Farbe über die Linie, mal bleibt auf der anderen Seite ein heller Saum.

Richtung und Maß hängen am Seed, also am Kopf – einmal je Stift aus der Spur 'register' gezogen. Ein Blatt, auf dem jede Fläche in eine andere Richtung rutscht, wäre kein Fehlregister, sondern ein Wackelkontakt.

Ausbluten

Unter jeder Druckfläche liegt dieselbe Fläche noch einmal: 3 % größer, bei 14 % Deckung. Die Farbe läuft ein wenig ins Papier, und der Rand ist dadurch ein Saum statt einer Kante. Es ist derselbe Handgriff wie der Saum um einen punkt() – dort mit 7 % und 16 %, weil eine Sommersprosse kleiner ist als eine Wange.

Wofür der Druck NICHT gilt

Gedruckt wird von selbst: der Stift druckt, und eine Fläche muss darum nicht bitten. Nur wer trocken bleiben will, sagt es – trocken: true. Umgekehrt herum stand die Regel einmal als druck: true an siebzehn einzelnen Aufrufen, und eine Gegenprobe ohne Druck war nur über einen nachgebauten Zeichenweg zu haben. Jetzt ist sie das letzte Argument von macheStift.

Zwei Arten von Flächen bleiben trocken:

FlächeGrund
Hals, Ohr, Hutband Sie müssen an etwas anschließen. Ein Hals, der um ein Prozent verrutscht, ist ein Spalt unter dem Kinn; ein Band, das von der Krone rutscht, hängt in der Luft.
Pflaster, Zähne, Zunge Zierrat, klein genug, dass ein Versatz nicht nach Druck aussieht, sondern nach Fehler.

Das Papier

Das Korn wird einmal in eine 128er-Kachel gezeichnet und danach als Muster über das ganze Blatt gefüllt. Neu gewürfelt sähe es bei jedem Bild anders aus – aus Papier würde Fernsehrauschen. Davon abgesehen wären ein paar tausend Punkte je Bild teurer als der ganze Rest der Zeichnung.

Im Korn liegen zwei Dinge: Punkte (900, sehr blass) und Fasern (70 kurze Striche in zufälliger Richtung, noch blasser). Nur Punkte sind Rauschen. Fasern sind Papier.

Dazu wird das Blatt zu den Rändern hin um zwei, drei Prozent dunkler – ein radialer Verlauf, dessen Mitte etwas oberhalb der Blattmitte sitzt, dort, wo das Licht herkäme. Ein Papier, das überall exakt denselben Ton hat, ist ein Bildschirm.

Farbe als Rollen

Kein Zeichenschritt nennt je einen Hexwert. Er fragt nach p.tinte oder p.akzent. Das ist dieselbe Trennung wie bei den CSS-Tokens dieser Seite – nur dass Canvas keine Variablen kennt und die Auflösung deshalb in palette.ts passieren muss.

Rollewofür
tinteder Strich. Alles Gezeichnete außer Haar und Akzent.
tinteWeichzurückgenommener Strich: Ohrmuschel, Fältchen, Sommersprossen.
hautdie Kopffläche. Sehr hell – sie trägt keine Farbe, sie trägt einen Hauch.
hautTiefder Schatten der Kopffläche an ihrer Unterkante.
schattender weiche Schatten IM Kopf, zur abgewandten Seite. Halbdurchsichtig, weil er über der Haut liegt und ihren Ton behalten soll.
akzentWangen, Lippen, Zunge – der einzige warme Ton im Gesicht.
haarHaar und Bart teilen sich eine Farbe: zwei Töne im selben Gesicht lesen sich als zwei Personen.
stoffKopfbedeckung. Setzt sich vom Haar ab, sonst verschwindet sie darin.
stoffTiefderselbe Stoff, dunkler und etwas bunter: das Band am Hut. Eine eigene Farbe wäre ein zweites Kleidungsstück am Kopf.
pflasterein Pflaster: heller als die Haut, mit einem Hauch Sand.

haarDunkel ist keine Farbe

Neben den zehn Farben steht ein boolean. Auf schwarzem Haar ist ein Strich in Tinte nichts; dort muss die Zeichnung ausgespart werden – hell statt dunkel. Die Frage, ob das nötig ist, beantwortet die Palette selbst (haarDunkel: hl < 0.5).

Die Farbe zurückrechnen

Symptom: Die Strähnen auf dunklem Haar sind unsichtbar, auf blondem viel zu hart.

Ursache: Die Zeichnung wollte die Helligkeit aus der Farbe ablesen. Die Farbe ist zu diesem Zeitpunkt aber ein CSS-String – wer sie befragen will, müsste rgb(…) parsen und nach OKLCH zurückrechnen, in jedem Bild, für jede Strähne.

Lösung: Der Merker wird dort gesetzt, wo die Helligkeit noch eine Zahl ist – in machePalette.

OKLCH: gleiche Helligkeit, wandernder Ton

Die sechs Hauttöne unterscheiden sich nur im Farbton: L = 0.955, C = 0.007 für alle, H zwischen 22 und 310. Lavendel, Papier, Sand, ein Hauch Grün. Die Buntheit ist absichtlich winzig – im Raster nebeneinander wird aus einem Hauch Farbe schnell ein Sortiment.

Sonst wäre ein Kopf im Raster hell und der daneben grau, und aus Variation würde ein Fehler. OKLCH ist die Voraussetzung dafür: es macht die Ableitung wahrnehmungs-linear, also heißt gleiches L auch gleich hell.

Haar: sechs Naturtöne, fünf gefärbte

Ab BUNT_AB = 0.82 greift die zweite Liste – knapp ein Fünftel der Köpfe. Die gefärbten dürfen poppig sein, aber sie dürfen das Blatt nicht sprengen: dieselbe Helligkeit wie die hellen Naturtöne und höchstens die Buntheit des Akzents (0.115). Ein Neonpink mit C = 0.25 wäre auf einem Blatt aus Papier und Bleistift ein Aufkleber.

Und selten. Neun gefärbte Köpfe nebeneinander sind kein Merkmal mehr, sondern die Regel.

Die Grenze der CSS-Rollen

Die Seite hat ihre eigenen Rollen-Token (--flaeche, --vordergrund, …). Sie decken die Seite ab, nicht das Canvas: dort löst kein Browser eine Variable auf. Deshalb gibt es die Rollen zweimal – in CSS für das Dokument, in palette.ts für die Zeichnung.

Über die Brücke gehen genau zwei Rollen: --marke-canvas für die Beschriftung unter den Köpfen und --flaeche für den Schleier über dem Raster. Beide stehen namentlich in scripts/check-rollen.mjs, und eine dritte kommt nicht dazu, ohne dass jemand sie dort einträgt. Mehr dazu bei den Schichten und den Fallen.