Drei Lichter statt einem: die Symbole bekommen Koerper
Filipe: "die symbole und der text dadrin sollen groesser und noch
spezieller sein, und die symbole sollen auch 2-3 farben haben ... sollen
mehr leben haben, auch viel realistischere effekte."
NICHT DREI AUSGEDACHTE FARBEN, SONDERN DIE DREI EINES ECHTEN AUFBAUS
So wird jedes Produktfoto ausgeleuchtet, und aus demselben Grund sieht
es plastisch aus:
1 FUEHRUNGSLICHT, kalt, von oben links. Ein Spitzlicht ist nie
reinweiss -- es traegt die Farbe der Lampe, und die ist kuehl.
2 EIGENFARBE des Gegenstands: der Ton seiner Kachel.
3 STREULICHT, warm, von unten. Licht, das vom Untergrund
zurueckkommt, ist waermer als das Hauptlicht. Genau dieser warme
Saum ist der Grund, warum ein Gegenstand im Bild STEHT statt zu
schweben.
Dazu die aelteste Regel der Malerei: warmes Licht, KUEHLE Schatten. Die
Seitenwaende der Zeichen kippen jetzt ins Blaue statt nur dunkler zu
werden. Und ein RANDLICHT auf der Lichtseite -- der schmale Streifen,
in dem das Fuehrungslicht die Kante streift. Ein Gegenstand ohne diese
Kante sieht immer ein wenig flach aus, und man kann meist nicht sagen,
warum.
ZWEI FEHLER DABEI, BEIDE ERST BEI FUENFFACHER VERGROESSERUNG SICHTBAR
* DAS WARME LICHT LAG UNTER DER FORM. Die Verlaeufe spannten ueber das
ganze 24er-Raster (y 2 bis 22); die Sprechblase des Chats reicht
aber nur von 5,5 bis 20,5. Der warme Stopp bei y 22 war damit
ausserhalb -- von den drei Lichtern kam genau eines an.
`objectBoundingBox` spannt den Verlauf jetzt ueber JEDES Teil
einzeln: Der Kalenderkorpus bekommt sein volles Licht, seine Fuesse
ebenfalls. So verhaelt sich ein echter Aufbau -- jedes Teil liegt im
selben Licht, nicht im selben Ausschnitt.
* DAS RANDLICHT WAR SCHMALER ALS DIE KONTUR DARUEBER und lag deshalb
vollstaendig darunter: gebaut, gezeichnet, unsichtbar. Jetzt 2,7
gegen 1,9 -- so schaut es oben links hervor.
GROESSER, WIE GEWUENSCHT
Plakette 58 -> 64 px (grosse Kachel 62 -> 70), Zeichen 29 -> 35 px
(gross 32 -> 39), Wasserzeichen 132 -> 156 px (gross 168 -> 196),
Name 1,06 -> 1,15 rem (gross 1,24 -> 1,38), Unterzeile 0,78 -> 0,845.
Auf dem Dashboard entsprechend.
UND DAS SCHILD WIRFT LICHT AUF SEINE KACHEL
Ein beleuchteter Gegenstand faerbt seine Umgebung. Ohne diesen Abfall
sieht selbst ein gut gebautes Schild aufgeklebt aus. Weit gestreut und
weit unter der Blendschwelle: Man soll ihn nicht sehen, man soll ihn
vermissen, wenn er fehlt.
Zehn Pruefungen gelaufen, alle gruen -- darunter Handy und Breiten,
weil groesserer Text der schnellste Weg zu einem Ueberlauf ist.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -575,10 +575,23 @@
|
||||
function verlaufSicherstellen(ziel, endung) {
|
||||
const defs = document.createElementNS(NS, 'defs');
|
||||
|
||||
const bauen = (id, stops, x2 = '0', y1 = '2', y2 = '22') => {
|
||||
/* AN DER FORM AUSGERICHTET, NICHT AM RASTER (07.09.2026).
|
||||
|
||||
Die Verlaeufe spannten ueber das ganze 24er-Raster (y von 2 bis
|
||||
22). Ein Zeichen fuellt das aber nie aus: Die Sprechblase des
|
||||
Chats reicht von y 5,5 bis 20,5. Das warme Streulicht sass bei
|
||||
y 22 -- also UNTER der Form, und war nie zu sehen. Bei hoher
|
||||
Vergroesserung nachgemessen; von den drei Lichtern kam nur eines
|
||||
an.
|
||||
|
||||
`objectBoundingBox` spannt den Verlauf ueber JEDES Teil einzeln:
|
||||
Der Kalenderkorpus bekommt sein volles Licht, seine Fuesse
|
||||
ebenfalls. Genau so verhaelt sich ein echter Aufbau -- jedes Teil
|
||||
liegt im selben Licht, nicht im selben Ausschnitt. */
|
||||
const bauen = (id, stops, x2 = '0', y1 = '0', y2 = '1', raum = 'objectBoundingBox') => {
|
||||
const lg = document.createElementNS(NS, 'linearGradient');
|
||||
lg.setAttribute('id', id + endung);
|
||||
lg.setAttribute('gradientUnits', 'userSpaceOnUse');
|
||||
lg.setAttribute('gradientUnits', raum);
|
||||
lg.setAttribute('x1', '0'); lg.setAttribute('y1', y1);
|
||||
lg.setAttribute('x2', x2); lg.setAttribute('y2', y2);
|
||||
for (const [pos, farbe, deck] of stops) {
|
||||
@@ -610,17 +623,45 @@
|
||||
traegt die Eigenfarbe, unten kommt Streulicht in einer HELLEREN
|
||||
Tonung statt in Weiss -- Licht, das vom Untergrund zurueckkommt,
|
||||
nimmt die Farbe des Gegenstands mit, es bleicht ihn nicht aus. */
|
||||
/* =====================================================================
|
||||
DREI LICHTER, DREI FARBEN (07.09.2026)
|
||||
|
||||
Filipe: "die symbole sollen auch 2-3 farben haben ... sollen mehr
|
||||
leben haben, auch viel realistischere effekte."
|
||||
|
||||
Nicht drei ausgedachte Farben, sondern die drei, die ein
|
||||
Gegenstand in einem echten Aufbau bekommt -- so wird jedes
|
||||
Produktfoto ausgeleuchtet, und aus demselben Grund sieht es
|
||||
plastisch aus:
|
||||
|
||||
1 FUEHRUNGSLICHT, kalt, von oben links. Ein Spitzlicht ist nie
|
||||
reinweiss; es traegt die Farbe der Lampe, und die ist kuehl.
|
||||
Hier ein Hauch Babyblau darin.
|
||||
2 EIGENFARBE des Gegenstands -- der Ton seiner Kachel.
|
||||
3 STREULICHT, warm, von unten. Licht, das vom Untergrund
|
||||
zurueckkommt, ist waermer als das Hauptlicht. Genau dieser
|
||||
warme Saum unten ist der Grund, warum ein Gegenstand im Bild
|
||||
"steht" statt zu schweben.
|
||||
|
||||
Und die Schatten sind KUEHL: Warmes Licht, kuehle Schatten -- das
|
||||
ist die aelteste Regel der Malerei und der schnellste Weg von
|
||||
"Farbflaeche" zu "Koerper". Sie steckt unten in `zeichen-wand`. */
|
||||
bauen('zeichen-deck', [
|
||||
['0', '#ffffff', '0.88'],
|
||||
['0.14', 'currentColor', '1'],
|
||||
['0.62', 'currentColor', '0.96'],
|
||||
['1', 'currentColor', '0.78'],
|
||||
['0', '#eaf4ff', '0.95'],
|
||||
['0.12', 'currentColor', '1'],
|
||||
['0.55', 'currentColor', '0.97'],
|
||||
['0.82', '#ff9c5a', '0.42'],
|
||||
['1', '#ffb46a', '0.66'],
|
||||
]);
|
||||
/* Die Seitenwand: derselbe Ton, deutlich dunkler -- eine Wand, die
|
||||
vom Licht abgewandt ist. */
|
||||
/* Die Seitenwand -- kuehl und dunkel. Ein Schatten ist nicht
|
||||
"dieselbe Farbe, nur dunkler": Ihm fehlt das warme Hauptlicht,
|
||||
also kippt er ins Blaue. */
|
||||
bauen('zeichen-wand', [
|
||||
['0', 'currentColor', '0.5'],
|
||||
['1', 'currentColor', '0.28'],
|
||||
['0', 'currentColor', '0.52'],
|
||||
['0.6', '#1b2b45', '0.62'],
|
||||
['1', '#0d1626', '0.72'],
|
||||
]);
|
||||
|
||||
/* Der Körper: oben satt, unten fast durchsichtig. */
|
||||
@@ -652,11 +693,23 @@
|
||||
sieht aus wie gemalt; mit ihm bekommt sie unten eine Kante, und
|
||||
das Auge liest sie als Koerper im Raum. */
|
||||
bauen('zeichen-linie', [
|
||||
['0', '#ffffff', '0.98'],
|
||||
['0.11', '#ffffff', '0.62'],
|
||||
['0', '#f2f9ff', '0.99'],
|
||||
['0.1', '#bfe0ff', '0.78'],
|
||||
['0.3', 'currentColor', '1'],
|
||||
['0.82', 'currentColor', '1'],
|
||||
['1', 'currentColor', '0.62'],
|
||||
['0.74', 'currentColor', '1'],
|
||||
['1', '#ffc389', '0.85'],
|
||||
]);
|
||||
|
||||
/* DAS RANDLICHT. Eine kuehle Kante auf der Lichtseite -- der
|
||||
schmale Streifen, in dem das Fuehrungslicht die Kante des
|
||||
Gegenstands streift. Er wird als zweite Lage der Kontur
|
||||
gezeichnet, ein Drittel Rasterpunkt nach oben links versetzt.
|
||||
Ein Gegenstand ohne diese Kante sieht immer ein wenig flach aus,
|
||||
und man kann meist nicht sagen, warum. */
|
||||
bauen('zeichen-rand', [
|
||||
['0', '#dff0ff', '0.85'],
|
||||
['0.5', '#9fd4ff', '0.45'],
|
||||
['1', '#9fd4ff', '0'],
|
||||
]);
|
||||
|
||||
/* Die Spiegelung, diagonal von links oben nach rechts unten. */
|
||||
@@ -670,7 +723,7 @@
|
||||
['0', '#ffffff', '0.72'],
|
||||
['0.16', '#ffffff', '0.3'],
|
||||
['0.3', '#ffffff', '0'],
|
||||
], '18', '0', '20');
|
||||
], '18', '0', '20', 'userSpaceOnUse');
|
||||
|
||||
ziel.append(defs);
|
||||
}
|
||||
@@ -751,17 +804,20 @@
|
||||
Rille, auf der dunklen Plakette verschwindet er und die helle
|
||||
Linie trägt. Ein Zeichen, zwei Untergründe, eine Lösung. */
|
||||
['zeichen__saum', linien],
|
||||
['zeichen__rand', linien], // die kuehle Lichtkante darunter
|
||||
['zeichen__linie', linien],
|
||||
];
|
||||
const verlaufZu = {
|
||||
zeichen__deck: ['fill', 'zeichen-deck'],
|
||||
zeichen__glanz: ['fill', 'zeichen-glanz'],
|
||||
zeichen__rand: ['stroke', 'zeichen-rand'],
|
||||
zeichen__linie: ['stroke', 'zeichen-linie'],
|
||||
};
|
||||
for (const [klasse, pfade] of lagen) {
|
||||
if (!pfade.length) continue;
|
||||
const g = document.createElementNS(NS, 'g');
|
||||
g.setAttribute('class', klasse);
|
||||
if (klasse === 'zeichen__rand') g.setAttribute('transform', 'translate(-0.34 -0.34)');
|
||||
if (verlaufZu[klasse]) verweis(g, verlaufZu[klasse][0], verlaufZu[klasse][1]);
|
||||
for (const d of pfade) {
|
||||
const pfad = document.createElementNS(NS, 'path');
|
||||
|
||||
Reference in New Issue
Block a user