Files
Dansori_Characters/Isabel_Live2D/02_Architecture/Architecture.md
T
2026-07-04 10:34:46 +09:00

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(알파 기반 목/어깨 검출) 로직을 재활용.