6 · Personnages et visages
Le corps
makeCharacter(spec) dans recipe/engine/character.mjs construit un rig : rayon de la tête 0,42, corps haut de 0,8, jambes 0,52, bras 0,30 + 0,28. Les proportions définissent le style : une grosse tête ronde, un corps en haricot divisé en une couleur du haut et une du bas, des membres fins en bâton Anthracite, des mains en mitaine de la couleur de la peau, des chaussures Cognac arrondies.
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 => { /* ajouter une cravate, des boutons, un badge, une ceinture à outils… */ },
});
host.root.position.set(x, 0, z); place.scene.add(host.root);
| Option | Valeurs |
|---|---|
skin | SKIN.light / fair / medium / tan / brown / deep, ou tout code hexadécimal. Mélangez au sein du casting. |
top, bottom, split, width | les deux couleurs du haricot, leur point de rencontre (0–1 de la hauteur), et un facteur de largeur (1.06 pour une corpulence plus trapue) |
hair | short (ou cap), bob, bun, ponytail, curly, spiky, bald, et deux perruques d'époque : newton (longues boucles) et einstein (cheveux blancs sauvages avec auto-illumination) |
hat / hatColor | cap, tophat (avec hatBand), helmet (coque ronde), hardhat, beret, crown |
glasses | true ou une couleur de monture : montures rondes par-dessus les yeux peints |
beard | true (couleur des cheveux) ou une couleur |
face | { browColor, browThick, mustache } : couleur et épaisseur des sourcils, une couleur optionnelle de moustache peinte |
extras(torso) | ajouter des éléments de costume avec part(geometry, color) : cravates, cols, boutons, badges, outils |
Concevoir un personnage pour un nouveau sujet : choisissez d'abord une silhouette (la forme des cheveux ou du chapeau est l'indice le plus fort à la taille d'un téléphone), puis une couleur de marque pour le haut, puis un ton de peau. Les personnages historiques sont représentés comme nos propres toons : les cheveux et les vêtements d'époque suffisent (la perruque bouclée de Newton et son manteau Rouge Noir ; les cheveux blancs sauvages d'Einstein, sa moustache et son pull Blue Coral). Ne copiez jamais un personnage protégé par le droit d'auteur.
Objets avec visage (pommes, planètes, molécules, machines) : donnez-leur faceDecal(radius, { skin: <couleur du corps> }) depuis faces.mjs, réglez la couleur des paupières sur la couleur du corps, et ajoutez le groupe de l'objet à la liste faceCamera du lieu pour qu'il se tourne vers la caméra.
Visages
Decals plats peints sur le devant de la tête (faceDecal) : sourcils, yeux avec pupilles et reflets, une bouche, pas de nez, le tout issu d'une même famille de formes. Pas de synchronisation labiale ; le visage fait le jeu d'acteur.
Expressions (EXPRESSIONS dans faces.mjs) : neutral, content, sleepy, surprised, shocked, curious, thinking, eureka, delighted, smug, knowing, confused, worried (avec une goutte de sueur), proud (rougir), no, wheee, dizzy (yeux en spirale), lookDown. Pour en ajouter une, copiez une entrée et modifiez les sourcils [inner, outer] (degrés), lid (0 ouvert … 1 fermé), look (décalage de la pupille), l'échelle eye et pupil, et mouth (flat, smile, smirk, side, wavy, o, grin, shout).
Changements de visage (la règle de la référence, mesurée)
- Changez uniquement à travers un clignement d'œil : une image mi-clos, une image fermé, puis le nouveau visage.
- Le nouveau visage apparaît 2 images avant le mot accentué (
W(i) - FACE). - Ne morphez jamais entre les expressions.
- Le personnage principal obtient un nouveau visage environ toutes les 1,2 s ; les objets changent sur leur battement narratif (la pomme passe de
smugàshockedsur "wrong"). - Clignements naturels pendant les longues tenues : passez une liste
blinksde temps.
rig.faceAt(t, [[0, 'curious'], [W(17) - FACE, 'smug']], [0.75, 6.2]); // changements, puis clignements naturels
objectFace.set('shocked'); // définition instantanée pour les objets
Mains et accessoires tenus
rig.handPos('L' | 'R' | 'both') retourne la position mondiale d'une main après la pose actuelle ; placez les accessoires tenus à cet endroit à chaque image (le livre dans les mains de Newton, la boule de bowling avant qu'Einstein ne la lâche). rig.headPos() donne le centre de la tête pour le cadrage.
Vérifications
- À la taille d'un téléphone, pouvez-vous distinguer chaque personnage rien que par sa silhouette ?
- Les paupières correspondent à la couleur de la peau ou du corps (pas de clignement transparent).
- Les visages font face à la caméra dans chaque plan où ils jouent.