2.7 KiB
2.7 KiB
아키텍처 (Architecture)
레이어 모델
[상황 이벤트] 예: "error" / "success" / "idle"
│
▼
[트리거 매퍼] reactions.json 상황키 → 반응 클립 이름
│
▼
[반응 시퀀서] clips/<name>.json 타임라인으로 아래 레이어들을 조율
├─ Body 레이어 ── 리그 클립(rig.json+track) │ 또는 │ 베이크드 포즈 이미지
├─ Face 레이어 ── 표정 프레임 스왑(neutral/negative/love/…)
├─ Mouth 레이어 ── 말하기(talk 프레임 순환, 유사 립싱크)
├─ Transform 레이어 ── 리그 위에 덧입히는 잔모션(고개젓기·바운스)
└─ FX/Caption 레이어 ── 말풍선·효과음(옵션)
│
▼
[컴포지터] 파츠 합성 + 표정 오버레이 + 앵커 정렬(AlphaTools 재활용)
│
▼
[렌더러] Canvas(웹 프로토타입) / WPF(본체) — 60fps
레이어 책임
- Body: 캐릭터 몸의 자세/모션. 두 모드.
rig모드 = 16파츠 리그를 클립으로 구동(앰비언트·열린 제스처·전환).baked모드 = 통짜 포즈 이미지 1장(자기-가림 포즈: 팔짱·하트).
- Face: 감정 = 표정 프레임 교체(머리 이미지 스왑).
- Mouth: 말하기 = talk/neutral 프레임 순환(유사 립싱크). 정밀 립싱크는 mesh-warp 승급 시.
- Transform: 리그 본에 delta를 더하는 잔모션(고개 좌우·호흡·바운스). Body가 baked여도 전체 트랜스폼은 적용 가능.
- FX/Caption: 말풍선 텍스트·효과음(옵션).
하이브리드 선택 규칙 (언제 무엇을)
| 상황 | Body 모드 | 근거 |
|---|---|---|
| 배경춤·유휴·호흡 | rig | 부드러운 앰비언트, 자산 최소 |
| 손 흔들기·가리키기·제시·박수 | rig | 열린 자세 → 리그로 자연스러움 |
| 고개 끄덕/젓기 | rig(Transform) | 작은 각도 + 가림 |
| 팔짱·핑거하트·볼하트 | baked | 손이 몸에 겹침 → 리그는 뚫림/어색 |
| 큰 감정 포즈(만세·좌절) | baked 또는 rig(joy/cheer) | 필요 정밀도에 따라 |
전환 (transition)
- rig→rig: 트랜스폼 보간(부드럽게).
- rig↔baked: 짧은 크로스페이드(150~250ms) 또는 리그로 근사 진입 후 스냅.
- 반응 종료 후
return지정 클립(보통idle/dance_idle)으로 복귀.
데이터 재사용
rig.json·클립·reactions.json·표정/포즈 이미지는 웹 뷰어와 WPF가 동일하게 사용(플랫폼 독립 데이터).- 앵커 정렬은 기존
Character_Builder/AlphaTools.cs(알파 기반 목/어깨 검출) 로직을 재활용.