6 · 캐릭터와 얼굴
몸체
recipe/engine/character.mjs의 makeCharacter(spec)은 릭(rig)을 생성합니다: 머리 반지름 0.42, 몸체 높이 0.8, 다리 0.52, 팔 0.30 + 0.28. 비율이 스타일입니다: 큰 공 머리, 위아래 색상으로 나뉜 콩 모양 몸체, 얇은 안트라사이트 막대 팔다리, 피부색 벙어리 장갑 손, 둥근 코냑색 신발.
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 => { /* 크라바트, 단추, 배지, 도구 벨트 추가… */ },
});
host.root.position.set(x, 0, z); place.scene.add(host.root);
| 옵션 | 값 |
|---|---|
skin | SKIN.light / fair / medium / tan / brown / deep 또는 임의의 16진수 색상. 캐스트 전체에 혼합 가능. |
top, bottom, split, width | 콩 몸체의 두 색상, 두 색상의 경계 위치(높이의 0~1), 너비 계수(1.06은 더 통통한 체형). |
hair | short(또는 cap), bob, bun, ponytail, curly, spiky, bald 및 두 가지 시대 가발: newton(긴 컬), einstein(자가 발광하는 거친 흰 머리) |
hat / hatColor | cap, tophat(hatBand 포함), helmet(둥근 셸), hardhat, beret, crown |
glasses | true 또는 테 색상: 채색된 눈 위에 둥근 테 |
beard | true(머리카락 색상) 또는 색상 |
face | { browColor, browThick, mustache }: 눈썹 색상과 굵기, 선택적 채색 콧수염 색상 |
extras(torso) | part(geometry, color)로 의상 부품 추가: 크라바트, 칼라, 단추, 배지, 도구 |
새 주제에 맞는 캐릭터 디자인하기: 먼저 실루엣을 선택하고(휴대폰 크기에서는 헤어스타일이나 모자 모양이 가장 강력한 단서), 그 다음 상의 브랜드 컬러 한 가지, 마지막으로 피부 톤을 선택합니다. 역사적 인물은 우리 식의 툰으로 그려집니다: 시대에 맞는 헤어와 의상이면 충분합니다(뉴턴의 컬 가발과 루즈 누아 코트; 아인슈타인의 거친 흰 머리, 콧수염, 블루 코럴 스웨터). 저작권이 있는 캐릭터는 절대 복사하지 마세요.
얼굴이 있는 사물(사과, 행성, 분자, 기계): faces.mjs에서 faceDecal(radius, { skin: <몸체 색상> })을 부여하고, 눈꺼풀 색상을 몸체 색상으로 설정한 후, 사물의 그룹을 장면의 faceCamera 목록에 추가하면 카메라 쪽으로 회전합니다.
얼굴
머리 앞면에 페인트된 평면 데칼(faceDecal): 눈썹, 동공과 하이라이트가 있는 눈, 입, 코 없음, 모두 동일한 모양군에서 가져옵니다. 립싱크는 없으며, 얼굴이 연기를 합니다.
표현(EXPRESSIONS in faces.mjs): neutral, content, sleepy, surprised, shocked, curious, thinking, eureka, delighted, smug, knowing, confused, worried(땀방울 포함), proud(볼터치), no, wheee, dizzy(소용돌이 눈), lookDown. 새 표정을 추가하려면 항목을 복사하고 눈썹 [inner, outer](각도), lid(0 열림 … 1 닫힘), look(동공 오프셋), eye 및 pupil 스케일, mouth(flat, smile, smirk, side, wavy, o, grin, shout)를 변경하세요.
얼굴 전환 (참조 규칙, 측정됨)
- 깜빡임을 통해서만 전환: 반쯤 감긴 프레임 한 번, 완전히 감긴 프레임 한 번, 그 다음 새 얼굴.
- 새 얼굴은 강세 단어 2프레임 전에 나타납니다(
W(i) - FACE). - 표정 간에 절대 모핑하지 마세요.
- 주인공은 약 1.2초마다 새 얼굴을 얻습니다. 사물은 이야기 비트에 따라 전환됩니다(사과가 "틀렸어"에서
smug → shocked로 변함). - 긴 유지 동안 자연스러운 깜빡임:
blinks시간 목록을 전달하세요.
rig.faceAt(t, [[0, 'curious'], [W(17) - FACE, 'smug']], [0.75, 6.2]); // 전환 후 자연스러운 깜빡임
objectFace.set('shocked'); // 사물용 즉시 설정
손과 잡은 소품
rig.handPos('L' | 'R' | 'both')는 현재 포즈 후 손의 월드 위치를 반환합니다. 매 프레임마다 잡은 소품을 그 위치에 배치하세요(뉴턴 손에 든 책, 아인슈타인이 떨어뜨리기 전 볼링공). rig.headPos()는 프레이밍을 위한 머리 중심을 제공합니다.
확인 사항
- 휴대폰 크기에서 실루엣만으로 각 캐릭터를 구분할 수 있나요?
- 눈꺼풀 색상이 피부 또는 몸체 색상과 일치하나요?(투시 깜빡임 방지)
- 얼굴이 연기하는 모든 장면에서 카메라를 향하고 있나요?