6 · Charaktere und Gesichter
Der Körper
makeCharacter(spec) in recipe/engine/character.mjs erstellt ein Rig: Kopfradius 0,42, Körperhöhe 0,8, Beine 0,52, Arme 0,30 + 0,28. Die Proportionen sind der Stil: ein großer Kugelkopf, ein Bohnenkörper, aufgeteilt in eine obere und untere Farbe, dünne Anthrazit-Stabglieder, Fäustlingshände in der Hautfarbe, abgerundete Cognac-Schuhe.
const host = makeCharacter({
name: 'host', skin: SKIN.tan,
top: BRAND.blueCoral, bottom: BRAND.anthracite, split: 0.32, width: 1.0,
hair: 'curly', hairColor: '#2a1d18',
hat: null, glasses: true, beard: false,
face: { browColor: BRAND.anthracite, browThick: 3.4, mustache: null },
extras: torso => { /* eine Krawatte, Knöpfe, ein Abzeichen, einen Werkzeuggürtel hinzufügen … */ },
});
host.root.position.set(x, 0, z); place.scene.add(host.root);
| Option | Werte |
|---|---|
skin | SKIN.light / fair / medium / tan / brown / deep, oder ein beliebiger Hex-Code. Mische sie im Cast. |
top, bottom, split, width | die beiden Farben der Bohne, die Höhe des Treffpunkts (0–1 der Körperhöhe) und ein Breitenfaktor (1,06 für eine stämmigere Statur) |
hair | short (oder cap), bob, bun, ponytail, curly, spiky, bald und zwei historische Perücken: newton (lange Locken) und einstein (wildes weißes Haar mit Eigenleuchten) |
hat / hatColor | cap, tophat (mit hatBand), helmet (runde Schale), hardhat, beret, crown |
glasses | true oder eine Rahmenfarbe: runde Gläser über den gemalten Augen |
beard | true (Haarfarbe) oder eine Farbe |
face | { browColor, browThick, mustache }: Augenbrauenfarbe und -stärke, eine optionale gemalte Schnurrbartfarbe |
extras(torso) | füge Kostümteile mit part(geometry, color) hinzu: Krawatten, Kragen, Knöpfe, Abzeichen, Werkzeuge |
Eine Figur für ein neues Thema entwerfen: zuerst eine Silhouette wählen (Hut- oder Haarschnitt ist das stärkste Erkennungsmerkmal auf Telefongröße), dann eine Markenfarbe für den Oberkörper, dann einen Hautton. Historische Personen werden als unsere eigenen Cartoons gezeichnet: historische Frisuren und Kleidung reichen (Newtons Lockenperücke und Rouge Noir Mantel; Einsteins wildes weißes Haar, Schnurrbart und Blue Coral Pullover). Kopiere niemals eine urheberrechtlich geschützte Figur.
Objekte mit Gesichtern (Äpfel, Planeten, Moleküle, Maschinen): gib ihnen faceDecal(radius, { skin: <Körperfarbe> }) aus faces.mjs, setze die Lidfarbe auf die Körperfarbe und füge die Objektgruppe zur faceCamera-Liste des Schauplatzes hinzu, damit sie sich zur Kamera dreht.
Gesichter
Flache, aufgemalte Aufkleber auf der Vorderseite des Kopfes (faceDecal): Augenbrauen, Augen mit Pupillen und Glanzlichtern, ein Mund, keine Nase, alle aus einer Familie von Formen. Keine Lippensynchronisation; das Gesicht übernimmt die schauspielerische Leistung.
Ausdrücke (EXPRESSIONS in faces.mjs): neutral, content, sleepy, surprised, shocked, curious, thinking, eureka, delighted, smug, knowing, confused, worried (mit Schweißtropfen), proud (Erröten), no, wheee, dizzy (Spiralaugen), lookDown. Um einen hinzuzufügen, kopiere einen Eintrag und ändere Augenbrauen [innen, außen] (Grad), lid (0 offen … 1 geschlossen), look (Pupillenversatz), Skalierung von eye und pupil sowie mouth (flat, smile, smirk, side, wavy, o, grin, shout).
Gesichtswechsel (die Regel des Referenzfilms, gemessen)
- Wechsele nur durch einen Lidschlag: ein halb geschlossener Frame, ein geschlossener Frame, dann das neue Gesicht.
- Das neue Gesicht erscheint 2 Frames vor dem betonten Wort (
W(i) - FACE). - Mische niemals zwischen Ausdrücken.
- Die Hauptfigur bekommt etwa alle 1,2 s ein neues Gesicht; Objekte wechseln bei ihrem Erzählschlag (der Apfel geht von
smugzushockedbei „falsch“). - Natürliche Lidschläge bei langen Halten: übergib eine Liste von Zeitpunkten in
blinks.
rig.faceAt(t, [[0, 'curious'], [W(17) - FACE, 'smug']], [0.75, 6.2]); // Wechsel, dann natürliche Lidschläge
objectFace.set('shocked'); // sofortiges Setzen für Objekte
Hände und gehaltene Requisiten
rig.handPos('L' | 'R' | 'both') gibt die Weltposition einer Hand nach der aktuellen Pose zurück; setze gehaltene Requisiten dort in jedem Frame (das Buch in Newtons Händen, die Bowlingkugel bevor Einstein sie fallen lässt). rig.headPos() gibt die Kopfmitte für die Bildausschnittbestimmung.
Prüfungen
- Kannst du auf Telefongröße jede Figur allein an der Silhouette unterscheiden?
- Lider passen zur Haut- oder Körperfarbe (keine durchsichtigen Lidschläge).
- Gesichter schauen in jeder Einstellung, in der sie agieren, zur Kamera.