Files
Dansori_EQ/docs/CHARACTER_UI_INTEGRATION.md
T
2026-07-04 10:34:46 +09:00

156 lines
11 KiB
Markdown

# CHARACTER UI INTEGRATION — 마스코트 UI 결합 계획
> 목표: `docs/Image/`의 두 마스코트(민트 여캐 "소리" · 시안 남캐 "단이", `BRAND_CHARACTERS.md`)를
> **실제 앱(WPF, 다크/Mica)에 역동적으로 결합**한다. 이 문서는 ①현재 자산 평가 ②UI 배치 매핑
> ③파일 포맷 결정(GIF/동영상/Lottie/PNG) ④이미지 생성 AI 의뢰 컨셉 목록을 정리한다.
---
## 1. 현재 자산 평가
`docs/Image/`에는 **완성도 높은 "전체 화면 장면"**이 이미 있다:
- 듀오 브랜드 아트, 온보딩 STEP 1~3, 로딩("소리 튜닝 중…"), 성공("튜닝 완료"), 바이패스("EQ 바이패스").
- 각 장면의 **wpf_gifs**(2~2.5MB) / **video_like_gifs**(2.8~3.4MB, 더 부드러움) 애니메이션 버전 존재.
### 좋은 점
- 캐릭터 디자인·컬러·분위기가 브랜드와 완벽히 일치. **스플래시/스토어/마케팅 비주얼로 즉시 사용 가능.**
### 인앱 사용의 문제 (그대로는 못 얹음)
1. **텍스트가 그림에 구워짐**(한글 UI 문구·STEP 라벨·버튼). → 현지화 불가, DPI 스케일 시 흐림,
`TYPOGRAPHY.md`(최소 12·최대 24) 규칙과 폰트 불일치. **텍스트는 WPF가 실시간 렌더해야 함.**
2. **불투명 전체 배경** → 다크/Mica 위에 겹쳐 쓸 수 없음. 레이아웃(1400×860 가로형)과 안 맞음(세로형 풀블리드).
3. **장면 통짜** → 캐릭터만 분리 불가. 실제 앱은 **캐릭터(투명 배경) + 라이브 UI**로 합성해야 함.
4. **GIF 한계**: 다크 그라데이션에서 색밴딩, 알파(투명) 불가, 용량 큼.
> 결론: 현재 장면들은 **스플래시/마케팅 전용**으로 보관. 인앱용은 **"캐릭터만 투명 배경"**으로 재의뢰한다.
---
## 2. UI 배치 매핑 (실제 앱 화면 기준)
| # | 앱 위치 | 등장 | 연출 | 에셋 형태 |
|---|---------|------|------|-----------|
| A | **스플래시 / About** | 듀오(백투백) | 등장 페이드+음파 루프 | (기존 장면 재사용 OK) 또는 투명 듀오 PNG |
| B | **온보딩 / 도움말 드로어(3단계)** | 소리+단이 반신 | 스텝별 슬라이드 인 | **투명 PNG 컷아웃** + 라이브 WPF 텍스트 |
| C | **AI 프롬프트 처리중**("AI가 듣는 중") | 소리(손끝 음파) | 손끝 음파 **루프 애니** | **Lottie** (소형, 코너) |
| D | **AI 응답 말풍선 아바타** | 소리 얼굴 | 정지/살짝 눈깜빡 | **원형 투명 PNG** (표정 2~3종) |
| E | **로딩**(AutoEQ 다운/EQ 적용) | 소리 or 단이 소형 | 헤드폰 이퀄 펄스 루프 | **Lottie** + 라이브 진행바 |
| F | **성공 토스트**(EQ 적용/튜닝 완료) | 단이 엄지척 | 팝인+체크 | **투명 PNG**(+WPF 스토리보드 팝) |
| G | **바이패스(EQ OFF) 상태** | 둘 헤드폰 벗음 | 상태 전환 | **투명 PNG**(활성/바이패스 2컷) |
| H | **빈 상태**(프로파일/프리셋 없음) | 소리 안내 제스처 | 정지 | **투명 PNG** |
| I | **헤더/사이드바 워터마크** | 로고 모노그램 | 정지 | **SVG/PNG** |
> 핵심 원칙: **캐릭터는 이미지, 텍스트·패널·그래프·버튼·진행바는 전부 WPF 라이브 요소.**
> 그림 속 홀로그램 EQ/말풍선은 "분위기"일 뿐, 실제 조작 UI는 우리 컨트롤이 담당.
---
## 3. 파일 포맷 결정 (GIF vs 동영상 vs Lottie vs PNG)
### 결론 요약
| 용도 | 권장 포맷 | 이유 |
|------|-----------|------|
| 정지 캐릭터(아바타·빈상태·온보딩 컷·성공/바이패스) | **투명 PNG-24 (알파)** | 선명, 가벼움, DPI별 @1x/@1.5x/@2x |
| 루프 마이크로 애니(AI 처리중·로딩·음파 펄스) | **Lottie (.json 벡터)** | 초경량, 벡터라 무한 선명, 색 틴트·루프 자연스러움 |
| 화려한 래스터 루프가 꼭 필요할 때 | **애니메이션 WebP / APNG** | 알파 지원(투명), GIF보다 고화질·소용량 |
| 불투명 전체화면 스플래시/인트로(1회) | **MP4/WebM (불투명)** | 리치하지만 알파 오버레이엔 부적합 |
| ❌ 지양 | **GIF** | 256색 밴딩(다크 그라데이션에 치명), 알파 없음, 용량 큼 |
### "GIF로? 동영상으로?" 직접 답
- **둘 다 최적이 아님.** 실제로 앱에 **역동적으로** 얹는 최선은:
**정지 투명 PNG + WPF 자체 애니메이션(Storyboard: 페이드/살짝 떠오름/스케일/글로우 펄스)**
90%를 커버한다. 추가 에셋·라이브러리 없이 "살아있는" 느낌을 낸다.
- 더 리치한 **손끝 음파/헤드폰 이퀄 펄스** 같은 반복 모션은 **Lottie**로 별도 제작(작고 선명·테마 틴트 가능).
- **동영상(MP4)** 은 **불투명 스플래시** 한 곳에만. WPF `MediaElement`는 **알파 채널 영상 지원이 빈약**해
캐릭터 오버레이용으로는 비추천.
- **GIF는 쓰지 말 것**(특히 이 다크·네온 그라데이션에서 밴딩이 눈에 띔). 굳이 래스터 루프면 **WebP/APNG.**
### WPF 재생 방법 / 필요 패키지 (메모)
- **투명 PNG**: 기본 `Image` 컨트롤. 추가 패키지 불필요.
- **WPF 스토리보드**: 기본 제공(`DoubleAnimation`, `RenderTransform`). 추가 불필요.
- **Lottie**: WPF는 기본 미지원 → 라이브러리 필요. 후보: **`SkiaSharp.Skottie`**(Skia 기반, 유지보수 양호) /
`LottieSharp`. dev 세션에서 하나 채택해 PoC.
- **애니메이션 GIF/WebP**: 기본 미지원 → `WpfAnimatedGif`(GIF) / WebP는 별도 디코더. (지양하므로 후순위)
- **성능**: 캐릭터는 큰 이미지이므로 **표시 크기에 맞춘 다운스케일본**을 쓰고, 안 보일 땐 언로드.
---
## 4. 이미지 생성 AI 의뢰 컨셉 목록
> ⚠️ **이미지 생성 AI는 "정지 이미지"만 만든다.** 애니메이션(Lottie/영상)은 별도 모션 작업.
> 따라서 AI에는 **① 일관성 고정용 캐릭터 시트 → ② 포즈/표정별 투명 배경 컷** 순으로 의뢰한다.
> 프롬프트 베이스는 `BRAND_CHARACTERS.md` §7. 공통 조건: **transparent background, character only, no text,
> no UI panels, consistent same character, high-res ≥2048px.**
### STEP 1 — 일관성 고정 (먼저)
- **캐릭터 시트(각 1장)**: 정면·3/4·측면 턴어라운드 + 표정 6종(기본/미소/웃음/집중/윙크/놀람).
→ 이걸 레퍼런스로 걸어 이후 컷의 **동일 인물** 유지.
### STEP 2 — 배치용 컷 (투명 배경)
**여캐 "소리"**
- `sori_idle` 반신 기본(살짝 미소) — 온보딩/빈상태
- `sori_present` 손바닥 펴고 손끝 음파 — AI 제안/처리중(C의 정지 베이스)
- `sori_happy` 두 손 하이(기쁨) — 성공
- `sori_face_round` 원형 얼굴 크롭 표정 3종 — AI 아바타(D)
- `sori_headphones_off` 헤드폰 벗는 컷 — 바이패스(G)
**남캐 "단이"**
- `dan_idle` 반신 기본(자신감 미소) — 온보딩
- `dan_tune` 홀로그램 슬라이더 조작(패널은 뺀 손동작만) — 튜닝/로딩(E 베이스)
- `dan_thumbsup` 엄지척 — 성공(F)
- `dan_headphones_off` 헤드폰 벗는 컷 — 바이패스(G)
**듀오**
- `duo_backtoback` 백투백 대표 포즈(투명) — 스플래시/About(A)
### STEP 3 — (선택) 모션
- C/E의 손끝 음파·헤드폰 펄스는 위 정지 컷을 바탕으로 **Lottie 재제작**(모션 디자이너 또는 image-to-video 툴).
- 저비용 대안: 정지 PNG + **WPF 스토리보드**(글로우 펄스/부유)만으로 시작.
### 규격 (전달용)
- 배경 투명(알파) PNG, 캐릭터만, **텍스트/로고/패널 없음**.
- 캔버스 여백 최소, 캐릭터 꽉 차게. 세로 반신 ~2048px, 원형 아바타 ~1024px.
- 3종 DPI 다운스케일본(@1x/@1.5x/@2x) 또는 원본 1장(앱에서 다운스케일).
- 컬러: 소리=민트 `#38E0C4`, 단이=시안 `#4CC2FF`, 라인 선명.
---
## 5. 제작 우선순위 / 로드맵
1. **캐릭터 시트로 일관성 고정**(STEP 1) — 가장 먼저. (배치마다 얼굴 다른 문제 해소)
2. **투명 PNG 핵심 5컷**: `sori_face_round`(아바타) · `sori_present` · `dan_thumbsup` · `duo_backtoback` · 바이패스 2컷.
3. **WPF 결합 PoC**: `Image` + 스토리보드로 온보딩/아바타/성공 토스트에 정적+모션 배선.
4. **Lottie 도입 검토**(SkiaSharp.Skottie) → AI 처리중·로딩 루프.
5. 스플래시는 기존 듀오 장면(불투명) 재사용 가능.
## 6. 열린 결정
- [x] **캐릭터 이름 확정**: 여 **이소리(Lee Sori)** · 남 **이단(Lee Dan)**. (이미지 직접 노출은 선택)
- [x] `Girl Character.jpg` = **이소리 "동양풍 얼굴" 참고용**(복장/헤어컬러 참고 아님).
- [x] **애니메이션 범위 확정: "최대한 Lottie"**.
→ 캐릭터 = **파츠 컷아웃 리깅으로 Lottie화**(AI가 만든 투명 파츠 사용), 모션 FX(음파·EQ바·파티클·로딩) =
**순수 벡터 Lottie**. PNG+스토리보드는 **폴백/저부하 화면**에만 제한적으로.
→ 이미지 생성 AI 요청문: **`docs/IMAGE_GEN_REQUESTS.md`**.
→ WPF Lottie 재생 라이브러리 PoC 필요(후보: **SkiaSharp.Skottie** / LottieSharp).
## 6-B. Lottie로 "직접(벡터)" 만들 모션 FX (이미지 생성 AI 아님)
> 아래는 이미지 생성 AI가 아니라 **AE/Bodymovin·Figma·LottieLab로 벡터 제작**(또는 무료 Lottie 에셋 커스터마이즈).
> 캐릭터 컷아웃 뒤/주변에 합성해 "캐릭터가 소리를 다루는" 장면을 완성한다.
- `fx_soundwave_loop` : 손끝에서 퍼지는 **음파 링/파형**(민트→시안) 무한 루프.
- `fx_eq_bars_loop` : 5~7개 **EQ 막대**가 위아래로 튀는 루프(로딩·처리중).
- `fx_particles_loop` : 반짝이는 별/음표 파티클 상승 루프.
- `fx_glow_ring_pulse` : 캐릭터 뒤 **글로우 링** 맥동(성공/강조).
- `fx_loading_progress` : 이퀄라이저형 진행 인디케이터.
- `fx_check_success` : 체크마크 그려지는 성공 애니.
## 7. Lottie vs PNG + WPF 스토리보드 (의사결정용 비교)
| 항목 | 투명 PNG + WPF 스토리보드 | Lottie (.json 벡터) |
|------|--------------------------|---------------------|
| 정체 | 정지 그림 + WPF가 위치/투명도/크기/회전만 애니 | 디자이너가 만든 **그림 자체가 움직이는** 벡터 애니 |
| 표현력 | 페이드·부유·확대·글로우·흔들림 등 **단순 트랜스폼** | 팔 움직임·음파 퍼짐·표정 변화 등 **본격 모션** |
| 제작 | 개발자가 XAML만(추가 그림 불필요) | **모션 디자이너/툴 필요**(AE→Bodymovin 등), 별도 제작 |
| 앱 무게 | 매우 가벼움(기본 기능) | 라이브러리 필요(SkiaSharp.Skottie 등) + json |
| 선명도 | 이미지라 DPI별 다운스케일 필요 | 벡터라 **무한 선명**, 색 틴트 쉬움 |
| 적합 | 아바타·온보딩 컷·성공 토스트·빈상태 | AI "듣는 중" 음파·로딩 이퀄 펄스 등 **주목 루프** |
| 비용/속도 | 낮음/빠름(바로 가능) | 높음/느림(에셋 제작 선행) |
> 권장: **PNG+스토리보드로 먼저 전체 배선** → 눈에 띄어야 할 1~2곳만 **Lottie로 승격**.