Initial Dansori character workspace
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
# 아키텍처 (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`(알파 기반 목/어깨 검출) 로직을 재활용.
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
# 한계와 완화 (Limits & Mitigations)
|
||||
|
||||
강체 컷아웃 + 프레임 스왑의 본질적 한계와, 우리가 쓰는 완화책. 그리고 mesh-warp 승급 기준.
|
||||
|
||||
## L1. 관절 이음새 (강체 회전)
|
||||
- **문제**: 파츠를 크게 회전하면 관절 경계가 벌어지거나 겹침(특히 목). 분절을 늘려도 **근육 연속성은 해결 안 됨**(강체의 본질).
|
||||
- **완화**: ① 회전 각도 작게 ② 피벗 낮게 ③ **근위단 오버랩 스텁**(부모가 틈을 덮음) ④ 옷깃/머리/초커로 **가림** ⑤ z-순서.
|
||||
- **잔여 위험**: 큰 각도 고개돌림·큰 팔동작은 여전히 티남 → baked 포즈로 우회 또는 L4 승급.
|
||||
|
||||
## L2. 립싱크 (프레임 스왑 얼굴)
|
||||
- **문제**: 표정이 눈+입 세트 고정 → "특정 감정 + 정밀 입모양" 동시 불가.
|
||||
- **완화**: 감정 표정 + 고개짓 + talk/neutral 프레임 순환으로 **뉘앙스 전달**. 필요하면 **감정+talk 조합 머리**를 소수 추가 생성(`../03_Assets/Expressions_and_Poses.md`).
|
||||
- **잔여 위험**: 음소 단위 정밀 립싱크는 불가 → L4 승급.
|
||||
|
||||
## L3. 자기-가림 포즈
|
||||
- **문제**: 팔짱·하트 등 손이 몸/반대팔에 겹치는 포즈는 리그로 뚫림.
|
||||
- **완화**: **baked 포즈 이미지**로 대체(기존 18제스처 자산). 진입은 크로스페이드.
|
||||
|
||||
## L4. mesh-warp 승급 (옵션·후속)
|
||||
- **무엇**: 목/얼굴에 그리드 메시를 씌워 **피부 늘어남·입/눈썹 독립 변형·중간 각도 고개돌림**을 구현(WebGL). 우리 런타임 내 구현 → 자동화 유지.
|
||||
- **승급 조건(하나라도 강하게 필요할 때)**: (a) 목 이음새가 baked/가림으로도 부족 (b) 감정+정밀 립싱크 동시 필요 (c) 중간 각도 고개돌림 필요.
|
||||
- **한계(승급해도)**: 큰 각도(대략 30°↑) 고개돌림은 **가려진 반대면이 없어** 여전히 각도별 머리 아트 추가가 필요. 자동 워프가 없는 면을 만들지는 못함.
|
||||
- **원칙**: 전신 아님, **국소(neck/head)만**. 품질 튜닝은 스크린샷 피드백 루프.
|
||||
|
||||
## 요약
|
||||
> 강체+프레임스왑으로 **대부분의 상황 반응은 충분히 자연스럽게** 만든다(가림·baked·잔모션 조합). 정밀 립싱크/큰 고개돌림만 별도 승급(L4/각도 아트) 대상.
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user