6 · Personagens e rostos
O corpo
makeCharacter(spec) em recipe/engine/character.mjs constrói um rig: raio da cabeça 0.42, corpo 0.8 de altura, pernas 0.52, braços 0.30 + 0.28. As proporções são o estilo: uma cabeça bola grande, um corpo feijão dividido em uma cor superior e inferior, membros finos de palito na cor Antracite, mãos de mitene na cor da pele, sapatos Cognac arredondados.
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 => { /* adicione um plastrão, botões, um distintivo, um cinto de ferramentas… */ },
});
host.root.position.set(x, 0, z); place.scene.add(host.root);
| Opção | Valores |
|---|---|
skin | SKIN.light / fair / medium / tan / brown / deep, ou qualquer hex. Misture entre o elenco. |
top, bottom, split, width | as duas cores do feijão, onde elas se encontram (0–1 da altura), e um fator de largura (1.06 para uma constituição mais atarracada) |
hair | short (ou cap), bob, bun, ponytail, curly, spiky, bald, e duas perucas de época: newton (cachos longos) e einstein (cabelo branco selvagem com brilho próprio) |
hat / hatColor | cap, tophat (com hatBand), helmet (capacete redondo), hardhat, beret, crown |
glasses | true ou uma cor de armação: armações redondas sobre os olhos pintados |
beard | true (cor do cabelo) ou uma cor |
face | { browColor, browThick, mustache }: cor e espessura da sobrancelha, uma cor de bigode pintado opcional |
extras(torso) | adicione partes de fantasia com part(geometry, color): plastrões, golas, botões, distintivos, ferramentas |
Projetando um personagem para um novo tópico: escolha primeiro uma silhueta (cabelo ou formato de chapéu é a dica mais forte no tamanho de um telefone), depois uma cor de marca para a parte superior, depois um tom de pele. Pessoas históricas são desenhadas como nossos próprios toons: cabelo e roupas de época são suficientes (peruca cacheada de Newton e casaco Rouge Noir; cabelo branco selvagem de Einstein, bigode e suéter Blue Coral). Nunca copie um personagem protegido por direitos autorais.
Objetos com rostos (maçãs, planetas, moléculas, máquinas): dê a eles faceDecal(radius, { skin: <cor do corpo> }) de faces.mjs, defina a cor das pálpebras para a cor do corpo e adicione o grupo do objeto à lista faceCamera do lugar para que ele se vire para a câmera.
Rostos
Decalques planos pintados na frente da cabeça (faceDecal): sobrancelhas, olhos com pupilas e realces, uma boca, sem nariz, todos de uma mesma família de formas. Sem sincronia labial; o rosto faz a atuação.
Expressões (EXPRESSIONS em faces.mjs): neutral, content, sleepy, surprised, shocked, curious, thinking, eureka, delighted, smug, knowing, confused, worried (com uma gota de suor), proud (rubor), no, wheee, dizzy (olhos espirais), lookDown. Para adicionar uma, copie uma entrada e altere as sobrancelhas [inner, outer] (graus), lid (0 aberto … 1 fechado), look (deslocamento da pupila), escala de eye e pupil, e mouth (flat, smile, smirk, side, wavy, o, grin, shout).
Troca de rostos (a regra da referência, medida)
- Troque apenas através de uma piscada: um quadro semifechado, um quadro fechado, então o novo rosto.
- O novo rosto aparece 2 quadros antes da palavra estressada (
W(i) - FACE). - Nunca faça morphing entre expressões.
- O personagem principal ganha um novo rosto a cada 1.2 s aproximadamente; os objetos trocam no seu batimento da história (a maçã vai
smug → shockedem "wrong"). - Piscadas naturais durante longas pausas: passe uma lista
blinksde tempos.
rig.faceAt(t, [[0, 'curious'], [W(17) - FACE, 'smug']], [0.75, 6.2]); // troca, depois piscadas naturais
objectFace.set('shocked'); // definição instantânea para objetos
Mãos e adereços segurados
rig.handPos('L' | 'R' | 'both') retorna a posição mundial de uma mão após a pose atual; coloque adereços segurados lá a cada quadro (o livro nas mãos de Newton, a bola de boliche antes de Einstein deixá-la cair). rig.headPos() dá o centro da cabeça para enquadramento.
Verificações
- No tamanho de um telefone, você consegue distinguir cada personagem apenas pela silhueta?
- As pálpebras combinam com a cor da pele ou do corpo (sem piscadas transparentes).
- Os rostos viram para a câmera em todas as tomadas onde atuam.