Consolidate character profiles and image production docs
This commit is contained in:
@@ -1,47 +1,24 @@
|
||||
# 확정 결정 로그 (Decisions)
|
||||
# Decisions
|
||||
|
||||
> 논의를 통해 확정된 결정과 근거. 뒤집을 땐 여기에 사유와 함께 갱신.
|
||||
## 최종 폴더
|
||||
|
||||
## D1. 표현 방식 = 하이브리드 (확정)
|
||||
리그 + 베이크드 포즈 + 표정 프레임 스왑을 상황별로 조합.
|
||||
- **근거**: 리그는 앰비언트/열린 제스처에 강하고, 팔짱·하트 같은 자기-가림 포즈는 베이크드 이미지가 자연스럽다. 각자의 강점만 사용.
|
||||
- LeeSori의 최종 기준 폴더는 `LeeSori_Profile`이다.
|
||||
- 프로필, 이미지, Live2D, 리그, 댄스 모션, 앱 통합 문서는 모두 이 폴더 안에서 관리한다.
|
||||
|
||||
## D2. 구현 레벨 = 코드 네이티브 경량 리그 (확정, Live2D/Spine 배제)
|
||||
- **근거**: Live2D/Spine의 리깅은 **독점 GUI 에디터에서 사람이** 하는 작업 → **AI 자동화 목적과 상충**. 우리 코드로 리그/모션/반응을 소유하면 데이터(JSON)만으로 자동화·반복이 가능.
|
||||
## 런타임 방향
|
||||
|
||||
## D3. 분절 = 완전 해부학 16파츠 (확정)
|
||||
head·neck·chest·pelvis + (상완·전완·손)×2 + (허벅지·종아리·발)×2.
|
||||
- **근거**: 팔꿈치·무릎·손목·목·허리가 실제로 접혀야 제스처/춤이 자연스럽다.
|
||||
- DansoriEQ에서는 가벼운 웹 기반 캐릭터 호스트를 사용한다.
|
||||
- 단기 앱 적용은 파츠 기반 런타임으로 처리한다.
|
||||
- 장기 제작 기준은 Live2D Cubism에서 사용할 수 있는 세분화 파츠와 파라미터 세트다.
|
||||
|
||||
## D4. 얼굴 = 표정 프레임 스왑 (확정)
|
||||
20종 표정 이미지 교체 + 말하기 = talk 프레임 순환(유사 립싱크).
|
||||
- **한계 인지**: 눈+입이 세트로 고정 → "감정+정밀 립싱크 동시"는 불가. 필요 시 D7로 승급.
|
||||
## 댄스 기준
|
||||
|
||||
## D5. 자기-가림 포즈 = 베이크드 이미지 (확정)
|
||||
팔짱(armscross)·하트(heart) 등은 리그 보간 대신 **통짜 포즈 이미지**로. (기존 표준 18제스처 자산 재사용.)
|
||||
- 주 댄스 레퍼런스는 `Solo Dance 3`다.
|
||||
- 모션 목표는 몸 중심 이동, 흉곽/골반 counter motion, 팔 lift arc, 손목 roll, 손가락 변화, 헤어 secondary motion이다.
|
||||
- 팔 중복을 방지하기 위해 파츠는 겹침이 명확히 통제된 레이어로 분리한다.
|
||||
|
||||
## D6. 투명 알파 필수 (확정)
|
||||
모든 파츠/프레임 = 32-bit RGBA(`Format32bppArgb`), 배경 alpha=0. 24-bit·매트 배경 금지.
|
||||
## 자산 관리
|
||||
|
||||
## D7. mesh-warp(그리드 변형) = 옵션·후속 (보류)
|
||||
목/얼굴 국소 mesh-warp(WebGL)로 목 이음새·정밀 립싱크·중간 각도 고개돌림을 승급.
|
||||
- **승급 조건**: 강체 리그로 목/얼굴이 실제로 부족할 때, 그 부위에만 국소 도입. 전신 적용 안 함.
|
||||
|
||||
## D8. 이미지 = ChatGPT 자동생성 (확정)
|
||||
사람이 안 그림. 생성용 `.md` 스펙을 우리가 제공.
|
||||
|
||||
## D9. 색상·모션 = 코드/데이터 (확정)
|
||||
색 변형 = hairmask hue-shift. 모션 = 리그 클립. 반응 = 시퀀서 데이터.
|
||||
|
||||
## D10. 폴더 통합 (확정)
|
||||
구 `LeeSori_Rigging` → **`LeeSori_Profile`로 통합, Rigging 폐기.** 시트 표준 위치 = `03_Assets/Reference/sori_sheet.png`.
|
||||
|
||||
## D11. 리그 파츠 생성 = 마스터-슬라이스 우선, 개별생성 폴백/attachment (확정)
|
||||
- 핵심 16파츠는 **마스터 1장 → 로컬 슬라이스**(같은 좌표계 → 관절 자동 정합, 접합 오차↓)가 **1순위**. 파츠 개별 생성은 그 **폴백**(같은 16파츠를 만드는 대체 방법 — 둘 다 만들 필요 없음).
|
||||
- **슬라이스 출력 = 풀캔버스**: 각 파츠는 **크롭 없이 마스터와 동일한 520×900 캔버스에 제자리 배치**(그 외 투명). 16장 스택 시 마스터 복원 → 위치정보 보존, 앵커 튜닝 불필요. (타이트 크롭하면 위치정보가 사라져 정합이 깨짐.)
|
||||
- **단 마스터에 없는 변형 파츠**(핑거하트·주먹·가리킴 등 대체 손 attachment)는 **개별 생성으로만** 가능 → 그 용도엔 개별 생성이 별도로 필요.
|
||||
- **근거**: 슬라이스는 좌표 정합에 강함(반복 수정 원인 제거). 생성 AI는 픽셀 좌표를 못 맞추므로 접합 좌표는 **생성 후 이미지에서 측정**(정규화 앵커 `imgAnchor`)해 `rig.json`에 저장.
|
||||
|
||||
## 열린 결정 (미확정)
|
||||
- **O1. 최종 런타임 호스트**: 프로토타입=웹(Canvas). 본체=WPF. WPF에 동일 리그/시퀀서를 이식(C#) 할지, 아니면 WebView2로 웹 런타임을 임베드할지 → `../08_Roadmap/App_Integration.md` 에서 결정 예정.
|
||||
- **O2. 대사 표시**: 말풍선 캡션 vs TTS 음성 vs 둘 다.
|
||||
- 모든 의상, 포즈, 제스처, 파츠는 재사용 가능한 카테고리로 분류한다.
|
||||
- 앱 적용용 baked pose와 Live2D용 source part를 구분한다.
|
||||
- 임시 확인 이미지와 작업용 디버그 파일은 캐릭터 패키지에 포함하지 않는다.
|
||||
|
||||
@@ -1,26 +1,24 @@
|
||||
# 목적과 방향 (Purpose & Direction)
|
||||
# Purpose and Direction
|
||||
|
||||
## 최종 목적
|
||||
이소리를 **앱에 탑재된 인터랙티브 마스코트**로 만든다. 사용자의 행동·앱 상태(상황)에 따라 캐릭터가 **적절한 제스처·표정·대사로 반응**해 살아있는 느낌을 준다.
|
||||
LeeSori는 음악, EQ, 재생 상태, 작업 흐름을 시각적으로 안내하는 메인 캐릭터다. 핵심 인상은 차분한 전문성, 밝은 반응성, 음악 작업에 익숙한 디지털 파트너다.
|
||||
|
||||
## 대표 사용 시나리오 (상황 → 반응)
|
||||
| 상황(트리거) | 반응 |
|
||||
|---|---|
|
||||
| 오류/금지된 동작 | 팔짱 끼고 인상 쓰며 고개 저으며 **"안돼요"** |
|
||||
| 성공/완료/칭찬 | 손 하트 그리며 밝게 **"잘됐어요"** |
|
||||
| 대기/유휴(배경) | 가볍게 **춤추는** 루프(앰비언트) |
|
||||
| (확장) 인사 | 손 흔들며 "안녕하세요" |
|
||||
| (확장) 안내/설명 | 한 손 제시(present) + 말하기 |
|
||||
| (확장) 생각중/로딩 | 갸웃 + thinking 표정 |
|
||||
> 확장 반응은 같은 프레임워크로 계속 추가한다(`../06_Reactions/Reactions.md`).
|
||||
## 캐릭터 역할
|
||||
|
||||
## 방향성 (핵심 원칙)
|
||||
1. **AI 자동화**: 모든 캐릭터 이미지는 **ChatGPT로 생성**(각 생성용 `.md` 스펙 제공). 사람이 그리지 않는다.
|
||||
2. **동작·색상은 코드/데이터**: 모션(리그 클립)·반응 시퀀스·색 변형(hairmask hue-shift)은 이미지가 아니라 코드/데이터. → 재사용·자동화·경량.
|
||||
3. **하이브리드 표현**: 상황에 맞춰 **리그(앰비언트/열린 제스처)** + **베이크드 포즈(자기-가림 포즈)** + **표정 프레임 스왑(감정/말하기)** 을 조합.
|
||||
4. **경량·포터블**: 에디터/외주 없이 **우리 코드**로 리그·모션·반응을 소유. 데이터(JSON)는 뷰어(웹)와 WPF 앱이 동일하게 사용.
|
||||
5. **투명 알파 필수**: 모든 파츠/프레임은 32-bit RGBA(`Format32bppArgb`), 배경 alpha=0.
|
||||
6. **점진적 품질 상향**: 강체 리그로 시작 → 필요한 곳(목/얼굴)만 **mesh-warp** 국소 승급(옵션).
|
||||
- 사용자의 명령을 기다리는 대기 상태 표현
|
||||
- 분석/처리 중인 상태 표현
|
||||
- 완료, 오류, 음소거, 경고 등 앱 상태 피드백
|
||||
- 음악 관련 행동과 감정 표현
|
||||
- DansoriEQ의 브랜드 캐릭터 역할
|
||||
|
||||
## 범위 밖(당분간 안 함)
|
||||
- Live2D/Spine 도입(GUI 리깅=자동화와 상충). 전신 mesh-warp. 3D. 정밀 음소 립싱크(얼굴 mesh-warp 승급 시 재검토).
|
||||
## 시각 방향
|
||||
|
||||
- 헤드셋과 청록 계열 포인트를 주요 식별 요소로 사용한다.
|
||||
- 상체 중심 표현에서 얼굴, 손, 팔, 상체 실루엣이 명확히 보여야 한다.
|
||||
- 앱 우측 패널에서는 무릎 위부터 머리끝까지 보이는 구도를 기본으로 한다.
|
||||
- 과도한 장식보다 반복 사용에 견디는 선명한 실루엣과 안정적인 파츠 분리를 우선한다.
|
||||
|
||||
## 모션 방향
|
||||
|
||||
- idle은 사용자의 명령을 기다리는 상태로 자연스럽고 과하지 않게 유지한다.
|
||||
- dance는 Solo Dance 3 기준으로 상체 리듬, 팔 올림, 손목 회전, 손바닥 방향, 헤어 follow-through를 포함한다.
|
||||
- 모션은 정지 이미지 컷 전환이 아니라 파츠 리그, 보정 파츠, z-order 이벤트, easing curve로 구성한다.
|
||||
|
||||
@@ -1,50 +1,33 @@
|
||||
# 아키텍처 (Architecture)
|
||||
# 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
|
||||
```
|
||||
LeeSori 패키지는 캐릭터 설정, 이미지 라이브러리, Live2D 파츠, 리그, 모션, 앱 통합 자료를 한 폴더 안에서 관리한다.
|
||||
|
||||
## 레이어 책임
|
||||
- **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) | 필요 정밀도에 따라 |
|
||||
1. Character Identity
|
||||
- 이름, 역할, 성격, 주요 시각 요소
|
||||
2. Asset Library
|
||||
- 헤드, 의상, 포즈, 액세서리, baked pose
|
||||
3. Live2D Source
|
||||
- PSD, 레이어 PNG, 레이어 manifest, 파츠 분리 기준
|
||||
4. Rig
|
||||
- bone hierarchy, pivot, z-order, deformation group
|
||||
5. Motion
|
||||
- idle, reaction, dance, transition, loop segment
|
||||
6. Runtime Integration
|
||||
- DansoriEQ 캐릭터 호스트, 상태 매핑, 제스처 레지스트리
|
||||
|
||||
## 전환 (transition)
|
||||
- rig→rig: 트랜스폼 보간(부드럽게).
|
||||
- rig↔baked: 짧은 **크로스페이드**(150~250ms) 또는 리그로 근사 진입 후 스냅.
|
||||
- 반응 종료 후 `return` 지정 클립(보통 `idle`/`dance_idle`)으로 복귀.
|
||||
## 최종 자산 원칙
|
||||
|
||||
## 데이터 재사용
|
||||
- `rig.json`·클립·`reactions.json`·표정/포즈 이미지는 **웹 뷰어와 WPF가 동일하게** 사용(플랫폼 독립 데이터).
|
||||
- 앵커 정렬은 기존 `Character_Builder/AlphaTools.cs`(알파 기반 목/어깨 검출) 로직을 재활용.
|
||||
- 원본 제작 자산과 앱 런타임 자산을 같은 패키지에서 추적한다.
|
||||
- 파일명은 캐릭터, 의상, 파츠, 상태, 방향을 식별할 수 있어야 한다.
|
||||
- 파츠는 독립 회전/변형이 가능한 단위로 분리한다.
|
||||
- 겹침이 필요한 영역은 z-order 이벤트나 보정 파츠로 관리한다.
|
||||
|
||||
## 주요 데이터
|
||||
|
||||
- `layer_manifest.json`: Live2D 레이어 구조
|
||||
- `rig.json`: 앱/뷰어용 리그 정의
|
||||
- `live2d_parameters.json`: Live2D 파라미터 정의
|
||||
- `live2d_motion_plan.json`: 모션 설계 데이터
|
||||
- `reactions.json`: 상태별 제스처 매핑
|
||||
|
||||
@@ -1,26 +1,23 @@
|
||||
# 한계와 완화 (Limits & Mitigations)
|
||||
# Limits and Mitigations
|
||||
|
||||
강체 컷아웃 + 프레임 스왑의 본질적 한계와, 우리가 쓰는 완화책. 그리고 mesh-warp 승급 기준.
|
||||
## 리그 한계
|
||||
|
||||
## L1. 관절 이음새 (강체 회전)
|
||||
- **문제**: 파츠를 크게 회전하면 관절 경계가 벌어지거나 겹침(특히 목). 분절을 늘려도 **근육 연속성은 해결 안 됨**(강체의 본질).
|
||||
- **완화**: ① 회전 각도 작게 ② 피벗 낮게 ③ **근위단 오버랩 스텁**(부모가 틈을 덮음) ④ 옷깃/머리/초커로 **가림** ⑤ z-순서.
|
||||
- **잔여 위험**: 큰 각도 고개돌림·큰 팔동작은 여전히 티남 → baked 포즈로 우회 또는 L4 승급.
|
||||
Live2D 수준의 자연스러운 움직임은 단일 전신 이미지나 큰 팔 파츠만으로 만들 수 없다. 자연스러운 결과를 위해서는 상체, 팔, 손, 손가락, 머리카락, 의상 보정 파츠가 필요하다.
|
||||
|
||||
## L2. 립싱크 (프레임 스왑 얼굴)
|
||||
- **문제**: 표정이 눈+입 세트 고정 → "특정 감정 + 정밀 입모양" 동시 불가.
|
||||
- **완화**: 감정 표정 + 고개짓 + talk/neutral 프레임 순환으로 **뉘앙스 전달**. 필요하면 **감정+talk 조합 머리**를 소수 추가 생성(`../03_Assets/Expressions_and_Poses.md`).
|
||||
- **잔여 위험**: 음소 단위 정밀 립싱크는 불가 → L4 승급.
|
||||
## 보완 원칙
|
||||
|
||||
## L3. 자기-가림 포즈
|
||||
- **문제**: 팔짱·하트 등 손이 몸/반대팔에 겹치는 포즈는 리그로 뚫림.
|
||||
- **완화**: **baked 포즈 이미지**로 대체(기존 18제스처 자산). 진입은 크로스페이드.
|
||||
| 한계 | 보완 방식 |
|
||||
|---|---|
|
||||
| 팔 전체가 한 파츠이면 팔꿈치가 굽혀지지 않음 | 상완, 팔꿈치 보정, 전완, 손목, 손, 손가락 파츠 분리 |
|
||||
| 상체가 회전하면 의상 라인이 끊김 | 가슴/복부/자켓/후드/지퍼 보정 파츠 추가 |
|
||||
| 손바닥 방향이 바뀌지 않음 | palm, backhand, side hand, fist, open hand 상태 추가 |
|
||||
| 머리카락이 몸과 함께 굳어 보임 | 앞머리, 옆머리, 뒷머리, 끝머리 sway 파츠 분리 |
|
||||
| 팔이 몸 앞뒤를 오갈 때 어색함 | z-order 이벤트와 occlusion mask 사용 |
|
||||
| 정지 이미지 전환처럼 보임 | motion curve, easing, overshoot, follow-through 적용 |
|
||||
|
||||
## L4. mesh-warp 승급 (옵션·후속)
|
||||
- **무엇**: 목/얼굴에 그리드 메시를 씌워 **피부 늘어남·입/눈썹 독립 변형·중간 각도 고개돌림**을 구현(WebGL). 우리 런타임 내 구현 → 자동화 유지.
|
||||
- **승급 조건(하나라도 강하게 필요할 때)**: (a) 목 이음새가 baked/가림으로도 부족 (b) 감정+정밀 립싱크 동시 필요 (c) 중간 각도 고개돌림 필요.
|
||||
- **한계(승급해도)**: 큰 각도(대략 30°↑) 고개돌림은 **가려진 반대면이 없어** 여전히 각도별 머리 아트 추가가 필요. 자동 워프가 없는 면을 만들지는 못함.
|
||||
- **원칙**: 전신 아님, **국소(neck/head)만**. 품질 튜닝은 스크린샷 피드백 루프.
|
||||
## 품질 기준
|
||||
|
||||
## 요약
|
||||
> 강체+프레임스왑으로 **대부분의 상황 반응은 충분히 자연스럽게** 만든다(가림·baked·잔모션 조합). 정밀 립싱크/큰 고개돌림만 별도 승급(L4/각도 아트) 대상.
|
||||
- 팔은 한쪽당 최소 상완/전완/손 3단계 이상으로 나뉜다.
|
||||
- 손은 최소 relaxed, open palm, fist, pointing 상태를 갖는다.
|
||||
- 상체는 neutral, left bend, right bend, forward bend, chest-up 보정이 가능해야 한다.
|
||||
- 댄스 루프는 2.5~4초 단위로 재사용 가능해야 한다.
|
||||
|
||||
@@ -1,28 +1,20 @@
|
||||
# 자산 전체 맵 (Assets Overview) — LeeSori
|
||||
# Assets Overview
|
||||
|
||||
> ✅ **완성** — 리그·소스 이미지·Library·반응 런타임 모두 완비. 프로필 자립(소스 원본은 별도 아카이브).
|
||||
LeeSori 자산은 앱 적용과 Live2D 제작을 모두 지원한다.
|
||||
|
||||
## 자산 (전부 프로필 내)
|
||||
| 종류 | 개수 | 위치 |
|
||||
## 자산 범주
|
||||
|
||||
| 범주 | 위치 | 내용 |
|
||||
|---|---|---|
|
||||
| 시트 | 1 | `Reference/sori_sheet.png` |
|
||||
| 리그 파츠(마스터+16 풀캔버스) | 17 | `Parts/Images/` — 피벗 산출·배경춤 검증 완료 |
|
||||
| 베이크드 포즈 | 다수 | `Library/BakedPoses/` (Track·Campus·CeoPantsuit·DressLong·DressShort·Jeans·Tshirt) |
|
||||
| 레거시 파츠 | — | `Library/CoarseParts/` (의상별 5) |
|
||||
| 표정 프레임 | 20/헤어모양 | `Library/Heads/` (반응 head base `sori_head_short`) |
|
||||
| hairmask / 악세서리 | — | `Library/Hairmasks/` · `Accessories/` |
|
||||
| `_layout.json` | — | `06_Reactions/` (반응 바디↔머리 목 정합) |
|
||||
> **이미지 2부류**: ① 관절 분할 파츠(`Parts/`, RIG용) + ② 통짜 포즈(`Library/BakedPoses/`, baked용). 역할 분담.
|
||||
| Reference | `03_Assets/Reference` | 기준 이미지, A-pose, 시트 |
|
||||
| Parts | `03_Assets/Parts` | 앱/리그용 기본 신체 파츠 |
|
||||
| Live2D | `03_Assets/Live2D` | PSD, 레이어 PNG, manifest, preview |
|
||||
| Library | `03_Assets/Library` | 의상, 헤드, 포즈, 액세서리, 변형 자료 |
|
||||
| Dance | `03_Assets/Dance` | Solo Dance 3 포즈/프레임/리그 자료 |
|
||||
|
||||
## 뷰어 (더블클릭 재생)
|
||||
- 배경춤: `07_Viewer/index.html`
|
||||
- 반응: `07_Viewer/reactions.html` — 트리거 idle / error / success
|
||||
## 제작 기준
|
||||
|
||||
## dance 튜닝 (occlusion-aware)
|
||||
크롭탑으로 **미드리프(맨살) 노출** → `dance_idle`에서 **chest 트랙 없음(골반에 리지드)** 으로 허리 이음새 봉인. 스웨이는 pelvis가 상체 통째로.
|
||||
|
||||
## 반응 매핑
|
||||
| 상황 | Body(baked) | Face |
|
||||
|---|---|---|
|
||||
| error | `sori_body_track_armscross` | `sori_head_short_negative` |
|
||||
| success | `sori_body_track_heart` | `sori_head_short_love` |
|
||||
- 원본과 파생 이미지는 폴더로 분리한다.
|
||||
- 앱용 preview와 제작용 source layer를 혼동하지 않는다.
|
||||
- 손, 팔, 머리카락, 의상 라인은 독립 파츠와 보정 파츠를 모두 갖춘다.
|
||||
- 파츠가 겹치는 경우 목적과 z-order를 manifest에 기록한다.
|
||||
|
||||
@@ -1,47 +1,69 @@
|
||||
# Rig.md — 스켈레톤 정의 (`rig.json`, 풀캔버스 모드)
|
||||
# Rig Specification
|
||||
|
||||
경량 리그 뼈대. 뷰어(`../07_Viewer/index.html`)와 WPF 앱이 동일하게 읽는다.
|
||||
LeeSori 리그는 앱 런타임용 경량 파츠 리그와 Live2D 제작용 세분화 리그를 함께 고려한다.
|
||||
|
||||
## 모델: 풀캔버스 (full-canvas)
|
||||
- 각 파츠 PNG = **520×900 풀캔버스**, 파츠가 **마스터 제자리**에 있음.
|
||||
- 렌더러는 파츠를 **원점(0,0)에 그리고, 관절 피벗을 중심으로 회전**한다.
|
||||
- **휴지 자세(모든 rot/tx/ty=0)** 에서는 모든 월드행렬 = 단위행렬 → 16장 스택 = 마스터 복원.
|
||||
- 그래서 **위치 앵커 튜닝이 필요 없다**(위치는 이미 파츠에 baked).
|
||||
## 기본 계층
|
||||
|
||||
## 본 계층
|
||||
```
|
||||
pelvis (root)
|
||||
├─ chest
|
||||
│ ├─ neck ─ head
|
||||
│ ├─ upperarm_r ─ forearm_r ─ hand_r (캐릭터 오른팔 = 화면 왼쪽)
|
||||
│ └─ upperarm_l ─ forearm_l ─ hand_l
|
||||
├─ thigh_r ─ shin_r ─ foot_r
|
||||
└─ thigh_l ─ shin_l ─ foot_l
|
||||
```
|
||||
- Root
|
||||
- Pelvis
|
||||
- Abdomen
|
||||
- Chest
|
||||
- Neck
|
||||
- Head
|
||||
- Hair groups
|
||||
- Left arm groups
|
||||
- Right arm groups
|
||||
- Left leg groups
|
||||
- Right leg groups
|
||||
- Clothing overlays
|
||||
- Accessory overlays
|
||||
|
||||
## 필드 (bones[])
|
||||
| 필드 | 의미 |
|
||||
|---|---|
|
||||
| `name` | 본 이름(= 애니메이션 트랙 키) |
|
||||
| `parent` | 부모(root=null). 배열은 부모 먼저 |
|
||||
| `pivot` `[x,y]` | **회전 중심 = 관절 좌표**(520×900 캔버스 픽셀). **파츠 오버랩 centroid로 자동 산출** |
|
||||
| `z` | 그리기 순서(작을수록 뒤) |
|
||||
| `image` | 파츠 PNG(`imageBase`+이 값), 520×900 풀캔버스 |
|
||||
## 필수 파츠
|
||||
|
||||
## FK (렌더 수식)
|
||||
```
|
||||
world[bone] = world[parent] · Mlocal
|
||||
Mlocal = T(tx,ty) · T(pivot) · R(rot) · T(-pivot) // rot/tx/ty = 애니메이션 delta
|
||||
draw: setTransform(world); drawImage(part, 0, 0) // 원점에 그림
|
||||
```
|
||||
### Body
|
||||
|
||||
## 피벗 산출(자동)
|
||||
`pivot(bone) = centroid( opaque(bone) ∩ opaque(parent) )` — 인접 파츠의 오버랩 영역 무게중심 = 관절. (스크립트로 1회 산출해 여기 박음. 파츠 교체 시 재산출.)
|
||||
- pelvis
|
||||
- abdomen
|
||||
- chest
|
||||
- neck
|
||||
- head
|
||||
- breast/cloth corrective overlays
|
||||
- waist/hip corrective overlays
|
||||
|
||||
## 검증됨
|
||||
- 16파츠 스택 = 마스터(missed 0 / extra 0.03%).
|
||||
- 자동 피벗으로 `dance_idle` 재생 시 관절이 자연스럽게 회전(헤드리스 렌더 t=0/0.5/1.0/1.5 확인).
|
||||
### Arms and Hands
|
||||
|
||||
## 튜닝 (필요 시)
|
||||
- 관절 회전축이 어긋나면 해당 `pivot` 미세조정. 겹침 순서는 `z`.
|
||||
- 큰 각도에서 이음새가 보이면 애니 진폭↓ 또는 후속 mesh-warp(`../02_Architecture/Limits_and_Mitigations.md`).
|
||||
- upperarm L/R
|
||||
- elbow corrective L/R
|
||||
- forearm L/R
|
||||
- wrist cuff L/R
|
||||
- palm L/R
|
||||
- backhand L/R
|
||||
- finger groups L/R
|
||||
- hand pose swaps: relaxed, open, fist, pointing
|
||||
|
||||
### Hair
|
||||
|
||||
- back hair base
|
||||
- back hair tips
|
||||
- front hair center/L/R
|
||||
- side hair L/R
|
||||
- hair highlights
|
||||
|
||||
### Clothes
|
||||
|
||||
- hoodie front
|
||||
- hoodie strings
|
||||
- jacket body
|
||||
- jacket sleeve L/R
|
||||
- hood front/back
|
||||
- pants base
|
||||
- waistband/drawstring overlays
|
||||
|
||||
## 모션 제어
|
||||
|
||||
- rootX/rootY로 전체 리듬을 만든다.
|
||||
- pelvis와 chest는 반대 방향 회전을 기본으로 한다.
|
||||
- head는 chest보다 약간 늦게 따라온다.
|
||||
- hair는 head보다 더 늦게 움직인다.
|
||||
- arms는 shoulder, elbow, wrist, palm 방향을 분리 제어한다.
|
||||
- z-order 이벤트로 arm-over-body, body-over-arm, hair-over-shoulder 상태를 전환한다.
|
||||
|
||||
@@ -1,30 +1,31 @@
|
||||
# Animation.md — 리그 클립 (`dance_idle.json`) 설명
|
||||
# Animation Specification
|
||||
|
||||
리그(16파츠)를 움직이는 **본 단위 키프레임** 클립. 뷰어가 매 프레임 샘플링해 60fps 재생. 이 스키마는 반응 시퀀서(`../06_Reactions/`)의 `transform` 레이어에도 쓰인다.
|
||||
LeeSori 애니메이션은 상태 반응과 댄스 루프를 모두 지원한다.
|
||||
|
||||
## 스키마
|
||||
```jsonc
|
||||
{
|
||||
"duration": 2.0, "loop": true,
|
||||
"defaultEase": "sine", // "linear"도 가능
|
||||
"tracks": {
|
||||
"<boneName>": {
|
||||
"rot": [ {"t":0,"v":0}, {"t":0.5,"v":7}, ... ], // 회전 delta(deg, +=시계)
|
||||
"tx": [...], "ty": [...], // 부모 프레임 이동 delta(px, +y=아래)
|
||||
"sx": [...], "sy": [...] // 스케일 delta(0=변화없음→배율1)
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
- 값은 **리그 휴지 자세에 더해진다**(`rest + delta`).
|
||||
- **각 트랙 첫 키 = 마지막 키** 로 두면 루프가 이음매 없이 반복.
|
||||
## 기본 상태
|
||||
|
||||
## 현재 클립: `dance_idle` (가벼운 2박 그루브, 2초 루프)
|
||||
- pelvis: 바운스+스웨이 / chest: 반대 카운터 / head: 좌우 ±7°(+neck 지연) / 팔: 좌우 교대 펌핑 / 다리: 무릎 교대 굽힘.
|
||||
- idle: 대기, 부드러운 호흡, 미세한 머리/상체 움직임
|
||||
- thinking: 처리 중, 약간 빠른 상체 리듬과 시선 변화
|
||||
- success: 완료, 밝은 반응과 가벼운 팔 동작
|
||||
- error: 오류, 짧은 흔들림과 표정 변화
|
||||
- muted: 차분한 낮은 에너지 상태
|
||||
|
||||
## 강도 조절
|
||||
- 과하면 모든 `v`×0.6~0.8 / 목 벌어지면 `head.rot` 폭↓ / 신나게 pelvis `ty`↑ / 빠르게 `duration`↓.
|
||||
## 댄스 모션
|
||||
|
||||
## 새 클립
|
||||
- 이 파일 복제 → 원하는 본 트랙만 작성(첫=끝) → 뷰어 "애니메이션 불러오기"로 확인.
|
||||
- 상시 포즈 오프셋은 클립이 아니라 `../04_Rig/rig.json`의 `angle`로 주는 게 깔끔(클립은 그 위 흔들림만).
|
||||
Solo Dance 3를 기준으로 다음 모션을 제작한다.
|
||||
|
||||
- idle groove
|
||||
- hand forward / palm push
|
||||
- wrist roll
|
||||
- arms up
|
||||
- hair touch / head follow
|
||||
- side turn
|
||||
- return settle
|
||||
|
||||
## 커브 기준
|
||||
|
||||
- linear 보간은 사용하지 않는다.
|
||||
- 팔 올림은 ease-out과 overshoot를 사용한다.
|
||||
- 몸통 bounce는 sine/cubic loop를 사용한다.
|
||||
- 머리와 머리카락은 phase offset을 둔다.
|
||||
- 손목과 손가락은 팔보다 작고 빠른 움직임을 갖는다.
|
||||
|
||||
@@ -1,63 +1,22 @@
|
||||
# 반응 시퀀서 & 트리거 (Reactions)
|
||||
# Reactions
|
||||
|
||||
상황 → 반응을 정의하는 레이어. **트리거 매퍼**(`reactions.json`) + **반응 클립**(`clips/*.json`)으로 구성.
|
||||
> ✅ **Phase 2 런타임 구현됨**: `../07_Viewer/reactions.html`(더블클릭). idle=배경춤(풀캔버스 리그, 허리 봉인 튜닝) + 트리거(idle/error/success). baked 바디 + 표정 머리(목 정합·회전)는 `../../_tools/reactions_layout_render.py`→`_layout.json` 사용. head base=`sori_head_short`. 오프라인 검증 `_reaction_preview.png`.
|
||||
LeeSori 리액션은 DansoriEQ 상태와 연결된다.
|
||||
|
||||
## 트리거 매퍼 (`reactions.json`)
|
||||
상황키 → 반응 클립 이름. 앱은 상황키만 던지면 된다.
|
||||
```json
|
||||
{ "error": "gesture_no", "success": "gesture_heart", "idle": "dance_idle" }
|
||||
```
|
||||
## 상태 매핑
|
||||
|
||||
## 반응 클립 스키마 (`clips/<name>.json`)
|
||||
하나의 반응 = 레이어드 타임라인.
|
||||
```jsonc
|
||||
{
|
||||
"name": "gesture_no",
|
||||
"duration": 2.4, // 초
|
||||
"return": "idle", // 종료 후 복귀 클립(보통 배경 idle)
|
||||
"layers": {
|
||||
"body": [ // Body 트랙: 시간에 따라 rig 클립 or baked 포즈
|
||||
{ "t":0.0, "mode":"rig", "clip":"idle" },
|
||||
{ "t":0.15,"mode":"baked", "image":"sori_body_track_armscross", "fade":0.2 }
|
||||
],
|
||||
"face": [ // 표정 프레임 트랙
|
||||
{ "t":0.0, "expr":"neutral" },
|
||||
{ "t":0.3, "expr":"negative" }
|
||||
],
|
||||
"mouth": [ // 말하기(유사 립싱크): expr↔talk 순환
|
||||
{ "t":0.5, "say":"안돼요", "dur":1.2, "pattern":"talk" }
|
||||
],
|
||||
"transform": { // 리그 위 잔모션(본별 delta) — Animation.md 스키마와 동일
|
||||
"head": { "rot":[ {"t":0.5,"v":0},{"t":0.8,"v":9},{"t":1.1,"v":-9},{"t":1.4,"v":9},{"t":1.7,"v":0} ] },
|
||||
"chest":{ "ty":[ {"t":0.0,"v":0},{"t":0.2,"v":-4},{"t":0.5,"v":0} ] }
|
||||
},
|
||||
"caption": [ { "t":0.5, "text":"안돼요", "dur":1.6 } ], // 옵션 말풍선
|
||||
"sfx": [ { "t":0.5, "id":"nope" } ] // 옵션 효과음
|
||||
}
|
||||
}
|
||||
```
|
||||
### 필드 규칙
|
||||
- `body[]`: 시간순. `mode:"rig"`+`clip` 또는 `mode:"baked"`+`image`(파일명, 확장자 생략 가능). `fade`=크로스페이드 초.
|
||||
- `face[]`: `expr` = 표정 프레임 키(20종 중). 시간에 스냅.
|
||||
- `mouth[]`: `say` 대사, `dur` 길이, `pattern:"talk"`(talk/talk_wide/현재 감정 프레임 순환). 립싱크는 근사.
|
||||
- `transform`: 본별 키프레임(리그 delta). Body가 baked여도 head/chest 등 트랜스폼은 적용(단 baked는 통짜라 파츠 분리 트랜스폼은 제한적 → 주로 전체/머리에 적용).
|
||||
- `caption`/`sfx`: 옵션. 앱 설정(말풍선/TTS)에 따라 사용.
|
||||
| 상태 | 표현 |
|
||||
|---|---|
|
||||
| idle | 명령 대기, 자연스러운 호흡과 시선 |
|
||||
| listening | 사용자의 입력을 듣는 집중 상태 |
|
||||
| thinking | 처리 중, 상체와 손의 작은 움직임 |
|
||||
| success | 완료, 밝은 표정과 짧은 축하 제스처 |
|
||||
| error | 문제 발생, 짧은 흔들림과 걱정 표정 |
|
||||
| muted | 소리/반응 억제 상태 |
|
||||
| dance | 음악적 루프 동작 |
|
||||
|
||||
## 상황 → 반응 카탈로그
|
||||
| 상황키 | 클립 | Body | Face | Mouth | 잔모션 |
|
||||
|---|---|---|---|---|---|
|
||||
| `error` | `gesture_no` | baked armscross | negative | "안돼요" | 고개 젓기 |
|
||||
| `success` | `gesture_heart` | baked heart | love/positive | "잘됐어요" | 통통 바운스 |
|
||||
| `idle` | `dance_idle` | rig | smile/neutral | — | 그루브 루프 |
|
||||
| *(확장)* `greet` | `gesture_wave` | rig wave | smile | "안녕하세요" | 손 흔들기 |
|
||||
| *(확장)* `explain` | `gesture_present` | rig present | neutral | 안내 대사 | 제시 |
|
||||
| *(확장)* `thinking` | `gesture_think` | rig idle_upper | thinking | — | 갸웃 |
|
||||
## 제스처 원칙
|
||||
|
||||
## 트리거 API(개념)
|
||||
```
|
||||
Mascot.React("success") // reactions.json으로 클립 결정 → 시퀀서 재생 → 종료 후 return 클립
|
||||
Mascot.SetIdle("dance_idle")// 배경 기본 루프
|
||||
Mascot.Say("...", expr) // 임시 대사(mouth+face)만
|
||||
```
|
||||
상세 앱 연동: `../08_Roadmap/App_Integration.md`.
|
||||
- 앱 사용을 방해하지 않는 범위에서 움직인다.
|
||||
- 루프 시작과 끝은 자연스럽게 연결된다.
|
||||
- 팔과 손이 몸통을 가릴 때 z-order를 명시한다.
|
||||
- 표정, 머리, 상체, 팔은 서로 다른 타이밍으로 움직인다.
|
||||
|
||||
@@ -1,27 +1,19 @@
|
||||
# Viewer.md — 리그 뷰어 (`index.html`) 사용법
|
||||
# Viewer
|
||||
|
||||
자립형 캔버스 런타임(프로토타입). **더블클릭만으로** 이소리 리그가 60fps로 춤춘다(이미지 없이 플레이스홀더로).
|
||||
> 현 단계 뷰어는 **리그 클립 재생기**(Phase 1 검증용). 반응 시퀀서(베이크드+표정 레이어 합성)는 Phase 2에서 확장 → `../08_Roadmap/Roadmap.md`.
|
||||
Viewer는 LeeSori 자산과 리그를 빠르게 확인하기 위한 로컬 검증 도구다.
|
||||
|
||||
## 실행
|
||||
- `index.html` 를 브라우저로 열기(더블클릭). 서버·빌드 불필요. 기본 리그/애니메이션 내장.
|
||||
## 확인 항목
|
||||
|
||||
## 컨트롤
|
||||
| 버튼 | 기능 |
|
||||
|---|---|
|
||||
| ⏸/▶ | 재생 토글 · 속도 슬라이더 0~2배 |
|
||||
| 🖼 아트 사용 | 파츠 PNG로 렌더 ↔ 플레이스홀더 |
|
||||
| 🦴 스켈레톤 | 관절점·본 라인 오버레이(튜닝용) |
|
||||
| 📂 rig.json / animation.json | 외부 파일 로드(수정본 반영) |
|
||||
| 🖼 파츠 PNG(다중) | 파츠 이미지 직접 지정(파일명 매칭) |
|
||||
- 파츠 누락 여부
|
||||
- z-order 오류
|
||||
- 팔/손/머리카락 겹침
|
||||
- 프레이밍
|
||||
- 루프 연결성
|
||||
- 상태별 반응 전환
|
||||
- 앱 우측 패널 크롭
|
||||
|
||||
## 이미지 붙이기
|
||||
1. **자동**: ChatGPT 결과를 `../03_Assets/Parts/Images/` 에 정확한 파일명으로 저장 → 뷰어 자동 로드 → 🖼 아트 사용 ON.
|
||||
2. **수동**(상대경로 차단 시): 🖼 파츠 PNG(다중)로 직접 선택. 우측 패널 `파츠 이미지 로드: N/16` 확인.
|
||||
## 기준
|
||||
|
||||
## 튜닝
|
||||
- 🦴+🖼 켜고 분홍 관절점이 아트 관절에 오도록 `../04_Rig/rig.json`의 `imgAnchor/pos` 수정 → 📂 rig.json 재로드.
|
||||
- 모션은 `../05_Animation/dance_idle.json` 수정 → 📂 animation.json 재로드.
|
||||
|
||||
## 참고
|
||||
- 내장 리그/클립은 `../04_Rig/rig.json`·`../05_Animation/dance_idle.json` 의 사본. 파일 수정 후 📂로 로드하거나 index.html 상단 `DEFAULT_RIG`/`DEFAULT_ANIM` 갱신.
|
||||
- 캐릭터는 무릎 위부터 머리끝까지 자연스럽게 보여야 한다.
|
||||
- 팔이 두 쌍으로 보이거나 파츠가 중복되면 리그 실패로 판단한다.
|
||||
- 정지 이미지 컷 전환처럼 보이면 모션 커브와 파츠 분리가 부족한 상태다.
|
||||
|
||||
@@ -1,36 +1,27 @@
|
||||
# 앱 통합 (App Integration)
|
||||
# App Integration
|
||||
|
||||
이소리 반응 시스템을 **DansoriEQ(및 향후 Dansori 앱)** 에 탑재하는 방식.
|
||||
LeeSori는 DansoriEQ의 캐릭터 호스트에서 표시된다.
|
||||
|
||||
## 런타임 호스트 두 선택지 (O1 — 결정 예정)
|
||||
| 옵션 | 방식 | 장점 | 단점 |
|
||||
|---|---|---|---|
|
||||
| **A. WPF-C# 이식** | 리그·시퀀서를 C#로 포팅, WPF 캔버스에 렌더 | 네이티브·경량·기존 `AlphaTools` 재활용 | 런타임을 두 벌(웹/C#) 유지 |
|
||||
| **B. WebView2 임베드** | 웹 런타임(뷰어 진화형)을 WPF WebView2에 임베드 | 런타임 1벌(데이터·코드 공유) | WebView2 의존·상호작용 브리지 필요 |
|
||||
> 프로토타입은 웹으로 계속. Phase 3에서 A/B 결정. 어느 쪽이든 **데이터(`rig.json`·클립·`reactions.json`·이미지)는 그대로 재사용**.
|
||||
## 앱 표시 기준
|
||||
|
||||
## 트리거 API (앱 ↔ 마스코트)
|
||||
```
|
||||
Mascot.SetIdle("dance_idle") // 배경 기본 루프 지정
|
||||
Mascot.React("success") // 상황키 → reactions.json → 클립 재생 → 끝나면 return(idle)
|
||||
Mascot.React("error")
|
||||
Mascot.Say("환영합니다", "smile") // 임시 대사(mouth+face)만, 포즈 유지
|
||||
Mascot.Stop() / Mascot.SetVisible(b)
|
||||
```
|
||||
- 앱 이벤트(버튼 실패/성공, 화면 진입 등)에서 상황키만 던진다. 표현 방법은 마스코트가 데이터로 결정.
|
||||
- 위치: 앱 우측 캐릭터 영역
|
||||
- 기본 프레이밍: 무릎 위부터 머리끝까지
|
||||
- 우선 상태: idle, thinking, success, error, muted, dance
|
||||
- 파일 기준: Profile 패키지에서 검증된 런타임 자산만 앱에 반영
|
||||
|
||||
## 리소스 번들
|
||||
- **필요한 PNG만** 앱 리소스로 복사(전부 아님): 리그 16파츠 + 사용하는 표정 세트 + 사용하는 baked 포즈 + hairmask.
|
||||
- 데이터 파일(`rig.json`·클립·`reactions.json`)은 소스로 번들.
|
||||
## 런타임 요구
|
||||
|
||||
## 좌표·정렬 규약
|
||||
- 스테이지 캔버스 기준(현재 리그 520×900). 앱 배치 시 전체 스케일/위치만 트랜스폼.
|
||||
- 파츠 앵커 정렬은 기존 `Character_Builder/AlphaTools.cs`(알파 기반 목/어깨 검출)와 동일 알고리즘 재활용.
|
||||
- 색 변형은 런타임 hairmask hue-shift(이미지 추가 없음).
|
||||
- 캐릭터 manifest
|
||||
- rig.json
|
||||
- gesture registry
|
||||
- state-to-gesture mapping
|
||||
- asset cache busting
|
||||
- z-order event support
|
||||
|
||||
## 배경 마스코트 연동(DansoriEQ 예시)
|
||||
- 메인화면 배경 이소리를 **통짜 → 리그**로 교체(부유+말하기 동기화는 기존 `MainWindow.SetBgMascotTalking` 훅 활용).
|
||||
- 참고: `../../HANDOFF.md`, DansoriEQ `docs/HANDOFF.md §8`.
|
||||
## 품질 기준
|
||||
|
||||
## 포터블 원칙
|
||||
- 절대경로 금지. `LeeSori_Profile`은 통째 이동 가능하게 상대경로만 사용.
|
||||
- 팔 중복 없음
|
||||
- 파츠 절단선 최소화
|
||||
- 의상 라인 자연스러움
|
||||
- 손/손목 방향 변화 표현
|
||||
- 루프 연결 자연스러움
|
||||
|
||||
@@ -1,36 +1,37 @@
|
||||
# 로드맵 (Roadmap)
|
||||
# Roadmap
|
||||
|
||||
단계별 구현 계획. 각 Phase는 **완료조건**을 만족하면 다음으로.
|
||||
## 1. 기준 자료 확정
|
||||
|
||||
## Phase 0 — 방향·설계 (완료)
|
||||
- 하이브리드 방식·구현레벨 확정(`../01_Overview/Decisions.md`).
|
||||
- 리그 스키마(`../04_Rig/rig.json`) + 배경춤 프로토타입(`../05_Animation/dance_idle.json`) + 뷰어(`../07_Viewer/`).
|
||||
- **완료조건**: 뷰어에서 플레이스홀더 춤 재생 확인. ✅
|
||||
- Solo Dance 3 키포즈 24~32개 추출
|
||||
- keyframe label 작성
|
||||
- motion reference manifest 작성
|
||||
|
||||
## Phase 1 — 자산 생성 & 리그 실아트 검증
|
||||
1. 이소리 **시트 투명알파 재확정**(`(소스 아카이브)`).
|
||||
2. **리그 16파츠 확보** — **방법 A(마스터-슬라이스) 우선**: 슬라이스용 마스터 1장 생성 → 로컬에서 16조각(관절 자동 정합). 어려우면 **방법 B(개별 생성)** 폴백. (대체 손 attachment는 B로.) 스펙: `../이미지작업_의뢰서.md` · `../03_Assets/Parts/Parts.md` → `Parts/Images/`.
|
||||
3. 뷰어에서 실아트 로드 → `rig.json`의 `imgAnchor/pos` 튜닝(관절 정합).
|
||||
4. 배경춤(`dance_idle`)이 실제 이소리로 자연스러운지 확인.
|
||||
- **완료조건**: 실제 파츠로 배경춤이 이음새 없이 자연스럽게 루프.
|
||||
## 2. 파츠 확장
|
||||
|
||||
## Phase 2 — 반응 시퀀서 런타임
|
||||
1. 시퀀서 구현: `reactions.json` + `clips/*.json`의 **Body/Face/Mouth/Transform/Caption** 레이어 합성·전환(크로스페이드).
|
||||
2. 뷰어 확장(또는 별도 러너)으로 `gesture_no`·`gesture_heart`·`dance_idle` 재생.
|
||||
3. 베이크드 포즈(armscross/heart) + 표정 프레임 연동. 말하기 근사 립싱크.
|
||||
- **완료조건**: 상황키 3종(error/success/idle)으로 반응 재생·복귀 동작.
|
||||
- 상완/전완/손/손가락 분리
|
||||
- 상체/의상 보정 파츠 생성
|
||||
- 머리카락 sway 파츠 생성
|
||||
- z-order mask 생성
|
||||
|
||||
## Phase 3 — 앱 통합 (WPF 본체)
|
||||
1. 런타임 호스트 결정(WPF-C# 이식 vs WebView2 임베드 — `App_Integration.md` 참고).
|
||||
2. 트리거 API(`Mascot.React/SetIdle/Say`)로 앱 이벤트 연결.
|
||||
3. 리소스 번들(필요한 PNG만) + 좌표규약.
|
||||
- **완료조건**: 앱에서 실제 상황에 캐릭터가 반응.
|
||||
## 3. 리그 구축
|
||||
|
||||
## Phase 4 — (옵션) 얼굴 mesh-warp 승급
|
||||
- 조건 충족 시(정밀 립싱크/중간 각도 고개돌림 — `../02_Architecture/Limits_and_Mitigations.md` L4) neck/head 국소 WebGL mesh-warp 도입.
|
||||
- bone hierarchy 작성
|
||||
- pivot 정리
|
||||
- Live2D parameter 정의
|
||||
- 앱 런타임용 경량 rig 변환
|
||||
|
||||
## 반응 확장 (상시)
|
||||
- 같은 프레임워크로 greet/explain/thinking 등 반응을 계속 추가(`../06_Reactions/`).
|
||||
## 4. 모션 제작
|
||||
|
||||
## 현재 위치
|
||||
> **Phase 1 진입 지점.** 다음 액션 = 시트 재확정 + 리그 파츠 생성 의뢰.
|
||||
- idle groove
|
||||
- hand forward
|
||||
- arms up
|
||||
- side turn
|
||||
- return settle
|
||||
- reaction clips
|
||||
|
||||
## 5. 앱 통합
|
||||
|
||||
- DansoriEQ 상태 매핑
|
||||
- gesture registry 등록
|
||||
- 우측 패널 프레이밍 확인
|
||||
- 성능 검증
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
# Dance Rig Required Parts
|
||||
|
||||
Solo Dance 3 수준의 자연스러운 댄스 모션을 위해 다음 파츠를 제작한다.
|
||||
|
||||
## 팔/손
|
||||
|
||||
- upperarm L/R
|
||||
- elbow corrective L/R
|
||||
- forearm L/R
|
||||
- wrist cuff L/R
|
||||
- palm L/R
|
||||
- backhand L/R
|
||||
- thumb/index/middle/ring/pinky group L/R
|
||||
- relaxed hand L/R
|
||||
- open palm L/R
|
||||
- soft fist L/R
|
||||
- pointing hand L/R
|
||||
|
||||
## 상체/의상
|
||||
|
||||
- chest base
|
||||
- chest left/right cloth stretch
|
||||
- under-bust shadow
|
||||
- abdomen front
|
||||
- waist bend corrective L/R
|
||||
- jacket body
|
||||
- jacket inner flap L/R
|
||||
- hoodie collar L/R
|
||||
- zipper/string overlays
|
||||
|
||||
## 하체
|
||||
|
||||
- pelvis
|
||||
- hip corrective L/R
|
||||
- thigh L/R
|
||||
- knee corrective L/R
|
||||
- shin L/R
|
||||
- foot L/R
|
||||
- pants fold overlays
|
||||
|
||||
## 머리/헤어
|
||||
|
||||
- face base
|
||||
- front hair center/L/R
|
||||
- side hair L/R
|
||||
- back hair mass
|
||||
- hair tip L/R
|
||||
- headset band and cups
|
||||
- choker/pendant overlays
|
||||
|
||||
## 마스크와 레이어 이벤트
|
||||
|
||||
- arm over torso
|
||||
- torso over arm
|
||||
- hand over face
|
||||
- hair over shoulder
|
||||
- shoulder over hair
|
||||
@@ -0,0 +1,53 @@
|
||||
# Dance Rig Extension Specification
|
||||
|
||||
## 리그 목표
|
||||
|
||||
- 팔이 몸 앞뒤를 자연스럽게 오간다.
|
||||
- 상체와 골반이 반대 방향으로 움직인다.
|
||||
- 손목과 손바닥 방향이 프레임마다 달라진다.
|
||||
- 손가락이 펴지고 굽혀지는 변화를 표현한다.
|
||||
- 의상 라인이 파츠 이동 중에도 이어진다.
|
||||
|
||||
## Bone Hierarchy
|
||||
|
||||
- Root
|
||||
- Pelvis
|
||||
- Abdomen
|
||||
- Chest
|
||||
- Neck
|
||||
- Head
|
||||
- Hair groups
|
||||
- Arm L
|
||||
- UpperArm L
|
||||
- ForeArm L
|
||||
- Hand L
|
||||
- Fingers L
|
||||
- Arm R
|
||||
- UpperArm R
|
||||
- ForeArm R
|
||||
- Hand R
|
||||
- Fingers R
|
||||
- Leg L
|
||||
- Leg R
|
||||
|
||||
## Motion Channels
|
||||
|
||||
- rootX, rootY
|
||||
- pelvisRotateZ, pelvisX, pelvisY
|
||||
- abdomenBendX, abdomenBendY
|
||||
- chestRotateZ, chestX, chestY
|
||||
- headRotateZ, headX, headY
|
||||
- shoulderRaise L/R
|
||||
- elbowBend L/R
|
||||
- wristRoll L/R
|
||||
- palmOpen L/R
|
||||
- fingerCurl L/R
|
||||
- hairSway L/R
|
||||
|
||||
## Z-order Events
|
||||
|
||||
- armFront L/R
|
||||
- armBack L/R
|
||||
- handFrontFace L/R
|
||||
- hairFrontShoulder L/R
|
||||
- torsoFrontArm L/R
|
||||
@@ -0,0 +1,35 @@
|
||||
# Live2D Parameter and Motion Specification
|
||||
|
||||
## Parameters
|
||||
|
||||
| Parameter | Range | Purpose |
|
||||
|---|---:|---|
|
||||
| ParamRootX | -1..1 | 전체 좌우 이동 |
|
||||
| ParamRootY | -1..1 | bounce |
|
||||
| ParamPelvisAngleZ | -30..30 | 골반 회전 |
|
||||
| ParamChestAngleZ | -30..30 | 흉곽 회전 |
|
||||
| ParamBodyBendX | -1..1 | 상체 좌우 굽힘 |
|
||||
| ParamBodyBendY | -1..1 | 상체 전후 굽힘 |
|
||||
| ParamHeadAngleZ | -30..30 | 머리 회전 |
|
||||
| ParamArmLiftL/R | 0..1 | 팔 올림 |
|
||||
| ParamElbowBendL/R | 0..1 | 팔꿈치 굽힘 |
|
||||
| ParamWristRollL/R | -1..1 | 손목 회전 |
|
||||
| ParamPalmOpenL/R | 0..1 | 손바닥 개방 |
|
||||
| ParamFingerCurlL/R | 0..1 | 손가락 굽힘 |
|
||||
| ParamHairSwayL/R | -1..1 | 머리카락 흔들림 |
|
||||
|
||||
## Motion Loops
|
||||
|
||||
- Loop A: idle groove
|
||||
- Loop B: hand forward / palm push
|
||||
- Loop C: arms up
|
||||
- Loop D: side turn / hair swing
|
||||
- Loop E: return settle
|
||||
|
||||
## Timing
|
||||
|
||||
- root와 pelvis가 리듬을 만든다.
|
||||
- chest는 pelvis보다 반 박자 늦거나 반대 방향으로 움직인다.
|
||||
- head는 chest보다 늦게 따라온다.
|
||||
- hair는 head보다 더 늦게 움직인다.
|
||||
- hand/finger는 짧고 빠른 accent로 처리한다.
|
||||
@@ -0,0 +1,292 @@
|
||||
# SampleDance Motion Reference Requirements
|
||||
|
||||
작성일: 2026-07-04
|
||||
대상 경로: `D:\Project\SampleDance`
|
||||
목적: LeeSori / Dansori 캐릭터 댄스 리그를 자연스럽게 만들기 위해 SampleDance 자료를 검토하고, 추가 제작해야 할 자료와 리그/모션 요구사항을 취합한다.
|
||||
|
||||
## 1. 현재 자료 목록
|
||||
|
||||
| 파일 | 형식 | 해상도 / 길이 | 프레임 | 1차 판단 |
|
||||
|---|---:|---:|---:|---|
|
||||
| `Group Dance 1.mp4` | video | 604x340 / 5.70s | 57 frames, 10fps | 군무/애니메이션 스타일 참고. 하체 스텝, 동시 팔동작, 실루엣 변화 참고용. LeeSori 주 리그 자료로는 우선순위 낮음. |
|
||||
| `Solo Dance 1.mp4` | video | 550x232 / 5.43s | 132 frames, 약 24fps | 애니 캐릭터의 간단한 상체/팔 제스처 참고. 해상도와 크롭이 작아 세부 리그 추출용으로는 약함. |
|
||||
| `Solo Dance 2.png` | image | 500x658 | static | 양팔 머리 위 포즈, 상체 S라인, 머리카락/가슴/허리 실루엣 참고. 모션보다는 키포즈/파츠 분리 참고용. |
|
||||
| `Solo Dance 3.mp4` | video | 576x1024 / 15.05s | 450 frames, 약 30fps | 최우선 목표 자료. 상체 회전, 팔 올림, 손바닥/손가락, 머리카락, 몸통 웨이브, 측면 회전이 풍부함. |
|
||||
|
||||
생성한 검토 이미지:
|
||||
- `D:\Project\SampleDance\_analysis\Group_Dance_1_contact.png`
|
||||
- `D:\Project\SampleDance\_analysis\Solo_Dance_1_contact.png`
|
||||
- `D:\Project\SampleDance\_analysis\Solo_Dance_3_contact_1fps.png`
|
||||
- `D:\Project\SampleDance\_analysis\Solo_Dance_3_contact_2fps.png`
|
||||
|
||||
## 2. 자료별 사용 방향
|
||||
|
||||
### Solo Dance 3.mp4 - 주 목표
|
||||
|
||||
가장 중요한 레퍼런스다. 현재 이소리 리그가 정지 포즈 전환처럼 보이는 문제를 해결하려면, 이 영상에서 다음 요소를 별도 자료로 추출해야 한다.
|
||||
|
||||
- 몸 중심축이 좌우로 이동하는 리듬
|
||||
- 골반과 흉곽이 서로 반대로 움직이는 counter motion
|
||||
- 상체가 앞으로 숙여졌다가 다시 펴지는 bounce
|
||||
- 팔이 아래에서 앞으로, 앞으로에서 머리 위로 올라가는 lift arc
|
||||
- 손바닥이 카메라를 향했다가 손등/측면으로 돌아가는 wrist roll
|
||||
- 손가락이 펴짐, 살짝 굽힘, 엄지/검지 제스처로 바뀌는 변화
|
||||
- 머리가 상체보다 늦게 따라오는 follow-through
|
||||
- 머리카락이 몸 회전보다 늦게 흔들리는 secondary motion
|
||||
- 측면 회전 시 어깨, 가슴, 허리, 골반의 실루엣 변화
|
||||
- 팔이 몸 앞을 지나갈 때 생기는 occlusion / 앞뒤 레이어 순서 변화
|
||||
|
||||
### Solo Dance 2.png - 키포즈 보조
|
||||
|
||||
정적 이미지이므로 자연스러운 모션 추출에는 한계가 있다. 대신 다음 자료 제작에 쓴다.
|
||||
|
||||
- 양팔 머리 위 포즈의 최종 키포즈
|
||||
- 겨드랑이/어깨/가슴 라인이 무너지지 않도록 하는 보정 파츠 참고
|
||||
- 머리카락이 팔과 겹칠 때 앞/뒤 레이어 분리 참고
|
||||
- 치마/허벅지/상체가 한 포즈에서 자연스럽게 이어지는 실루엣 참고
|
||||
|
||||
### Solo Dance 1.mp4 - 단순 루프 보조
|
||||
|
||||
해상도와 크롭이 작아서 세부 손/몸통 추출은 어렵다. 다만 캐릭터풍 간단 루프 제작 시 참고 가능하다.
|
||||
|
||||
- 작은 폭의 손 흔들기
|
||||
- 정면 캐릭터가 제자리에서 리듬을 타는 최소 모션
|
||||
- 눈에 거슬리지 않는 idle dance loop 타이밍 참고
|
||||
|
||||
### Group Dance 1.mp4 - 실루엣/하체 보조
|
||||
|
||||
주 캐릭터 리그에는 우선순위가 낮지만, 하체와 단체 동작 아이디어에는 쓸 수 있다.
|
||||
|
||||
- 좌우 스텝 타이밍
|
||||
- 무릎 들어올림 / 발 딛기 실루엣
|
||||
- 팔과 다리의 대칭/반대칭 리듬
|
||||
- 여러 캐릭터 제스처를 나중에 재사용할 때 카테고리 분류 참고
|
||||
|
||||
## 3. 추가로 필요한 자료 - 우선순위별
|
||||
|
||||
### P0. 반드시 필요한 자료
|
||||
|
||||
1. `Solo Dance 3` 키포즈 프레임 세트
|
||||
- 최소 16개, 권장 24~32개.
|
||||
- 0.0s, 0.5s, 1.0s 식 균등 샘플이 아니라, 동작 전환점 기준으로 선별해야 한다.
|
||||
- 필요 포즈: 준비, 손 앞으로, 손바닥 펼침, 손목 회전, 한팔 올림, 양팔 올림, 머리 위 손, 측면 회전, 등/후면 회전, 복귀, 바운스 다운, 바운스 업.
|
||||
|
||||
2. 신체 관절 추적 데이터
|
||||
- head, neck, chest, waist, pelvis
|
||||
- left/right shoulder, elbow, wrist, palm center
|
||||
- left/right hip, knee, ankle
|
||||
- 가능하면 finger landmarks: thumb/index/middle/ring/pinky root/tip
|
||||
- 프레임 단위 CSV 또는 JSON 필요.
|
||||
|
||||
3. 파츠 분리용 기준 이미지
|
||||
- 정면 기본 포즈
|
||||
- 좌회전 30~60도 포즈
|
||||
- 우회전 30~60도 포즈
|
||||
- 양팔 위 포즈
|
||||
- 손바닥 정면 포즈
|
||||
- 손등/측면 포즈
|
||||
- 팔이 몸 앞을 가리는 포즈
|
||||
|
||||
4. 실제 리그 파츠 세분화
|
||||
- 현재 whole-arm 임시 방식은 팔 중복을 없애는 데는 좋지만 팔꿈치 자연스러움이 부족하다.
|
||||
- 상완/전완/손/손가락/소매/자켓 외곽/그림자 보정 파츠를 분리해야 한다.
|
||||
|
||||
### P1. 자연스러움 향상 자료
|
||||
|
||||
1. 흉곽/가슴/상의 라인 보정 파츠
|
||||
- chest front
|
||||
- left breast cloth stretch
|
||||
- right breast cloth stretch
|
||||
- center zipper/string overlay
|
||||
- under-bust shadow
|
||||
- side torso shadow
|
||||
- hoodie inner flap left/right
|
||||
- jacket outer flap left/right
|
||||
|
||||
2. 허리/골반/하체 보정 파츠
|
||||
- waist front
|
||||
- abdomen highlight/shadow
|
||||
- pelvis front
|
||||
- pants waistband
|
||||
- drawstring front overlay
|
||||
- left/right hip side cloth
|
||||
- thigh left/right
|
||||
- knee left/right corrective fold
|
||||
- shin left/right
|
||||
- foot left/right
|
||||
|
||||
3. 팔/손 파츠
|
||||
- upperarm left/right front
|
||||
- upperarm left/right back or sleeve underside
|
||||
- elbow corrective patch left/right
|
||||
- forearm left/right
|
||||
- wrist cuff left/right
|
||||
- palm left/right
|
||||
- back-of-hand left/right
|
||||
- thumb, index, middle, ring, pinky grouped layers or at least 3-state hand sprites
|
||||
- fist, open palm, relaxed hand, pointing/finger-heart-like pose if needed
|
||||
|
||||
4. 머리/헤어 파츠
|
||||
- head base
|
||||
- face
|
||||
- front bangs clusters
|
||||
- left/right side hair
|
||||
- back hair mass
|
||||
- hair tip sways
|
||||
- headset left/right separated if head rotates
|
||||
- neck/choker overlay
|
||||
|
||||
5. 레이어 순서 전환 자료
|
||||
- arm behind torso
|
||||
- arm in front of torso
|
||||
- hand in front of face/hair
|
||||
- hair in front of shoulder
|
||||
- shoulder/jacket in front of hair for side turn
|
||||
|
||||
### P2. 고급 모션 자료
|
||||
|
||||
1. 모션 커브
|
||||
- rootY bounce
|
||||
- rootX sway
|
||||
- pelvis rotateZ
|
||||
- pelvis translateX/Y
|
||||
- waist bendX/Y/Z
|
||||
- chest rotateZ
|
||||
- chest translateX/Y
|
||||
- head rotateZ / delayed follow
|
||||
- shoulder left/right raise
|
||||
- elbow left/right bend
|
||||
- wrist left/right roll
|
||||
- palm open amount
|
||||
- finger curl amount
|
||||
|
||||
2. 보간 방식
|
||||
- linear 금지.
|
||||
- 팔 올림은 ease-out + overshoot 필요.
|
||||
- 몸통 bounce는 sine/cubic 기반 loop 필요.
|
||||
- 머리카락은 2~4프레임 지연 또는 phase offset 필요.
|
||||
- 손목/손가락은 팔보다 빠르고 작게 움직여야 한다.
|
||||
|
||||
3. 루프 설계
|
||||
- 15초 전체를 그대로 재현하기보다 2.5~4.0초 단위의 reusable loop로 분해한다.
|
||||
- loop A: idle groove
|
||||
- loop B: hand forward / palm push
|
||||
- loop C: arms up
|
||||
- loop D: side turn / hair swing
|
||||
- loop E: return / settle
|
||||
|
||||
## 4. LeeSori 리그 확장 제안
|
||||
|
||||
### 최소 안정 리그
|
||||
|
||||
현재 앱에 넣을 수 있는 안정 단계.
|
||||
|
||||
- torso group
|
||||
- pelvis group
|
||||
- head group
|
||||
- left whole arm
|
||||
- right whole arm
|
||||
- legs static or light sway
|
||||
- hair sway overlay
|
||||
|
||||
장점: 팔 중복이 적고 빠르게 안정화 가능.
|
||||
단점: 팔꿈치/손목/손가락 자연스러움 부족.
|
||||
|
||||
### 권장 프로덕션 리그
|
||||
|
||||
Solo Dance 3 수준을 목표로 하면 최소 다음 파츠가 필요하다.
|
||||
|
||||
- Root
|
||||
- Pelvis
|
||||
- Abdomen
|
||||
- Chest
|
||||
- Neck
|
||||
- Head
|
||||
- Hair front / side / back / tips
|
||||
- Jacket torso left/right/front/back
|
||||
- Hoodie collar left/right
|
||||
- Shirt torso + chest corrective overlays
|
||||
- Left upper arm / left forearm / left cuff / left hand / left fingers
|
||||
- Right upper arm / right forearm / right cuff / right hand / right fingers
|
||||
- Left thigh / knee / shin / foot
|
||||
- Right thigh / knee / shin / foot
|
||||
- Occlusion masks: torso-over-arm, arm-over-torso, hair-over-shoulder
|
||||
|
||||
### 고품질 댄스 리그
|
||||
|
||||
움직임이 실제 영상처럼 보이려면 다음이 필요하다.
|
||||
|
||||
- 각 팔 최소 4~6개 레이어: upper arm, elbow patch, forearm, cuff, palm/backhand, fingers
|
||||
- 각 손 최소 4개 상태: relaxed, open palm, fist/soft fist, pointing/finger gesture
|
||||
- 상체 최소 5개 corrective: neutral, left bend, right bend, forward bend, chest-up
|
||||
- 골반/복부 최소 4개 corrective: neutral, left hip, right hip, pelvis forward, pelvis back
|
||||
- 머리카락 최소 6개 sway layer: front L/R, side L/R, back mass, tips
|
||||
- 레이어 순서 전환용 z-index event table
|
||||
|
||||
## 5. SampleDance 기준 작업 산출물 목록
|
||||
|
||||
다른 세션과 취합하기 위해 다음 파일 단위로 생성하는 것이 좋다.
|
||||
|
||||
1. `motion_reference_manifest.json`
|
||||
- 각 영상/이미지의 역할, 우선순위, 사용할 구간, 생성된 분석 파일 목록.
|
||||
|
||||
2. `solo_dance_3_keyframes.json`
|
||||
- timecode, frame index, pose label, motion notes.
|
||||
|
||||
3. `solo_dance_3_landmarks.csv`
|
||||
- frame, time, joint, x, y, confidence.
|
||||
|
||||
4. `solo_dance_3_motion_curves.json`
|
||||
- root/chest/pelvis/head/arm/wrist/finger curve values.
|
||||
|
||||
5. `leesori_required_parts.md`
|
||||
- 필요한 파츠 목록, 기존 파츠 상태, 새로 만들어야 할 파츠, 우선순위.
|
||||
|
||||
6. `leesori_rig_hierarchy.json`
|
||||
- bone hierarchy, pivot, z-order, constraints.
|
||||
|
||||
7. `leesori_z_order_events.json`
|
||||
- 특정 포즈/시간에서 arm-over-body, hair-over-arm 같은 레이어 순서 변화.
|
||||
|
||||
8. `leesori_corrective_parts_plan.md`
|
||||
- 몸매/의상 라인 연결을 위한 보정 파츠 목록.
|
||||
|
||||
9. `solo_dance_3_loop_segments.md`
|
||||
- 2.5~4초 단위 재사용 루프 구간 정의.
|
||||
|
||||
10. `qa_motion_checklist.md`
|
||||
- 팔 중복, 절단, 어깨 탈구, 손목 뒤틀림, 의상 라인 끊김, 머리카락 부자연스러움 확인 항목.
|
||||
|
||||
## 6. 현재 자료만으로 가능한 것과 불가능한 것
|
||||
|
||||
가능:
|
||||
- Solo Dance 3의 대략적인 상체 리듬과 팔 올림 타이밍 추정
|
||||
- 손바닥 정면/손목 회전/양팔 위 키포즈 추출
|
||||
- 골반-흉곽 반대 움직임 패턴 설계
|
||||
- 머리카락 follow-through 방향 설계
|
||||
- reusable gesture category 설계
|
||||
|
||||
부족:
|
||||
- 손가락별 정확한 굽힘 추출은 영상 해상도/모션블러 때문에 제한적이다.
|
||||
- 의상 라인과 몸매 라인을 완벽히 이어 붙이려면 별도 파츠 원화가 필요하다.
|
||||
- 기존 LeeSori clean 파츠는 임시 whole-arm 구조라 팔꿈치 리깅에는 부족하다.
|
||||
- 진짜 자연스러운 팔 올림을 위해서는 상완/전완/손/손가락을 새로 분리해야 한다.
|
||||
|
||||
## 7. 권장 다음 순서
|
||||
|
||||
1. `Solo Dance 3`에서 24~32개 키포즈 프레임을 추출한다.
|
||||
2. 각 키포즈에 pose label을 붙인다.
|
||||
3. 관절 랜드마크를 추출해 CSV/JSON으로 정리한다.
|
||||
4. LeeSori 기준 신규 파츠 요구 목록을 확정한다.
|
||||
5. 임시 whole-arm 리그를 유지한 채, production arm rig를 별도 브랜치/폴더에서 만든다.
|
||||
6. 팔/손/상체 corrective 파츠를 생성한다.
|
||||
7. `Solo Dance 3`를 2.5~4초 루프로 분해해 gesture library에 등록한다.
|
||||
8. DansoriEQ runtime에는 `poseSequence`가 아니라 `partsRig + curve animation + z-order events`로 적용한다.
|
||||
|
||||
## 8. 검토 결론
|
||||
|
||||
- 주 자료는 `Solo Dance 3.mp4`로 확정하는 것이 맞다.
|
||||
- 현재 필요한 것은 단순 이미지 추가가 아니라, 키포즈/랜드마크/모션커브/세분화 파츠/보정 파츠/레이어 이벤트 전체 세트다.
|
||||
- 팔이 4개로 보였던 문제는 파츠가 충분히 잘게, 정확히 분리되지 않은 상태에서 회전 애니메이션을 적용했기 때문이다.
|
||||
- 자연스러운 결과를 위해서는 `whole-arm 임시 리그`와 `production segmented rig`를 분리해서 관리해야 한다.
|
||||
- 다른 세션에서 준비 중인 작업과 취합할 때는 위 산출물 파일명을 기준으로 병합하면 된다.
|
||||
@@ -0,0 +1,28 @@
|
||||
# Dance Motion
|
||||
|
||||
LeeSori 댄스 모션은 Solo Dance 3를 기준으로 제작한다. 목표는 정지 이미지의 연속 재생이 아니라 파츠 리그, 모션 커브, z-order 이벤트를 이용한 연속적인 몸 움직임이다.
|
||||
|
||||
## 핵심 모션 요소
|
||||
|
||||
- 몸 중심 좌우 이동
|
||||
- 골반과 흉곽의 반대 회전
|
||||
- 상체 bounce와 forward bend
|
||||
- 팔 lift arc
|
||||
- 팔꿈치 bend
|
||||
- 손목 roll
|
||||
- 손바닥 방향 전환
|
||||
- 손가락 curl/open 변화
|
||||
- 머리 follow-through
|
||||
- 머리카락 secondary motion
|
||||
- 하체 무릎/골반 리듬
|
||||
|
||||
## 산출물
|
||||
|
||||
- keyframes
|
||||
- landmarks
|
||||
- motion curves
|
||||
- rig hierarchy
|
||||
- required parts
|
||||
- corrective parts
|
||||
- z-order events
|
||||
- QA checklist
|
||||
@@ -0,0 +1,47 @@
|
||||
# LeeSori Character Identity
|
||||
|
||||
모든 이미지, 파츠, 리그, Live2D 산출물은 이 문서를 기준으로 한다. 컨셉별 의상과 분위기가 달라져도 LeeSori라는 동일 캐릭터로 인식되어야 한다.
|
||||
|
||||
## 기본 정체성
|
||||
|
||||
- 이름: LeeSori
|
||||
- 역할: DansoriEQ 메인 어시스턴트
|
||||
- 성격: 차분함, 전문성, 밝은 반응성, 음악 작업에 익숙함
|
||||
- 핵심 인상: EQ/음악을 이해하는 디지털 파트너
|
||||
- 앱 위치: DansoriEQ 우측 캐릭터 영역
|
||||
|
||||
## 고정 시각 요소
|
||||
|
||||
- 청록/민트 계열 포인트 컬러
|
||||
- 헤드셋 또는 음악 작업자 액세서리
|
||||
- 선명한 눈매와 밝은 표정
|
||||
- 자연스럽게 정리된 헤어 실루엣
|
||||
- 상체와 손 제스처가 잘 보이는 구도
|
||||
- 앱 화면에서 과하게 튀지 않는 명확한 실루엣
|
||||
|
||||
## 얼굴 기준
|
||||
|
||||
- 얼굴 비율은 컨셉별로 변하지 않는다.
|
||||
- 눈, 코, 입, 턱선, 귀 위치는 Live2D 리그 재사용이 가능해야 한다.
|
||||
- 표정은 자연스럽게 바뀌되 캐릭터 정체성은 유지한다.
|
||||
- 웃음, 집중, 생각, 놀람, 걱정, 자랑, 부끄러움, 말하기 입모양을 지원한다.
|
||||
|
||||
## 몸 기준
|
||||
|
||||
- 앱 기본 구도는 무릎 위부터 머리끝까지다.
|
||||
- Live2D용 기준 이미지는 전신 A-pose와 상체 close-up을 모두 제작한다.
|
||||
- 몸매와 의상 라인은 컨셉별 실루엣을 살리되, 파츠가 움직여도 끊기지 않게 보정 파츠를 포함한다.
|
||||
- 가슴/허리/골반/어깨 라인은 과도하게 왜곡하지 않고 자연스러운 애니 스타일로 유지한다.
|
||||
|
||||
## 손과 팔 기준
|
||||
|
||||
- LeeSori는 앱에서 손동작을 자주 사용하므로 손과 팔 파츠 품질이 중요하다.
|
||||
- 손바닥, 손등, 측면 손, 손가락 굽힘이 모두 필요하다.
|
||||
- 팔은 상완, 전완, 팔꿈치 보정, 손목, 손, 손가락으로 분리한다.
|
||||
- 팔이 몸 앞을 지나갈 때 필요한 z-order와 occlusion mask를 만든다.
|
||||
|
||||
## 댄스 기준
|
||||
|
||||
- Solo Dance 3의 자연스러운 상체 리듬을 목표로 한다.
|
||||
- 몸 중심 이동, 골반/흉곽 counter motion, 팔 lift arc, 손목 roll, 손가락 변화, 머리카락 follow-through가 필요하다.
|
||||
- 정지 포즈 컷 전환이 아니라 Live2D 파츠와 motion curve로 이어지는 자료를 만든다.
|
||||
@@ -0,0 +1,78 @@
|
||||
# Dance Reference Specification
|
||||
|
||||
LeeSori 댄스 이미지는 Solo Dance 3를 주 기준으로 한다. 목표는 실제 영상처럼 팔, 손, 손가락, 상체, 하체, 머리카락이 서로 다른 타이밍으로 자연스럽게 이어지는 Live2D 제작 자료를 만드는 것이다.
|
||||
|
||||
## 필수 모션 요소
|
||||
|
||||
- root sway: 몸 중심 좌우 이동
|
||||
- root bounce: 리듬에 맞는 상하 움직임
|
||||
- pelvis counter: 골반이 흉곽과 반대로 움직임
|
||||
- chest lead/follow: 가슴/상체가 리듬을 따라 늦게 반응
|
||||
- shoulder lift: 팔이 올라갈 때 어깨가 같이 올라감
|
||||
- elbow bend: 팔꿈치가 단계적으로 굽혀짐
|
||||
- wrist roll: 손목이 카메라 방향과 측면 방향을 오감
|
||||
- palm direction: 손바닥, 손등, 손날 방향 변화
|
||||
- finger curl: 손가락이 펴짐/굽힘/강조 제스처로 변함
|
||||
- head follow: 머리가 상체보다 약간 늦게 따라옴
|
||||
- hair follow-through: 머리카락이 머리보다 늦게 흔들림
|
||||
- torso bend: 상체가 앞/좌/우로 굽혀짐
|
||||
- lower body rhythm: 무릎과 골반이 미세하게 리듬을 만듦
|
||||
|
||||
## Solo Dance 3 키포즈 그룹
|
||||
|
||||
최소 24개, 권장 32개 키포즈를 제작한다.
|
||||
|
||||
1. ready smile
|
||||
2. relaxed downbeat
|
||||
3. hand forward prep
|
||||
4. palm push front
|
||||
5. wrist roll front
|
||||
6. wrist roll side
|
||||
7. shoulder bounce
|
||||
8. one arm lift half
|
||||
9. one arm lift high
|
||||
10. both arms lift prep
|
||||
11. both arms high
|
||||
12. hair touch
|
||||
13. chest bounce down
|
||||
14. chest bounce up
|
||||
15. side turn left prep
|
||||
16. side turn left
|
||||
17. back/three-quarter hair swing
|
||||
18. return from turn
|
||||
19. hand near face
|
||||
20. finger accent
|
||||
21. hip left
|
||||
22. hip right
|
||||
23. settle wave
|
||||
24. loop return
|
||||
|
||||
추가 권장:
|
||||
|
||||
25. open palm close-up
|
||||
26. wrist crossed high
|
||||
27. elbow tucked
|
||||
28. arm behind torso
|
||||
29. arm in front of torso
|
||||
30. laugh bounce
|
||||
31. hair follow-through extreme
|
||||
32. final idle groove
|
||||
|
||||
## 루프 분해
|
||||
|
||||
- Loop A: idle groove, 2.5~3.0s
|
||||
- Loop B: hand forward / palm push, 2.0~2.5s
|
||||
- Loop C: wrist roll, 1.5~2.0s
|
||||
- Loop D: arms up, 2.5~3.5s
|
||||
- Loop E: side turn / hair swing, 2.5~4.0s
|
||||
- Loop F: return settle, 2.0~3.0s
|
||||
|
||||
## 산출물
|
||||
|
||||
- key pose PNG set
|
||||
- key pose contact sheet
|
||||
- motion curve draft json
|
||||
- z-order event draft json
|
||||
- hand/finger close-up sheet
|
||||
- torso corrective sheet
|
||||
- hair sway sheet
|
||||
@@ -0,0 +1,67 @@
|
||||
# Output Specification
|
||||
|
||||
## 기본 출력 위치
|
||||
|
||||
모든 제작 산출물은 `LeeSori_Profile` 내부에 컨셉별로 정리한다.
|
||||
|
||||
권장 루트:
|
||||
|
||||
- `03_Assets/Library/BakedPoses/<Concept>`: 앱용 baked gesture 이미지
|
||||
- `03_Assets/Library/Sheets/<Concept>`: 전체 시트, 제스처 시트, 손 시트, 표정 시트
|
||||
- `03_Assets/Library/Parts/<Concept>`: 컨셉별 파츠 이미지
|
||||
- `03_Assets/Library/Live2D/<Concept>`: Live2D 레이어 PNG, PSD, manifest
|
||||
- `03_Assets/Library/Dance/<Concept>`: Solo Dance 3 키포즈와 댄스 루프 이미지
|
||||
- `04_Rig/Concepts/<Concept>`: rig, pivot, z-order, parameter 자료
|
||||
- `05_Animation/Concepts/<Concept>`: motion curve, loop segment 자료
|
||||
|
||||
## 파일명 규칙
|
||||
|
||||
기본 형식:
|
||||
|
||||
`leesori_<concept>_<category>_<name>_<variant>.<ext>`
|
||||
|
||||
예시:
|
||||
|
||||
- `leesori_track_pose_idle_upper.png`
|
||||
- `leesori_track_gesture_open_palm.png`
|
||||
- `leesori_track_dance_solo3_key_001_ready.png`
|
||||
- `leesori_track_part_upperarm_L.png`
|
||||
- `leesori_track_live2d_layer_manifest.json`
|
||||
- `leesori_track_rig_pivots.json`
|
||||
|
||||
## 이미지 기본 규격
|
||||
|
||||
| 용도 | 권장 크기 | 배경 |
|
||||
|---|---:|---|
|
||||
| full body reference | 1536x2304 또는 2048x3072 | 투명 또는 chroma key |
|
||||
| app upper body | 1024x1536 | 투명 |
|
||||
| gesture baked pose | 1024x1536 | 투명 |
|
||||
| Live2D layer PNG | 동일 캔버스 고정 | 투명 |
|
||||
| hand sheet | 2048x2048 | 투명 또는 흰색 검수판 |
|
||||
| expression sheet | 2048x2048 | 투명 또는 흰색 검수판 |
|
||||
| dance contact sheet | 가변 | 흰색/검수 배경 |
|
||||
|
||||
## 필수 파일 세트
|
||||
|
||||
각 컨셉은 최소 다음 파일 그룹을 갖는다.
|
||||
|
||||
- reference sheet
|
||||
- expression sheet
|
||||
- hand pose sheet
|
||||
- gesture image set
|
||||
- dance key pose set
|
||||
- Live2D layer PNG set
|
||||
- PSD assembly guide
|
||||
- rig json
|
||||
- pivot json
|
||||
- motion curve json
|
||||
- z-order event json
|
||||
- QA checklist result
|
||||
|
||||
## 품질 조건
|
||||
|
||||
- 동일 컨셉 내 모든 이미지의 얼굴과 체형이 일관되어야 한다.
|
||||
- 투명 PNG 가장자리에 chroma key 잔여색이 없어야 한다.
|
||||
- 파츠 PNG는 같은 캔버스 좌표계를 공유해야 한다.
|
||||
- 모든 파츠는 누락 없이 manifest에 등록한다.
|
||||
- baked pose와 Live2D part는 목적을 구분한다.
|
||||
@@ -0,0 +1,101 @@
|
||||
# Pose and Gesture Set
|
||||
|
||||
모든 컨셉은 같은 제스처 이름을 사용한다. 컨셉별 의상과 분위기는 다르지만 제스처 파일명과 의미는 통일한다.
|
||||
|
||||
## 기본 포즈
|
||||
|
||||
| ID | 설명 |
|
||||
|---|---|
|
||||
| idle_full | 전신 기본 대기 |
|
||||
| idle_upper | 앱 우측 패널용 상체 대기 |
|
||||
| neutral_apose | Live2D 파츠 제작용 A-pose |
|
||||
| neutral_tpose_soft | 팔 분리 확인용 부드러운 T/A 중간 포즈 |
|
||||
| app_wait | 사용자 명령 대기, 차분한 손 위치 |
|
||||
| headset_touch | 헤드셋에 손을 올린 대기/청취 포즈 |
|
||||
| armscross | 팔짱 대기 포즈 |
|
||||
|
||||
## 앱 제스처
|
||||
|
||||
| ID | 설명 |
|
||||
|---|---|
|
||||
| listen | 사용자 입력을 듣는 상태 |
|
||||
| thinking | 처리 중, 턱/손/시선 중심 |
|
||||
| present | 정보를 보여주는 손동작 |
|
||||
| point | 특정 위치를 가리키는 손동작 |
|
||||
| control | EQ/슬라이더를 조작하는 손동작 |
|
||||
| handwave | 가벼운 손 흔들기 |
|
||||
| wave | 큰 인사 손동작 |
|
||||
| peace | 브이 포즈 |
|
||||
| thumbsup | 긍정/완료 포즈 |
|
||||
| clap | 박수 포즈 |
|
||||
| cheer | 양손 응원 포즈 |
|
||||
| joy | 기쁜 반응 |
|
||||
| heart | 하트 제스처 |
|
||||
| shrug | 모름/중립 반응 |
|
||||
| piano | 피아노/키보드 연주 제스처 |
|
||||
| dj | DJ/믹서 조작 제스처 |
|
||||
| error_soft | 부드러운 오류/미안함 표현 |
|
||||
| muted | 조용한 상태, 손가락/입 주변 제스처 |
|
||||
|
||||
## 표정 세트
|
||||
|
||||
- neutral
|
||||
- smile
|
||||
- positive
|
||||
- proud
|
||||
- laugh
|
||||
- talk
|
||||
- talk_wide
|
||||
- blink
|
||||
- wink
|
||||
- thinking
|
||||
- confused
|
||||
- surprised
|
||||
- negative
|
||||
- sad
|
||||
- shy
|
||||
- sleepy
|
||||
- pout
|
||||
- love
|
||||
- cool
|
||||
- playful
|
||||
|
||||
## 손 세트
|
||||
|
||||
각 손은 좌우 모두 필요하다.
|
||||
|
||||
- relaxed
|
||||
- open_palm_front
|
||||
- open_palm_side
|
||||
- backhand
|
||||
- soft_fist
|
||||
- point_index
|
||||
- thumbsup
|
||||
- peace
|
||||
- heart_half
|
||||
- piano_curve
|
||||
- dj_touch
|
||||
- headset_touch
|
||||
- clap_contact
|
||||
- wrist_roll_A
|
||||
- wrist_roll_B
|
||||
|
||||
## Live2D용 파츠 확인 포즈
|
||||
|
||||
- arm_down_relaxed
|
||||
- arm_forward
|
||||
- arm_side
|
||||
- arm_up_half
|
||||
- arm_up_full
|
||||
- elbow_bent_front
|
||||
- elbow_bent_side
|
||||
- hand_near_face
|
||||
- hand_over_chest
|
||||
- hand_behind_body
|
||||
- torso_left_bend
|
||||
- torso_right_bend
|
||||
- torso_forward_bend
|
||||
- pelvis_left
|
||||
- pelvis_right
|
||||
- side_turn_left
|
||||
- side_turn_right
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,93 @@
|
||||
# Dance Image Specification
|
||||
|
||||
Solo Dance 3를 모든 컨셉 의상으로 재구성한다. 결과물은 정지 이미지 감상이 아니라 Live2D 리그와 모션 제작을 위한 단계별 자료여야 한다.
|
||||
|
||||
## 필수 키포즈
|
||||
|
||||
각 컨셉마다 24~32개 키포즈 PNG를 제작한다.
|
||||
|
||||
파일명:
|
||||
|
||||
`leesori_<concept>_dance_solo3_key_###_<label>.png`
|
||||
|
||||
필수 label:
|
||||
|
||||
- ready
|
||||
- downbeat
|
||||
- hand_forward_prep
|
||||
- palm_push
|
||||
- wrist_roll_front
|
||||
- wrist_roll_side
|
||||
- shoulder_bounce
|
||||
- arm_lift_half_L
|
||||
- arm_lift_half_R
|
||||
- arm_lift_high_L
|
||||
- arm_lift_high_R
|
||||
- both_arms_up_prep
|
||||
- both_arms_up
|
||||
- hair_touch
|
||||
- chest_down
|
||||
- chest_up
|
||||
- side_turn_left
|
||||
- side_turn_right
|
||||
- back_turn_hair_swing
|
||||
- hand_near_face
|
||||
- finger_accent
|
||||
- hip_left
|
||||
- hip_right
|
||||
- return_settle
|
||||
|
||||
## 루프별 산출물
|
||||
|
||||
- Loop A: idle groove
|
||||
- Loop B: hand forward / palm push
|
||||
- Loop C: wrist roll
|
||||
- Loop D: arms up
|
||||
- Loop E: side turn / hair swing
|
||||
- Loop F: return settle
|
||||
|
||||
각 루프마다 다음 자료를 만든다.
|
||||
|
||||
- keyframe PNG sequence
|
||||
- contact sheet
|
||||
- motion notes md
|
||||
- motion curve draft json
|
||||
- z-order event draft json
|
||||
|
||||
## 신체 모션 요구
|
||||
|
||||
### 상체
|
||||
|
||||
- chest가 pelvis보다 늦게 따라오거나 반대로 움직인다.
|
||||
- forward bend와 side bend가 모두 있어야 한다.
|
||||
- 가슴/상의 라인이 파츠 이동 중 끊기지 않도록 보정 파츠가 필요하다.
|
||||
|
||||
### 팔
|
||||
|
||||
- 팔은 shoulder lift, elbow bend, wrist roll을 분리해서 표현한다.
|
||||
- 팔이 머리 위로 올라갈 때 어깨, 소매, 겨드랑이 라인이 자연스럽게 이어져야 한다.
|
||||
- 팔이 몸 앞을 지나갈 때 arm-over-torso z-order 이벤트가 필요하다.
|
||||
|
||||
### 손/손가락
|
||||
|
||||
- open palm, side palm, backhand, soft fist, point, finger accent가 필요하다.
|
||||
- 손가락은 최소 그룹 파츠라도 분리되어야 한다.
|
||||
- 손목 회전은 손바닥 방향이 바뀌는 것으로 확인 가능해야 한다.
|
||||
|
||||
### 하체
|
||||
|
||||
- 골반 좌우 이동과 무릎의 미세 굽힘이 있어야 한다.
|
||||
- 앱 crop에서 하체가 많이 보이지 않아도 골반 리듬은 상체 움직임에 영향을 준다.
|
||||
|
||||
### 헤어/액세서리
|
||||
|
||||
- 머리카락은 head보다 늦게 움직인다.
|
||||
- 헤드셋은 머리 회전에 맞지만 컵과 밴드가 어색하게 분리되지 않아야 한다.
|
||||
|
||||
## 실패 조건
|
||||
|
||||
- 포즈만 바뀌고 중간 동작을 유추할 자료가 없음
|
||||
- 팔과 몸통이 함께 굳어 보임
|
||||
- 손목 방향 변화가 없음
|
||||
- 몸통과 골반이 같은 방향으로만 움직임
|
||||
- 머리카락 follow-through 자료가 없음
|
||||
@@ -0,0 +1,54 @@
|
||||
# Gesture Image Specification
|
||||
|
||||
모든 컨셉은 같은 제스처 세트를 제작한다. 각 제스처는 앱용 baked image와 Live2D 제작용 참조 포즈를 모두 고려한다.
|
||||
|
||||
## 공통 제작 조건
|
||||
|
||||
- 모든 이미지는 동일 캐릭터 비율과 얼굴을 유지한다.
|
||||
- 배경은 투명 PNG를 기본으로 한다.
|
||||
- 앱용 이미지는 1024x1536 세로 캔버스를 기본으로 한다.
|
||||
- 전신 포즈와 앱 상체 포즈가 필요한 제스처는 둘 다 제작한다.
|
||||
- 손가락이 중요한 제스처는 손 close-up crop도 함께 제작한다.
|
||||
|
||||
## 제스처별 요구사항
|
||||
|
||||
| Gesture | 핵심 포인트 | 손/팔 조건 | 앱 용도 |
|
||||
|---|---|---|---|
|
||||
| idle_full | 안정적인 전신 대기 | 양팔 자연스럽게 아래 또는 몸 앞 | 기본 전신 참고 |
|
||||
| idle_upper | 무릎 위~머리끝 구도 | 손이 화면 안에 들어옴 | 앱 기본 대기 |
|
||||
| listen | 귀/헤드셋 주의 | 한 손이 헤드셋 또는 귀 주변 | 입력 대기 |
|
||||
| thinking | 턱/입 주변 손 | 팔꿈치와 손목 자연스러움 | 처리 중 |
|
||||
| present | 한 손 또는 양손 안내 | open palm front/side 명확 | 안내 |
|
||||
| point | 검지 방향 명확 | index finger 별도 표현 | 선택/강조 |
|
||||
| control | 슬라이더/노브 조작 | 손가락 곡선, 손목 회전 | EQ 제어 |
|
||||
| handwave | 작은 인사 | 손바닥 보임 | 친근한 반응 |
|
||||
| wave | 큰 인사 | 팔 위로, 손목 자연스러움 | 환영/완료 |
|
||||
| peace | 브이 손가락 | 검지/중지 분리 | 긍정 |
|
||||
| thumbsup | 엄지 명확 | fist + thumb 분리 | 성공 |
|
||||
| clap | 양손 접촉 | 손바닥 방향 일치 | 축하 |
|
||||
| cheer | 양팔 위 | 어깨/팔꿈치 연결 자연스러움 | 기쁨 |
|
||||
| joy | 밝은 표정 | 몸통 bounce 가능 | 성공/즐거움 |
|
||||
| heart | 양손 하트 | 좌우 손 half-heart | 애정/감사 |
|
||||
| armscross | 팔짱 | 팔 앞뒤 z-order 명확 | 대기/자신감 |
|
||||
| shrug | 어깨 들림 | 양손 open side | 모름/중립 |
|
||||
| piano | 손가락 곡선 | 양손 finger curve | 음악/키보드 |
|
||||
| dj | 믹서 조작 | 한 손 turn, 한 손 touch | 음악/DJ |
|
||||
| error_soft | 조심스러운 사과 | 손이 가슴/얼굴 근처 | 오류 |
|
||||
| muted | 조용히 | 입 주변 검지 또는 낮은 손 | 음소거 |
|
||||
|
||||
## 추가 close-up 산출물
|
||||
|
||||
각 컨셉마다 손 close-up을 만든다.
|
||||
|
||||
- `leesori_<concept>_hand_relaxed_sheet.png`
|
||||
- `leesori_<concept>_hand_open_palm_sheet.png`
|
||||
- `leesori_<concept>_hand_finger_gesture_sheet.png`
|
||||
- `leesori_<concept>_hand_wrist_roll_sheet.png`
|
||||
|
||||
## 실패 조건
|
||||
|
||||
- 손가락이 뭉개져 제스처 의미를 알 수 없음
|
||||
- 팔이 몸과 분리되어 떠 보임
|
||||
- 팔이 두 쌍으로 보임
|
||||
- 소매와 팔 피부가 어긋남
|
||||
- 앱 crop에서 손이 화면 밖으로 잘림
|
||||
@@ -0,0 +1,113 @@
|
||||
# Live2D Parts Specification
|
||||
|
||||
모든 컨셉은 Live2D 제작 가능한 파츠 세트를 가져야 한다. 파츠는 같은 캔버스 좌표계를 공유하며 투명 PNG로 저장한다.
|
||||
|
||||
## Body Parts
|
||||
|
||||
- root guide
|
||||
- pelvis base
|
||||
- abdomen skin
|
||||
- abdomen shadow
|
||||
- chest skin
|
||||
- breast/cloth stretch L/R
|
||||
- under-bust shadow
|
||||
- neck front
|
||||
- neck back fill
|
||||
- head base
|
||||
- face shadow
|
||||
- cheek L/R
|
||||
|
||||
## Arm Parts
|
||||
|
||||
좌우 모두 필요하다.
|
||||
|
||||
- shoulder cover
|
||||
- upperarm skin/clothes
|
||||
- elbow corrective front
|
||||
- elbow corrective side
|
||||
- forearm skin/clothes
|
||||
- wrist/cuff
|
||||
- palm
|
||||
- backhand
|
||||
- thumb group
|
||||
- index group
|
||||
- middle/ring/pinky group
|
||||
- fingernail/highlight if visible
|
||||
|
||||
## Hair Parts
|
||||
|
||||
- back hair base
|
||||
- back hair shadow
|
||||
- back hair strand L/R
|
||||
- back hair tip L/R
|
||||
- front hair center
|
||||
- front hair L/R
|
||||
- side hair L/R
|
||||
- hair highlight front
|
||||
- hair loose strand optional
|
||||
|
||||
## Face Parts
|
||||
|
||||
- eye white L/R
|
||||
- iris L/R
|
||||
- pupil L/R
|
||||
- highlight L/R
|
||||
- upper lash L/R
|
||||
- lower lash L/R
|
||||
- lid L/R
|
||||
- brow L/R
|
||||
- nose
|
||||
- mouth upper line
|
||||
- mouth lower line
|
||||
- mouth inside
|
||||
- teeth upper/lower
|
||||
- tongue
|
||||
- lip highlight
|
||||
|
||||
## Clothes Parts
|
||||
|
||||
컨셉별로 이름은 다를 수 있지만 기능은 유지한다.
|
||||
|
||||
- top base
|
||||
- top shadow
|
||||
- collar/neckline L/R
|
||||
- sleeve upper L/R
|
||||
- sleeve forearm L/R
|
||||
- lower garment base
|
||||
- waistband/belt/string
|
||||
- jacket/body outer L/R if exists
|
||||
- accessory overlays
|
||||
- movement corrective patches
|
||||
|
||||
## Z-order Masks
|
||||
|
||||
- arm over torso L/R
|
||||
- torso over arm L/R
|
||||
- hand over face L/R
|
||||
- hair over shoulder L/R
|
||||
- shoulder over hair L/R
|
||||
- skirt/dress over leg if applicable
|
||||
- leg over dress slit if applicable
|
||||
|
||||
## Manifest Required Fields
|
||||
|
||||
각 파츠는 manifest에 다음 정보를 가진다.
|
||||
|
||||
- id
|
||||
- file
|
||||
- group
|
||||
- side
|
||||
- zDefault
|
||||
- pivotHint
|
||||
- deformType
|
||||
- parentBone
|
||||
- visibleInPoses
|
||||
- notes
|
||||
|
||||
## 실패 조건
|
||||
|
||||
- 파츠가 전신 이미지를 통째로 포함함
|
||||
- 같은 팔 영역이 여러 파츠에 중복되어 팔이 두 개로 보임
|
||||
- 손 파츠가 비어 있음
|
||||
- 캔버스 크기가 서로 다름
|
||||
- 의상 보정 파츠가 없어 움직일 때 라인이 끊김
|
||||
@@ -0,0 +1,94 @@
|
||||
# Rig and Motion Specification
|
||||
|
||||
## Rig Hierarchy
|
||||
|
||||
- Root
|
||||
- Pelvis
|
||||
- Abdomen
|
||||
- Chest
|
||||
- Neck
|
||||
- Head
|
||||
- Face
|
||||
- HairFront
|
||||
- HairSideL/R
|
||||
- HairBack
|
||||
- Headset
|
||||
- ShoulderL
|
||||
- UpperArmL
|
||||
- ForeArmL
|
||||
- HandL
|
||||
- FingersL
|
||||
- ShoulderR
|
||||
- UpperArmR
|
||||
- ForeArmR
|
||||
- HandR
|
||||
- FingersR
|
||||
- LegL
|
||||
- LegR
|
||||
|
||||
## Required Parameters
|
||||
|
||||
- ParamRootX
|
||||
- ParamRootY
|
||||
- ParamPelvisAngleZ
|
||||
- ParamPelvisX
|
||||
- ParamPelvisY
|
||||
- ParamBodyBendX
|
||||
- ParamBodyBendY
|
||||
- ParamChestAngleZ
|
||||
- ParamChestX
|
||||
- ParamChestY
|
||||
- ParamHeadAngleX
|
||||
- ParamHeadAngleY
|
||||
- ParamHeadAngleZ
|
||||
- ParamShoulderRaiseL/R
|
||||
- ParamArmLiftL/R
|
||||
- ParamElbowBendL/R
|
||||
- ParamWristRollL/R
|
||||
- ParamPalmOpenL/R
|
||||
- ParamFingerCurlL/R
|
||||
- ParamHairSwayL/R
|
||||
- ParamBreath
|
||||
- ParamMouthOpen
|
||||
- ParamEyeBlinkL/R
|
||||
|
||||
## Motion Curves
|
||||
|
||||
모든 모션은 cubic/ease 기반이다. linear 보간만으로 제작하지 않는다.
|
||||
|
||||
- root bounce: sine/cubic loop
|
||||
- pelvis: root보다 약간 빠르게 리듬 생성
|
||||
- chest: pelvis와 반대 방향 또는 지연
|
||||
- head: chest보다 2~4프레임 지연
|
||||
- hair: head보다 3~6프레임 지연
|
||||
- arm lift: ease-out + overshoot
|
||||
- wrist roll: 짧은 accent curve
|
||||
- finger curl: 손목보다 작은 진폭과 빠른 타이밍
|
||||
|
||||
## Z-order Events
|
||||
|
||||
다음 이벤트를 JSON으로 정의한다.
|
||||
|
||||
- armFrontL
|
||||
- armFrontR
|
||||
- armBackL
|
||||
- armBackR
|
||||
- handFrontFaceL
|
||||
- handFrontFaceR
|
||||
- hairFrontShoulderL
|
||||
- hairFrontShoulderR
|
||||
- torsoFrontArmL
|
||||
- torsoFrontArmR
|
||||
- dressOverLeg
|
||||
- legOverDress
|
||||
|
||||
## Runtime Outputs
|
||||
|
||||
각 컨셉마다 다음을 만든다.
|
||||
|
||||
- `leesori_<concept>_rig_hierarchy.json`
|
||||
- `leesori_<concept>_pivot_map.json`
|
||||
- `leesori_<concept>_live2d_parameters.json`
|
||||
- `leesori_<concept>_motion_curves.json`
|
||||
- `leesori_<concept>_z_order_events.json`
|
||||
- `leesori_<concept>_runtime_rig.json`
|
||||
@@ -0,0 +1,59 @@
|
||||
# QA Checklist
|
||||
|
||||
각 컨셉의 이미지/파츠/리그/Live2D 자료는 아래 항목을 통과해야 한다.
|
||||
|
||||
## Identity
|
||||
|
||||
- LeeSori 얼굴로 일관되게 보인다.
|
||||
- 헤드셋 또는 음악 작업자 아이덴티티가 유지된다.
|
||||
- 청록 포인트가 컨셉 안에서 자연스럽게 포함된다.
|
||||
|
||||
## Image Quality
|
||||
|
||||
- 투명 PNG 가장자리에 배경색 찌꺼기가 없다.
|
||||
- 손가락, 눈, 입, 액세서리가 뭉개지지 않는다.
|
||||
- 앱 crop에서 얼굴과 손 제스처가 보인다.
|
||||
- 전신 reference에서 발끝, 머리끝이 잘리지 않는다.
|
||||
|
||||
## Gesture
|
||||
|
||||
- 모든 공통 제스처가 있다.
|
||||
- 제스처 의미가 즉시 구분된다.
|
||||
- 손 close-up이 제스처와 일치한다.
|
||||
- 팔이 두 쌍으로 보이지 않는다.
|
||||
|
||||
## Dance
|
||||
|
||||
- Solo Dance 3 키포즈 24개 이상이 있다.
|
||||
- 팔 lift arc가 단계적으로 보인다.
|
||||
- 손목 roll과 손바닥 방향 변화가 있다.
|
||||
- 상체/골반 counter motion을 만들 자료가 있다.
|
||||
- 머리카락 follow-through 자료가 있다.
|
||||
|
||||
## Live2D Parts
|
||||
|
||||
- 모든 파츠가 같은 캔버스다.
|
||||
- 파츠가 전신을 통째로 포함하지 않는다.
|
||||
- 상완/전완/손/손가락이 분리되어 있다.
|
||||
- 의상 보정 파츠가 있다.
|
||||
- z-order mask가 있다.
|
||||
|
||||
## Rig
|
||||
|
||||
- pivot이 관절 위치에 있다.
|
||||
- 팔꿈치와 손목이 자연스럽게 움직일 수 있다.
|
||||
- chest/pelvis/head/hair가 서로 다른 타이밍으로 움직일 수 있다.
|
||||
- z-order event가 정의되어 있다.
|
||||
|
||||
## Fail Conditions
|
||||
|
||||
하나라도 해당하면 재작업한다.
|
||||
|
||||
- 팔 중복
|
||||
- 빈 손 파츠
|
||||
- 손가락 의미 불명확
|
||||
- 의상 라인 절단
|
||||
- 얼굴 정체성 변화
|
||||
- 앱 crop 실패
|
||||
- 정지 이미지 전환처럼 보이는 댄스 자료
|
||||
- Live2D 파츠로 사용할 수 없는 통짜 이미지
|
||||
@@ -0,0 +1,55 @@
|
||||
# LeeSori Image Production Package
|
||||
|
||||
이 폴더는 `../이미지작업_의뢰서.md`가 호출하는 LeeSori 이미지 제작 종속 실행 패키지다. AI 작업자는 먼저 `../이미지작업_의뢰서.md`를 읽고, 이어서 이 `README.md`와 `_RUN_ORDER.md`, 연결된 하위 md를 순서대로 처리한다.
|
||||
|
||||
## 목표
|
||||
|
||||
LeeSori를 모든 컨셉에서 동일한 캐릭터 정체성을 유지하면서 자연스러운 앱 제스처와 Live2D 리그까지 제작 가능한 수준으로 완성한다.
|
||||
|
||||
- 컨셉별 기본 시트 제작
|
||||
- 컨셉별 BakedPoses 전 제스처 재제작
|
||||
- 컨셉별 댄스 키포즈 및 루프 시트 제작
|
||||
- 컨셉별 세분화 파츠 제작
|
||||
- 컨셉별 Live2D 레이어 PNG / PSD 조립 자료 제작
|
||||
- 컨셉별 리그/피벗/z-order/모션커브 자료 제작
|
||||
- DansoriEQ 앱 적용용 상체/무릎 위 프레이밍 이미지 제작
|
||||
|
||||
## 적용 컨셉
|
||||
|
||||
| 컨셉 | 폴더 | 핵심 이미지 |
|
||||
|---|---|---|
|
||||
| Campus | `01_Concepts/Campus.md` | 밝고 젊은 캠퍼스/캐주얼 스타일 |
|
||||
| CeoPantsuit | `01_Concepts/CeoPantsuit.md` | 전문적이고 차분한 CEO 팬츠수트 스타일 |
|
||||
| DressLong | `01_Concepts/DressLong.md` | 긴 드레스, 우아한 실루엣 |
|
||||
| DressShort | `01_Concepts/DressShort.md` | 짧은 드레스, 밝은 무대형 실루엣 |
|
||||
| Jeans | `01_Concepts/Jeans.md` | 데님 캐주얼, 자연스러운 일상형 스타일 |
|
||||
| Track | `01_Concepts/Track.md` | 트랙 재킷/스포티, DansoriEQ 기본 활동형 스타일 |
|
||||
| Tshirt | `01_Concepts/Tshirt.md` | 티셔츠 캐주얼, 편안한 기본형 스타일 |
|
||||
|
||||
## 우선순위
|
||||
|
||||
1. `Track`: DansoriEQ 기본 앱 캐릭터와 가장 가까운 기준 컨셉
|
||||
2. `Campus`, `Tshirt`, `Jeans`: 앱 제스처 재사용 우선
|
||||
3. `CeoPantsuit`: 전문/업무형 반응 우선
|
||||
4. `DressShort`, `DressLong`: 무대/댄스/감정 표현 우선
|
||||
|
||||
## 필수 실행 문서
|
||||
|
||||
- `../이미지작업_의뢰서.md`: 단일 최상위 의뢰서
|
||||
- `_RUN_ORDER.md`: 전체 작업 순서
|
||||
- `00_Common/CHARACTER_IDENTITY.md`: 모든 컨셉 공통 캐릭터 정체성
|
||||
- `00_Common/OUTPUT_SPEC.md`: 산출물 경로와 파일명 규칙
|
||||
- `00_Common/POSE_AND_GESTURE_SET.md`: 모든 컨셉 공통 제스처 목록
|
||||
- `03_Live2D/LIVE2D_PARTS_SPEC.md`: Live2D 파츠 제작 기준
|
||||
- `03_Live2D/RIG_AND_MOTION_SPEC.md`: 리그/모션 기준
|
||||
- `04_QA/QA_CHECKLIST.md`: 최종 검수 기준
|
||||
|
||||
## 제작 원칙
|
||||
|
||||
- 기존 BakedPose 이미지를 그대로 사용하지 않는다. 모든 컨셉별 이미지는 최종 기준으로 새로 제작한다.
|
||||
- 컨셉이 달라도 LeeSori의 얼굴, 헤드셋, 청록 계열 포인트, 음악 작업자 이미지는 유지한다.
|
||||
- 팔/손/손가락/상체/의상 라인은 Live2D용 파츠 분리가 가능하도록 명확하게 만든다.
|
||||
- 정지 포즈 이미지만 만들지 않고, 파츠/리그/모션 제작까지 이어질 자료를 함께 만든다.
|
||||
- 모든 산출물은 컨셉별로 동일한 파일명 체계를 사용한다.
|
||||
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
# LeeSori Image Production Run Order
|
||||
|
||||
AI 작업자는 `../이미지작업_의뢰서.md`를 단일 최상위 의뢰서로 사용하고, 이 순서를 그대로 따른다. 하위 문서를 누락 없이 처리한다.
|
||||
|
||||
## 0. 사전 확인
|
||||
|
||||
1. `../이미지작업_의뢰서.md`를 읽는다.
|
||||
2. `README.md`를 읽는다.
|
||||
3. `00_Common/CHARACTER_IDENTITY.md`를 읽고 LeeSori 정체성을 고정한다.
|
||||
4. `00_Common/OUTPUT_SPEC.md`를 읽고 파일명과 폴더 규칙을 확정한다.
|
||||
5. `00_Common/POSE_AND_GESTURE_SET.md`를 읽고 모든 컨셉에서 제작할 포즈 목록을 확정한다.
|
||||
6. `00_Common/DANCE_REFERENCE_SPEC.md`를 읽고 Solo Dance 3 기준 댄스 요구사항을 확인한다.
|
||||
|
||||
## 1. 컨셉별 기본 이미지 제작
|
||||
|
||||
아래 순서대로 각 컨셉 md를 읽고 진행한다.
|
||||
|
||||
1. `01_Concepts/Track.md`
|
||||
2. `01_Concepts/Campus.md`
|
||||
3. `01_Concepts/Tshirt.md`
|
||||
4. `01_Concepts/Jeans.md`
|
||||
5. `01_Concepts/CeoPantsuit.md`
|
||||
6. `01_Concepts/DressShort.md`
|
||||
7. `01_Concepts/DressLong.md`
|
||||
|
||||
각 컨셉에서 먼저 제작할 기본 산출물:
|
||||
|
||||
- full body neutral sheet
|
||||
- upper body app framing sheet
|
||||
- expression sheet
|
||||
- hand sheet
|
||||
- gesture sheet
|
||||
- dance key pose sheet
|
||||
- Live2D layer reference sheet
|
||||
|
||||
## 2. 공통 제스처 제작
|
||||
|
||||
각 컨셉마다 `02_Gestures/GESTURE_IMAGE_SPEC.md`를 적용한다.
|
||||
|
||||
필수 제스처:
|
||||
|
||||
- idle_full
|
||||
- idle_upper
|
||||
- listen
|
||||
- thinking
|
||||
- present
|
||||
- point
|
||||
- control
|
||||
- handwave
|
||||
- wave
|
||||
- peace
|
||||
- thumbsup
|
||||
- clap
|
||||
- cheer
|
||||
- joy
|
||||
- heart
|
||||
- armscross
|
||||
- shrug
|
||||
- piano
|
||||
- dj
|
||||
- error_soft
|
||||
- muted
|
||||
|
||||
## 3. 댄스 자료 제작
|
||||
|
||||
각 컨셉마다 `02_Gestures/DANCE_IMAGE_SPEC.md`를 적용한다.
|
||||
|
||||
필수 댄스 산출물:
|
||||
|
||||
- Solo Dance 3 key poses 24~32장
|
||||
- loop A idle groove
|
||||
- loop B hand forward / palm push
|
||||
- loop C wrist roll
|
||||
- loop D arms up
|
||||
- loop E side turn / hair swing
|
||||
- loop F return settle
|
||||
- frame contact sheet
|
||||
- motion note sheet
|
||||
|
||||
## 4. Live2D 파츠 제작
|
||||
|
||||
`03_Live2D/LIVE2D_PARTS_SPEC.md`를 적용한다.
|
||||
|
||||
각 컨셉마다 다음을 제작한다.
|
||||
|
||||
- Live2D LayerPNGs
|
||||
- part manifest
|
||||
- PSD assembly guide
|
||||
- PSD file if supported
|
||||
- part contact sheet
|
||||
- corrective part sheet
|
||||
- z-order event sheet
|
||||
|
||||
## 5. 리그와 모션 제작
|
||||
|
||||
`03_Live2D/RIG_AND_MOTION_SPEC.md`를 적용한다.
|
||||
|
||||
각 컨셉마다 다음을 제작한다.
|
||||
|
||||
- rig hierarchy json
|
||||
- pivot map
|
||||
- Live2D parameter list
|
||||
- motion curve json
|
||||
- z-order event json
|
||||
- app runtime rig json
|
||||
|
||||
## 6. QA
|
||||
|
||||
`04_QA/QA_CHECKLIST.md`를 적용한다.
|
||||
|
||||
불합격이면 해당 컨셉의 이미지/파츠/리그 문서로 되돌아가 수정한다.
|
||||
|
||||
## 7. 완료 조건
|
||||
|
||||
한 컨셉은 다음이 모두 있을 때 완료다.
|
||||
|
||||
- 컨셉 md 요구사항 충족
|
||||
- 모든 공통 제스처 이미지 존재
|
||||
- 댄스 키포즈/루프 자료 존재
|
||||
- Live2D 파츠와 manifest 존재
|
||||
- 리그/피벗/모션/z-order 자료 존재
|
||||
- QA 체크리스트 통과
|
||||
|
||||
|
||||
+25
-22
@@ -1,29 +1,32 @@
|
||||
# LeeSori_Profile — 이소리 인터랙티브 캐릭터 시스템 (단일 진실원)
|
||||
# LeeSori Profile
|
||||
|
||||
> **최종 목적**: 이소리를 **앱에 탑재**해 **상황별로 반응하는** 살아있는 마스코트로 만든다.
|
||||
> (예: 오류 → 팔짱+인상+"안돼요", 성공 → 하트+"잘됐어요", 대기 → 배경 가벼운 춤 …)
|
||||
> **원칙**: 이미지는 **ChatGPT 자동생성**, 리그·모션·반응 시퀀스·색상은 **코드/데이터**. 방식은 **하이브리드**(리그 + 베이크드 포즈 + 표정 프레임 스왑).
|
||||
LeeSori는 Dansori 프로젝트의 메인 EQ 어시스턴트 캐릭터다. 이 폴더는 캐릭터 설정, 이미지 자산, Live2D 제작 자료, 리그 사양, 모션 사양, 앱 통합 기준을 모두 포함하는 최종 기준 패키지다.
|
||||
|
||||
이 폴더는 목적·방향·구현레벨·방법·자산·로드맵을 한곳에 모은 **source of truth**다. (구 `LeeSori_Rigging`는 이 폴더로 통합·폐기됨.)
|
||||
## 목표
|
||||
|
||||
- DansoriEQ 우측 캐릭터 영역에서 자연스럽게 대기, 반응, 안내, 성공/오류 피드백을 수행한다.
|
||||
- Live2D 기반 파츠 리그와 재사용 가능한 제스처 라이브러리를 갖춘다.
|
||||
- Solo Dance 3를 기준으로 상체, 팔, 손, 손가락, 머리카락, 골반 리듬이 살아 있는 댄스 모션을 제작한다.
|
||||
- 모든 의상과 포즈는 재사용 가능한 자산 단위로 분류한다.
|
||||
|
||||
## 주요 폴더
|
||||
|
||||
## 폴더 안내
|
||||
| 폴더 | 내용 |
|
||||
|---|---|
|
||||
| `01_Overview/` | 목적·방향(`Purpose_and_Direction.md`), 확정 결정 로그(`Decisions.md`) |
|
||||
| `02_Architecture/` | 레이어 아키텍처·하이브리드 규칙(`Architecture.md`), 한계·완화·mesh-warp 승급(`Limits_and_Mitigations.md`) |
|
||||
| `03_Assets/` | 자산 전체 맵(`Assets_Overview.md`), 리그 파츠 생성 스펙(`Parts/`), 표정·베이크드 포즈(`Expressions_and_Poses.md`) |
|
||||
| `04_Rig/` | 스켈레톤 정의 `rig.json` + `Rig.md` |
|
||||
| `05_Animation/` | 리그 클립(배경춤) `dance_idle.json` + `Animation.md` |
|
||||
| `06_Reactions/` | 반응 시퀀서·트리거 설계(`Reactions.md`), 매핑 `reactions.json`, 샘플 클립 `clips/` |
|
||||
| `07_Viewer/` | 프로토타입 뷰어 `index.html`(더블클릭 재생) + `Viewer.md` |
|
||||
| `08_Roadmap/` | 단계별 구현 계획(`Roadmap.md`), 앱 통합(`App_Integration.md`) |
|
||||
| `01_Overview` | 캐릭터 방향, 역할, 결정 사항 |
|
||||
| `02_Architecture` | 제작 구조, 파츠/리그/앱 통합 구조 |
|
||||
| `03_Assets` | 이미지, 파츠, Live2D 레이어, 의상/포즈 라이브러리 |
|
||||
| `04_Rig` | 리그 계층, 피벗, 파라미터, 런타임 구조 |
|
||||
| `05_Animation` | 기본 모션, 댄스 모션, 모션 커브 |
|
||||
| `06_Reactions` | 상태별 리액션, 제스처 클립 |
|
||||
| `07_Viewer` | 로컬 확인용 뷰어 |
|
||||
| `08_Roadmap` | 앱 적용 및 제작 순서 |
|
||||
| `09_DanceMotion` | 댄스 리그 확장, 추가 파츠, Live2D 모션 사양 |
|
||||
|
||||
## 한 눈에 (현재 확정 상태)
|
||||
- **구현 레벨**: 코드 네이티브 경량 리그(강체 컷아웃) + 하이브리드. Live2D/Spine 미사용(자동화 위해). mesh-warp는 **옵션/후속**.
|
||||
- **분절**: 해부학 16파츠(head·neck·chest·pelvis + 팔3×2 + 다리3×2).
|
||||
- **얼굴**: 표정 프레임 스왑 20종 + 말하기 talk 프레임(유사 립싱크).
|
||||
- **완료**: 방향 확정 · 리그 스키마 · 배경춤 프로토타입(뷰어에서 플레이스홀더로 재생 확인 가능).
|
||||
- **다음**: 시트 투명알파 재확정 → 리그 파츠 생성(ChatGPT) → 배경춤 실아트 검증 → 반응 시퀀서 → 앱 통합. (상세 `08_Roadmap/Roadmap.md`)
|
||||
## 제작 기준
|
||||
|
||||
## 지금 바로
|
||||
`07_Viewer/index.html` 더블클릭 → 이소리 스켈레톤이 가볍게 춤추는 것을 확인.
|
||||
- 최종 기준 폴더는 `LeeSori_Profile`이다.
|
||||
- Live2D 제작 자산과 일반 프로필 자산은 같은 캐릭터 패키지 안에서 관리한다.
|
||||
- 정지 이미지 연속 재생이 아니라, 파츠 리그와 모션 커브 기반의 연속 동작을 목표로 한다.
|
||||
- 팔, 손, 손가락, 의상 라인, 헤어, 상체와 골반은 별도 파츠와 보정 파츠로 분리한다.
|
||||
- 앱 통합용 경량 런타임과 Live2D 제작용 원본 자료를 함께 보관한다.
|
||||
|
||||
@@ -1,73 +1,63 @@
|
||||
# 이소리(Lee Sori) 리그 파츠 이미지 작업 의뢰서 — 마스터-슬라이스 · 풀캔버스
|
||||
# LeeSori 이미지작업 의뢰서
|
||||
|
||||
> **이 문서 하나만 작업자(ChatGPT)에게 주면 됩니다.** 상세 파츠 정의: `03_Assets/Parts/Parts.md`.
|
||||
> 목적: 이소리를 코드 리그로 춤·제스처 시키기 위한 **관절 파츠 PNG**.
|
||||
이 문서는 LeeSori 이미지 제작의 단일 진입점이다. AI 작업자는 이 문서를 먼저 읽고, `10_ImageProduction/README.md`와 `10_ImageProduction/_RUN_ORDER.md`를 따라 모든 하위 제작 문서를 순서대로 처리한다.
|
||||
|
||||
## 만들 것 (총 17장)
|
||||
- **마스터 1장**: `sori_part_master_apose.png`
|
||||
- **관절 파츠 16장**: `sori_part_head` · `neck` · `chest` · `pelvis` · `upperarm_r/l` · `forearm_r/l` · `hand_r/l` · `thigh_r/l` · `shin_r/l` · `foot_r/l`
|
||||
## 작업 목적
|
||||
|
||||
## 첨부
|
||||
- 정체성 시트: **`03_Assets/Reference/sori_sheet.png`** (동일 인물 유지).
|
||||
LeeSori의 모든 컨셉별 이미지, 제스처, 댄스 포즈, Live2D 파츠, 리그 자료, 앱 런타임 자료를 최종 기준으로 제작한다. 기존 BakedPose 이미지를 단순 재사용하지 않고, 각 컨셉에 맞는 최종 제작용 자료를 새 기준으로 정리한다.
|
||||
|
||||
## 방법: 마스터-슬라이스 (풀캔버스 출력)
|
||||
1. 아래 프롬프트로 **마스터 A-포즈 1장**을 만든다.
|
||||
2. 마스터를 16조각(관절 단위)으로 **슬라이스**한다.
|
||||
3. **★핵심 — 각 파츠를 크롭하지 말 것.** 각 조각을 **마스터와 동일한 520×900 캔버스에, 마스터에서의 원위치 그대로** 배치해 저장한다(그 파츠 외 영역은 완전 투명). → 16장을 그냥 겹치면 마스터가 그대로 복원된다(= **같은 좌표계 → 관절 자동 정합**).
|
||||
## 실행 순서
|
||||
|
||||
## 공통 규칙
|
||||
- **진짜 투명 알파 PNG — 32-bit RGBA, 배경 alpha = 0.** 흰/회색/체커보드/매트 채움·불투명 24-bit 금지.
|
||||
- **캔버스 = 520×900 고정** (마스터·모든 파츠 동일 크기·동일 정렬). 파츠는 그 캔버스 위 **제자리**, 나머지 투명.
|
||||
- **관절 오버랩**: 부모와 붙는 쪽(근위단)은 **관절 뒤로 조금 더 남겨** 부모 밑에 들어가게(회전 시 틈 가림). 반대쪽(원위단)은 라운드 캡.
|
||||
- **가장자리**: 깨끗한 안티에일리어스, **흰 후광·프린지 금지**(머리카락 포함).
|
||||
- **의상 = 트랙슈트**(화이트 크롭후디 + 민트/블랙 트랙재킷 + 블랙 트랙팬츠 + 블랙/민트 스니커즈). 헤드폰·초커는 머리 파츠에 포함.
|
||||
- **좌우**: `_r` = 캐릭터 오른쪽(**화면 왼쪽**), `_l` = 캐릭터 왼쪽(**화면 오른쪽**).
|
||||
- **저장**: `03_Assets/Parts/Images/` , 파일명 정확히. **한 조각 = 1파일.**
|
||||
1. `10_ImageProduction/README.md`를 읽는다.
|
||||
2. `10_ImageProduction/_RUN_ORDER.md`를 읽는다.
|
||||
3. `10_ImageProduction/00_Common`의 공통 기준을 모두 읽는다.
|
||||
4. `10_ImageProduction/01_Concepts`의 7개 컨셉 문서를 순서대로 처리한다.
|
||||
5. `10_ImageProduction/02_Gestures`의 제스처/댄스 제작 기준을 모든 컨셉에 적용한다.
|
||||
6. `10_ImageProduction/03_Live2D`의 파츠/리그/모션 기준을 모든 컨셉에 적용한다.
|
||||
7. `10_ImageProduction/04_QA/QA_CHECKLIST.md`로 결과를 검수한다.
|
||||
|
||||
---
|
||||
## 제작 대상 컨셉
|
||||
|
||||
## 마스터 프롬프트
|
||||
## sori_part_master_apose.png
|
||||
```
|
||||
Draw the SAME woman 이소리 (from the attached reference sheet) as ONE clean full-body FRONT NEUTRAL A-POSE on a
|
||||
520x900 PORTRAIT canvas, designed to be sliced into rig parts. Track outfit (white cropped hoodie + mint/black
|
||||
track jacket + black track pants with mint side stripe + black/mint sneakers), white over-ear headphones, black
|
||||
choker with teal teardrop pendant. GLAMOROUS adult hourglass (tasteful), about 7 heads tall. POSE FOR SLICING:
|
||||
standing straight, front view, BOTH ARMS held clearly AWAY from the torso (a wide A-pose) so the arms do NOT
|
||||
overlap the body; elbows straight; palms facing forward, fingers slightly spread; legs straight and APART so
|
||||
they do NOT touch; EVERY joint (shoulders, elbows, wrists, hips, knees, ankles, neck) clearly visible and
|
||||
unobstructed. Flat even lighting, thin clean anime semi-real linework matching the sheet. FULLY TRANSPARENT
|
||||
background, 32-bit RGBA, background alpha = 0 — no white, no shadow, no rim light. Clean anti-aliased edges, no
|
||||
white halo/fringe around hair or body. No text. Avoid: white/opaque background, arms touching the torso, legs
|
||||
touching each other, bent/crossed limbs, dynamic pose, extra fingers, deformed hands, chibi.
|
||||
```
|
||||
- Track
|
||||
- Campus
|
||||
- Tshirt
|
||||
- Jeans
|
||||
- CeoPantsuit
|
||||
- DressShort
|
||||
- DressLong
|
||||
|
||||
---
|
||||
## 필수 산출물
|
||||
|
||||
## 슬라이스 컷 & 16 파일 (각각 520×900 풀캔버스, 제자리)
|
||||
- **컷 라인(관절)**: 목(위·아래) · 어깨 · 팔꿈치 · 손목 · 허리 · 골반(양 고관절) · 무릎 · 발목.
|
||||
- **각 파츠 범위 · 근위단(오버랩)**:
|
||||
각 컨셉마다 다음 자료를 제작한다.
|
||||
|
||||
| 파일 | 범위 | 근위단(관절 뒤로 오버랩) |
|
||||
|---|---|---|
|
||||
| `sori_part_head.png` | 두개골·얼굴·귀·민트단발·헤드폰·초커 (+목 살짝) | 목(가슴 밑) |
|
||||
| `sori_part_neck.png` | 턱~쇄골 목기둥 | 양끝 |
|
||||
| `sori_part_chest.png` | 어깨~허리 (후디+트랙재킷) | 허리·양 어깨 |
|
||||
| `sori_part_pelvis.png` | 허리~허벅지 상단 (트랙팬츠) | 허리(가슴 밑) |
|
||||
| `sori_part_upperarm_r.png` / `_l` | 어깨~팔꿈치 (재킷 소매) | 어깨(가슴 밑) |
|
||||
| `sori_part_forearm_r.png` / `_l` | 팔꿈치~손목 (재킷 소매) | 팔꿈치 |
|
||||
| `sori_part_hand_r.png` / `_l` | 손목~손끝 (펼친 손) | 손목 |
|
||||
| `sori_part_thigh_r.png` / `_l` | 고관절~무릎 (트랙팬츠) | 고관절(골반 밑) |
|
||||
| `sori_part_shin_r.png` / `_l` | 무릎~발목 (트랙팬츠) | 무릎 |
|
||||
| `sori_part_foot_r.png` / `_l` | 발목~발끝 (스니커즈) | 발목 |
|
||||
- 기본 전신 기준 이미지
|
||||
- 앱 우측 패널용 상체/무릎 위 이미지
|
||||
- 표정 시트
|
||||
- 손/손가락 시트
|
||||
- 공통 제스처 이미지 세트
|
||||
- Solo Dance 3 기반 댄스 키포즈 세트
|
||||
- 댄스 루프용 contact sheet
|
||||
- Live2D 레이어 PNG
|
||||
- PSD 조립 자료
|
||||
- 파츠 manifest
|
||||
- rig hierarchy
|
||||
- pivot map
|
||||
- motion curve
|
||||
- z-order event
|
||||
- QA 결과
|
||||
|
||||
## 검수 (제출 전)
|
||||
1. 마스터 + 16파츠 = **17장**, 파일명 정확.
|
||||
2. 전부 **520×900, 32-bit RGBA, 배경 alpha=0.**
|
||||
3. **16장을 (0,0) 기준으로 겹치면 마스터가 복원**된다(= 제자리 배치·자동 정합 확인).
|
||||
4. 머리/관절 가장자리 흰 후광 없음, 근위단 오버랩 있음.
|
||||
## 중복 방지 원칙
|
||||
|
||||
---
|
||||
- 이 문서가 최상위 의뢰서다.
|
||||
- `10_ImageProduction/README.md`는 제작 패키지 설명서다.
|
||||
- `10_ImageProduction/_RUN_ORDER.md`는 실행 순서다.
|
||||
- 컨셉별 세부 지시사항은 `10_ImageProduction/01_Concepts` 아래에만 작성한다.
|
||||
- 제스처와 Live2D 공통 기준은 `10_ImageProduction/02_Gestures`, `10_ImageProduction/03_Live2D`에만 작성한다.
|
||||
- 같은 내용을 다른 위치에 반복 작성하지 않는다.
|
||||
|
||||
## (선택 · 후속) 대체 손 attachment
|
||||
- 핑거하트·주먹·가리킴 등 **마스터에 없는 손 모양**은 이 작업 범위 밖. 필요할 때 별도 요청(개별 생성).
|
||||
## 품질 기준
|
||||
|
||||
- LeeSori의 얼굴, 헤드셋, 청록 포인트, 음악 작업자 이미지는 모든 컨셉에서 유지한다.
|
||||
- 팔, 손, 손가락, 상체, 골반, 머리카락이 자연스럽게 움직일 수 있도록 충분히 세분화된 파츠를 제작한다.
|
||||
- 앱용 baked pose와 Live2D 제작용 파츠를 구분한다.
|
||||
- 정지 이미지 연속 재생처럼 보이지 않도록 모션 커브와 리그 자료까지 함께 제작한다.
|
||||
|
||||
Reference in New Issue
Block a user