리노컷 캐스트 확장 결정문과 기준 상태판 동기화
This commit is contained in:
parent
ded312acdc
commit
6e3123091a
3 changed files with 63 additions and 2 deletions
|
|
@ -461,6 +461,67 @@ type Performance = {
|
|||
- **로드 실패**: 레이어 하나라도 실패하면 `data-load-state="error"`와 콜백으로 알린다. 세션(2B-2)은 이때 기존 SVG 리그로 되돌아간다. 이 환경에서 SVG `<image>`의 load·error 이벤트가 발동하지 않아(원인 미확인, 2단계-B-1b 관찰) 같은 href를 `HTMLImageElement`로 미리 불러 로드 상태를 집계한다.
|
||||
- 새 공연(`playPerformance`)은 이전 공연의 **미발동 cue를 모두 취소**한다. 이미 재생 중인 클립은 자연 종료한다.
|
||||
|
||||
### 8.4.1 캐스트 확장 (P2~P7, 2026-10-01 설계)
|
||||
|
||||
- **원화 선택**: 소유자 지시("모든 사람 병렬로, 지금 아트웍 스타일을 따라서, 다양한 표정과")에 따라 오케스트레이터 추천안을 쓴다. 소유자가 바꾸면 해당 페르소나만 다시 돈다.
|
||||
|
||||
| 페르소나 | 후보 파일 |
|
||||
|---|---|
|
||||
| P2 | front-b |
|
||||
| P3 | front-v2b |
|
||||
| P4 | front-v2b |
|
||||
| P5 | front-v2a |
|
||||
| P6 | front-v2b |
|
||||
| P7 | front-v2b |
|
||||
|
||||
- **편집본을 원본 구도에서 만든다**: 얼굴 없는 기본형·몸 원본은 정규화 전 원화를 참조로 codex 편집한다. 페르소나마다 2장씩 만든다. 프롬프트는 `pN-linocut/prompts/`에 있고, P1 문구에서 사람·소지품만 바꿨다.
|
||||
- 패딩된 가장자리를 모델이 "고치는" 일을 막기 위해서다.
|
||||
- 편집본은 `register_edit.py`(ECC 정렬)로 원화 좌표에 맞춘다.
|
||||
- 머리카락·옷·얼굴 윤곽의 에지 챔퍼 거리로 수용한다.
|
||||
- faceless: 중앙값 ≤1.0px, p90 ≤2.5px, 윤곽 띠 p90 ≤2.0px
|
||||
- body: 중앙값 ≤1.5px, p90 ≤3.0px
|
||||
- **정규화**: `normalize_base.py`가 원화·얼굴 없는 기본형·몸 원본을 한 변환으로 P1 캔버스 1005×1566에 옮긴다.
|
||||
- 머리 배율은 P1과 같게 한다. 눈-턱·눈 사이 거리 비의 평균이다.
|
||||
- 폭은 반드시 덮는다(배율은 s = max(s_head, 1005/원화 폭)). 두 눈 중점은 P1에 맞춘다.
|
||||
- 위아래 빈 곳은 반사 패딩한다.
|
||||
- 렌더러 기하 상수(px)가 P1 머리 크기 기준이라, 머리 크기를 맞추는 것이 조건이다. 측정한 s_head는 0.91~0.97이다.
|
||||
- 아래쪽 판화 끝선이 캔버스 바닥보다 위에서 끊길 수 있다. 이는 portrait 크롭에서만 보이고, 세션의 bust·face 크롭에는 들어오지 않는다.
|
||||
- **눈썹 굵기를 원화에서 잰다**: 리그 계약 `RigBrow.halfWidth?: [안쪽, 꼭짓점, 바깥]`을 추가했다.
|
||||
- 렌더러 반두께가 P1 설계값 [4.5, 3.2, 1.0]으로 고정이면, 굵은 눈썹(남성·성인) 원화가 가는 벡터 눈썹으로 바뀌어 "원화를 따른다"는 원칙이 깨진다.
|
||||
- brow_centerline이 잉크 띠 반두께를 재고 export_rig이 쓴다.
|
||||
- P1은 `browHalfWidthFromArt: false`로 기존 리그를 유지한다(소유자 검수본).
|
||||
- **세션 반영 단위**: 파이프라인이 만든 리그는 Lab(`import.meta.glob`)에서 바로 보인다. 세션 레지스트리(`linocutRigFor`)에는 오케스트레이터가 표정 시트를 판정한 페르소나만 넣는다.
|
||||
- **표정 검수**: 페르소나마다 4가지를 본다.
|
||||
- 16표정 bust·face 시트
|
||||
- 비짐 9종
|
||||
- neutral 렌더와 원화 대조
|
||||
- P1과 같은 판정 기준: 중립 렌더 = 원화, 얼굴이 원화 인물 그대로, 표정 구분
|
||||
- 모티프 스프라이트(시계·촛불·연·참새·고치/나비·달팽이)는 세션에 아직 배치하지 않아(§8.5) 이번 범위 밖이다.
|
||||
- **제작 중 확정한 추가 규칙(2026-10-01 P7 시범 판정)**
|
||||
- **얼굴 해칭은 원화 픽셀로 지킨다**
|
||||
- codex 얼굴 지우기 편집은 눈·입뿐 아니라 얼굴 전체 해칭(다크서클·볼 빗금·팔자·수염)까지 지운다.
|
||||
- persona.json `faceDetail.region: "face"`이면 faceDetail이 얼굴 윤곽 안쪽 전체(윤곽에서 `faceInsetPx` 24px 안쪽, 윤곽 잉크선은 빼서 턱선이 두 겹이 되지 않게 함)를 원화 픽셀로 덮는다.
|
||||
- 눈·눈썹·입 제외 영역만 faceless로 채운다.
|
||||
- `matchFacelessColor`는 그 채움을 주변 원화 피부색에 상수 평행이동으로 맞춘다(보간·블러 금지).
|
||||
- 머리카락 알파 0 마스크는 원화·faceless 분할의 합집합이다.
|
||||
- P1은 `features`(기존)를 유지한다.
|
||||
- **눈썹은 원화 스프라이트**
|
||||
- 벡터 눈썹(반투명 띠 + 털 획)은 P1의 가늘고 옅은 눈썹에 맞춘 것이라, 굵은 판화 눈썹이 "갈색 막대"가 됐다.
|
||||
- `RigBrow.sprite`
|
||||
- `brow_sprite.py`가 원화 눈썹 잉크를 뜬다.
|
||||
- 알파는 잉크 농도이고, L_ink = 잉크 픽셀 휘도 중앙값, 경계 1.5px다. 색은 피부 오염을 역산한다.
|
||||
- 실제로 위에 그려지는 hairFront 레이어 알파 아래 픽셀은 뺀다. 분할 category로 빼면 굵은 눈썹이 머리카락으로 오분류돼 82%가 사라졌다.
|
||||
- 렌더러는 이를 세로 16띠로 나눠, 벡터 눈썹과 같은 계수의 inner·peak·outer 변위를 2차 보간으로 옮긴다.
|
||||
- P7 중립 합성 평균절대차는 7.8/5.0(알파>0 영역)이다.
|
||||
- **눈꺼풀 선 굵기·홍채는 원화에서 잰다**
|
||||
- `RigEye.lineScale`
|
||||
- 원화 윗눈꺼풀 잉크 두께 ÷ P1 2.0px이고, [1, 2.5]로 제한한다.
|
||||
- 늘어나는 분량은 눈꺼풀 선 **바깥쪽**으로만 더한다. 안쪽으로 두꺼워지면 홍채가 가려져 눈이 졸려 보였다.
|
||||
- 홍채 중심·반지름은 원화 실측을 쓴다(`irisFromArt`). MediaPipe 홍채는 P7에서 14~15% 컸다.
|
||||
- P1은 세 필드 모두 false로 기존 리그를 유지한다.
|
||||
- **정규화 위쪽 빈 곳은 종이색으로 채운다.** 반사 패딩은 머리카락이 원화 위 끝 가까이 오는 후보(P3·P5·P6·P7)에서 머리 위에 뒤집힌 머리카락을 만들었다.
|
||||
- **QA 시트는 깜빡임을 피해 찍는다.** 3연사 중 눈 윤곽이 가장 큰 장을 고른다.
|
||||
|
||||
### 8.5 세션 연결 (2단계-B-2, 2026-10-01 설계)
|
||||
|
||||
- 연결 지점 지도(탐색 보고)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue