리노컷 공통 파이프라인 캐스트 확장 — 정렬·정규화·얼굴 해칭·원화 눈썹·눈 실측

- register_edit(편집본 ECC 정렬·챔퍼 지표), normalize_base(P1 머리 크기 정규화, 위쪽 종이색 채움)
- faceDetail region=face(얼굴 해칭을 원화 픽셀로 보존)·matchFacelessColor
- brow_sprite 단계: 원화 눈썹 잉크 스프라이트(hairFront 아래 제외), 윗눈꺼풀 두께·홍채 실측
- 리그 계약 RigBrow.halfWidth/sprite·RigEye.lineScale, 렌더러 눈썹 16띠·바깥쪽 눈꺼풀 굵기
- 실행기 UTF-8 하위 실행, brow_centerline 패딩본 자체 생성, QA 시트 촬영 도구(깜빡임 회피·고해상도 대조)
- P1은 새 필드를 모두 끄고 게시 자산·리그 바이트 동일
This commit is contained in:
Yun Chan 2026-10-01 22:38:27 +09:00
parent 9a22d1647b
commit 98577cf4ae
18 changed files with 2524 additions and 85 deletions

View file

@ -13,7 +13,7 @@
1005,
1565
],
"padNote": "base-faceless.png 마지막 행을 복제해 1005x1566(base-front.png 크기)으로 패딩한 것이 F다."
"padNote": "base-faceless.png 마지막 행을 1번 복제해 1005x1566(base-front.png 크기)으로 패딩한 것이 F다."
},
"layers": [
{
@ -424,6 +424,10 @@
],
"faceDetail": {
"browLandmarksSource": "persona.json faceDetail.browLandmarksOverride",
"region": "features",
"faceInsetPx": null,
"matchFacelessColor": false,
"matchFacelessColorDeltaRgb": {},
"regions": {
"eyeLeft": [
309.1,
@ -1439,6 +1443,9 @@
"peakFail": false,
"checkA_fracColumnsFitWithinMask": 0.9247,
"checkA_pass": true,
"halfWidthInner": 2.389,
"halfWidthPeak": 8.999,
"halfWidthOuter": 3.963,
"bandX0": 274,
"bandY0": 456,
"colMin": 309,
@ -1482,12 +1489,26 @@
"peakFail": false,
"checkA_fracColumnsFitWithinMask": 0.9202,
"checkA_pass": true,
"halfWidthInner": 5.84,
"halfWidthPeak": 9.499,
"halfWidthOuter": 2.984,
"bandX0": 506,
"bandY0": 454,
"colMin": 513,
"colMax": 688
}
},
"halfWidthLeft": [
2.389,
8.999,
3.963
],
"halfWidthRight": [
5.84,
9.499,
2.984
],
"halfWidthNote": "원화 눈썹 잉크 띠 반두께[inner,peak,outer](px, 중심선 법선 방향). export_rig.py가 persona.json browHalfWidthFromArt!=false(기본)면 RigBrow.halfWidth로 내보낸다.",
"checkB_innerMinusPeakY": {
"browLeft": 14.62,
"browRight": 13.47
@ -1721,59 +1742,84 @@
},
"pipelineRun": {
"persona": "P1",
"timestamp": "2026-10-01T11:04:58",
"timestamp": "2026-10-01T21:46:24",
"completed": true,
"stages": [
{
"stage": "landmarks",
"ok": true,
"elapsedSec": 1.24
},
{
"stage": "brow_centerline",
"ok": true,
"elapsedSec": 0.64
},
{
"stage": "segmentation",
"ok": true,
"elapsedSec": 7.84
},
{
"stage": "layers_v2",
"ok": true,
"elapsedSec": 12.39
},
{
"stage": "face_detail",
"ok": true,
"elapsedSec": 12.25
"elapsedSec": 15.41
},
{
"stage": "brow_sprite",
"ok": true,
"elapsedSec": 1.05
},
{
"stage": "paper_grain",
"ok": true,
"elapsedSec": 1.91
"elapsedSec": 2.45
},
{
"stage": "lip_texture",
"ok": true,
"elapsedSec": 1.92
"elapsedSec": 2.45
},
{
"stage": "jaw_pieces",
"ok": true,
"elapsedSec": 1.89
"elapsedSec": 2.17
},
{
"stage": "export_rig",
"ok": true,
"elapsedSec": 21.12
"elapsedSec": 22.95
},
{
"stage": "final_previews",
"ok": true,
"elapsedSec": 16.83
"elapsedSec": 19.59
}
]
},
"browSprite": {
"enabled": false
},
"eyeLineScale": {
"enabled": false
},
"browSpritePublish": null,
"iris": {
"method": "가로: 중심 y 부근 상하 각 4행에서 중심 x를 포함하는 연속 어두운(lum<100) 구간의 중앙값으로 반지름·중심x. 세로: 중심 x 부근 좌우 각 4열에서 중심 y를 포함하는 연속 어두운 구간의 아래쪽 끝 중앙값에서 가로 반지름을 빼 중심y(세로축은 윗눈꺼풀 잉크와 홍채가 같은 톤으로 이어져 위쪽 경계를 가를 수 없다).",
"darkLumThresh": 100.0,
"scanBandPx": 4,
"left": {
"measuredCenter": [
395.0,
567.0
],
"measuredRadius": 30.0,
"rigCenter": [
387.33,
579.15
],
"rigRadius": 21.43,
"nRowsHorizontal": 9,
"nColsVertical": 9
},
"right": {
"measuredCenter": [
600.0,
573.0
],
"measuredRadius": 22.0,
"rigCenter": [
601.93,
576.21
],
"rigRadius": 21.28,
"nRowsHorizontal": 9,
"nColsVertical": 9
}
}
}

View file

@ -35,6 +35,10 @@
"browRight": { "inner": [531.24, 535.37], "peak": [628.82, 496.05], "outer": [687.99, 522.25] }
}
},
"browHalfWidthFromArt": false,
"browSpriteFromArt": false,
"eyeLineScaleFromArt": false,
"irisFromArt": false,
"pivots": {
"neck": [500, 990],
"body": [502, 1566],

View file

@ -267,6 +267,7 @@
},
"haloThreshold": 2.0
},
"browSpritePublish": null,
"rig": {
"schemaVersion": "vignette.avatar.v3.rig.v1",
"persona": "P1",