Files
behind_glass/docs/qa-varied-dogs-2026-09-23/report.md
T
2026-10-06 12:16:46 +09:00

124 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 다양한 강아지 사진 QA 결과 — 2026-09-23
기존 샘플 1장과 강아지 사진 4장으로 로컬 브라우저 QA를 진행했다. 강아지 사진 4장의 자동 AI 깊이 생성과 화면 출력을 확인했으며, **같은 사진을 다시 불러오면 수동 구도가 초기화되는 결함**을 재현했다. 어두운 얼굴과 작은 얼굴은 기본 Grid13에서 눈·코 식별성이 크게 낮아졌다. 두 마리 사진과 닥스훈트 사진은 Grid24에서 세부 구조가 더 남았지만, Ref1의 유리 표현을 충족했다고 판정하지는 않았다.
이번 작업의 산출물은 QA 기록·스크린샷·진단 JSON이다. 소스 코드, 셰이더, 스타일, 빌드 설정과 테스트 코드는 수정하지 않았다.
## 1. 검증 조건과 범위
| 항목 | 조건 |
| --- | --- |
| 실행 주소 | `http://127.0.0.1:5174/` |
| 주 시각 기준 | Ref1. Ref2는 보조 비교 자료 |
| 기본 효과 | Final / Mosaic / 조각 유리 |
| 기본값 | Grid13, 굴곡 +1, 광택 0.30, Camera Offset 0.50, Depth Scale 0.25 |
| 사진 구도 | 확대 1.00, 가로 0.00, 세로 0.00. 구도 재현 실험에서만 수동 변경 |
| 고정값 | 색면 단순화 1, 굴절 1 |
| 깊이 출처 | 기존 샘플: 수작업·절차적 근사. dog1–4: Depth Anything V2 Small AI 추정 |
| 모바일 확인 | 브라우저 뷰포트 390×844, DPR 1. 실제 휴대폰 검증은 아님 |
AI 성공 문구와 깊이 출처 표시를 함께 확인했다. AI 완료 시 Final로 전환되므로 No Glass 비교는 추론 완료 후 선택했다. 사진 전환은 카메라를 초기화하지 않으므로 중앙 비교에는 시점 초기화를 사용했다. No Glass도 깊이로 변형된 사진 표면이며, 변형 없는 원본 RGB와 동일하다고 해석하지 않는다.
## 2. 사진별 결과
| 사진 | 기능 검증 | 시각 관찰 및 증거 |
| --- | --- | --- |
| 기존 샘플 | 수작업 깊이 출처, No Glass 중앙/드래그, Final Grid13 | [Grid13](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/sample-grid13.png). 초기 No Glass 캡처의 크롭은 아래 증거 제한 참고 |
| dog1 · 잔디 위 흰 포메라니안 | 자동 AI 성공, No Glass, Final Grid13, 모바일 재검증 성공 | 흰 몸과 어두운 눈·코가 비교적 구분된다. [No Glass](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/dog1-noglass.png) · [Grid13](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/dog1-grid13.png) |
| dog2 · 실내의 검정·갈색 강아지 | 자동 AI 성공, No Glass 중앙/드래그, Final Grid13 | 실루엣은 남지만 어두운 얼굴의 눈·코가 큰 색면에 섞인다. [No Glass](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/dog2-noglass.png) · [Grid13](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/dog2-grid13.png) |
| dog3 · 후드 옷을 입은 두 마리 | 서버 복구 후 자동 AI 성공, No Glass, Grid13/24, Grid24 드래그 | Grid13에서 작은 얼굴 정보가 대부분 사라진다. Grid24는 얼굴·옷·배경 구조를 더 남기지만 블록화 인상이 강하다. [No Glass](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/dog3-noglass.png) · [드래그](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/dog3-grid24-drag.png) |
| dog4 · 벤치 위 갈색 닥스훈트 | 자동 AI와 수동 AI 재생성 성공, No Glass, Grid13/24, 모바일 확인, 구도 대조 실험 | Grid13에서 갈색·어두운 얼굴 정보가 합쳐진다. Grid24는 구조를 더 남기며, 머리·오른쪽의 창문 모양 반사가 두드러진다. [No Glass](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/dog4-noglass.png) · [Grid13](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/dog4-grid13.png) · [Grid24](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/dog4-grid24.png) |
두 마리 사진의 같은 구도 비교:
| Grid13 | Grid24 |
| --- | --- |
| ![두 마리 강아지 Grid13](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/dog3-grid13.png) | ![두 마리 강아지 Grid24](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/dog3-grid24.png) |
이 평가는 저장된 출력의 시각 관찰이다. 출력이 블록처럼 보인다는 사실만으로 셰이더가 단순 저해상도 확대를 사용한다고 결론 내리지는 않는다. Grid24의 개선도 Ref1 재현 완료나 눈·코 식별성의 일반적인 보장을 뜻하지 않는다.
## 3. 재현된 결함: 같은 사진 재불러오기 시 구도 초기화
**우선 수정 대상.** 자동 구도 변경 금지 요구사항과 충돌하며, 사용자가 맞춘 확대·팬을 잃는다.
1. dog4를 불러오고 AI 생성 완료를 확인한다.
2. 사진 구도를 확대 **1.50**, 가로 **+0.10**, 세로 **−0.10**으로 설정한다.
3. 선택 사진을 바꾸지 않고 **선택한 테스트 사진 불러오기**를 누른다.
4. AI 생성이 진행 중인 시점에 이미 **1.00 / 0.00 / 0.00**으로 초기화된다. AI 완료 후에도 초기값이 유지된다.
대조 실험에서는 같은 수동 구도에서 사진을 다시 불러오지 않고 **AI 깊이 생성**만 실행했다. 이때는 생성 중과 성공 후 모두 **1.50 / +0.10 / −0.10**이 유지됐다. 따라서 재현된 원인은 사진 로드 경로의 구도 초기화이며, AI 완료 단계가 구도 값을 초기화하는 것으로 보고하지 않는다.
| 조건 | 실행 전 | 실행 중 | 완료 후 |
| --- | --- | --- | --- |
| 같은 사진 재불러오기 | 1.50 / +0.10 / −0.10 | 1.00 / 0.00 / 0.00 | 1.00 / 0.00 / 0.00 |
| 사진 재불러오기 없이 AI 재생성 | 1.50 / +0.10 / −0.10 | 1.50 / +0.10 / −0.10 | 1.50 / +0.10 / −0.10 |
실제 코드의 [src/main.ts:210](D:/project/behind_glass/src/main.ts:210)에서 `applyMedia()`가 `photoZoom = 1; photoPanX = 0; photoPanY = 0;`을 수행한다. 이 공통 경로는 다른 미디어 로드에도 적용될 가능성을 보여주지만, 브라우저에서 직접 재현한 범위는 **같은 테스트 사진 재불러오기**다.
증거: [변경 전](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/framing-before-reload.txt), [재불러오기 직후](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/framing-reload-immediate.txt), [재불러오기 완료](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/framing-reload-completed.txt), [AI만 재생성 중](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/framing-ai-regenerate-start.txt), [AI만 재생성 완료](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/framing-ai-regenerate-completed.txt).
| 사진 재불러오기 전 | 사진 재불러오기 후 |
| --- | --- |
| ![수동 구도 설정](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/framing-before-reload.png) | ![재불러오기 후 구도 초기화](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/framing-after-reload.png) |
수정 후에는 같은 사진 재불러오기, 다른 사진 입력, AI만 재생성, 명시적인 사진 구도 초기화 버튼을 구분해 검증해야 한다. 이번 QA에서는 수정하지 않았다.
## 4. 모바일 재검증과 최종 콘솔
초기 `dog1-mobile-grid13.png`에는 앱이 왼쪽에 작게 나타나는 이상 캡처가 있었다. 이후 dog4와 dog1을 390×844에서 다시 확인했을 때는 정상 크기의 세로 배치가 나타났으며, **이전 축소 현상은 재현되지 않았다**. 초기 캡처의 원인을 확정하거나 모바일 전체가 정상이라고 판정하지 않는다.
dog1을 새로 불러와 자동 AI 성공을 확인한 뒤 측정한 값:
| 측정값 | 결과 |
| --- | --- |
| `innerWidth × innerHeight` | 390 × 844 |
| DPR / `visualViewport.scale` | 1 / 1 |
| `scrollX / scrollY` | 0 / 0 |
| 문서 `scrollWidth` | 375 — 측정 시 가로 넘침 없음 |
| Canvas | x=0, y=200, 폭 375, 높이 506.390625 |
| 조절 패널 `aside` | x=0, y=706.390625, 폭 375, 높이 966 |
![포메라니안 모바일 재검증](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/dog1-mobile-retest-viewport.png)
추가 증거: [닥스훈트 모바일 화면](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/dog4-mobile-viewport.png) · [닥스훈트 전체 페이지](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/dog4-mobile-fullpage.png).
최종 콘솔 조회는 `error`·`warn` 수준, 최대 100건 범위에서 **빈 배열 `[]`**이었다. 이는 해당 탭에서 도구에 수집된 로그의 조회 결과이며, 모든 과거 세션이나 실제 휴대폰의 오류가 없음을 증명하지 않는다.
임시 뷰포트 오버라이드를 `reset()`으로 해제했고, 이후 크기는 **1280×720**이었다. 최종 사진은 dog1이며, Final / Mosaic / 조각 유리, Grid13, 굴곡 +1, 광택 0.30, Camera Offset 0.50, Depth Scale 0.25, 확대·팬 1/0/0을 DOM 값으로 확인했다. 상태는 `자동 AI 추정 depth를 적용했습니다.`였다. 측정값·최종 설정·콘솔 결과는 [final-diagnostics.json](D:/project/behind_glass/docs/qa-varied-dogs-2026-09-23/final-diagnostics.json)에 저장했다.
## 5. 기존 검사 결과와 테스트 유지보수 사항
다음은 **앞선 QA 단계에서 기록한 종료 코드 0 결과**다. 이번 마무리 단계에서는 소스 변경이 없어 재실행하지 않았다.
```text
npm.cmd run build
node scripts/test-camera-history.mjs
node scripts/test-mosaic-continuity.mjs
node scripts/test-mosaic-depth-distance.mjs
node scripts/test-region-atlas-dark-sampling.mjs
node scripts/test-region-axis-split.mjs
node scripts/test-surface-reflection.mjs
node scripts/test-window-reveal-coverage.mjs
```
빌드 기록에는 500kB 초과 청크 경고가 있었다. 메인 JavaScript는 524.84kB, AI worker는 878.03kB였다. 이 수치만으로 로딩 시간이나 추론 성능을 판정하지 않는다.
**테스트 코드에서 확인한 유지보수 사항:**
- [test-region-axis-split.mjs:115](D:/project/behind_glass/scripts/test-region-axis-split.mjs:115)의 별도 JavaScript 모델은 안전한 어두운 palette 선택을 구현하며, [151행](D:/project/behind_glass/scripts/test-region-axis-split.mjs:151)은 안전한 색이 없으면 원본 RGB를 유지하는 동작을 검사한다. 최신 요구사항은 최종 픽셀의 원본 RGB 복원 분기를 제거하는 것이므로, 이 테스트 통과를 현행 셰이더의 눈·코 보호나 시각 품질 검증으로 사용할 수 없다.
- **실행하지 않은** [ai-depth-smoke.mjs:69](D:/project/behind_glass/scripts/ai-depth-smoke.mjs:69)는 AI 완료 후 캡처를 `no-glass.png`로 저장한다. 관찰된 앱은 AI 완료 시 Final로 돌아가므로 파일명이 실제 모드를 보장하지 않는다. [105행](D:/project/behind_glass/scripts/ai-depth-smoke.mjs:105)은 사진 전환 후 AI 버튼 활성화·깊이 출처 숨김을 기대하는데, 현재 사진 입력은 자동 AI를 시작하고 성공 시 출처를 표시한다. 이 기대값도 현재 흐름에 맞춘 검토가 필요하다.
이 검사는 GPU 출력, 실제 AI 추론 성공, Ref1과의 시각적 유사성을 대신하지 않는다. `test-window-reveal-coverage`는 실제 클래스를 CPU raycasting으로 검사하지만 화면 렌더링 검사는 아니다.
## 6. 증거의 한계와 남은 검증
기존 수작업 샘플의 드래그 실험 기록에서는 카메라 X가 0.065일 때 코의 투영 X가 520.448→516.144, 왼쪽 눈은 493.625→490.020, 몸은 453.585→450.871로 이동했다. 이는 **수작업 샘플의 깊이별 투영 차이**를 지지한다. dog2의 No Glass 드래그와 dog3의 Final 드래그도 시각적 변화를 보였지만, AI가 추정한 코·눈 깊이의 정확도는 정량 측정하지 않았다.
초기 `sample-noglass-center.png`와 `sample-noglass-drag.png`는 stage 크롭을 사용했으나 출력에 레퍼런스 영역이 포함된 정황이 있어, 이 두 이미지의 크롭을 정밀 비교 근거로 사용하지 않는다. 이후 사진들은 일반 뷰포트 캡처를 사용했다.
dog3의 첫 로드 실패 시점에는 5174 포트의 개발 서버가 내려가 있었다. 서버를 다시 실행한 뒤 같은 사진의 로드와 AI 추론이 성공했다. **WebP 디코딩 결함으로 분류할 근거는 없다.**
실제 휴대폰 터치·자이로, 모바일 GPU와 FPS, 영상 플리커, 장시간 메모리·자원 해제, AI 중단/연속 입력의 모든 경합 상황, AI 깊이 정확도, 다른 유리 모드 전체 회귀는 이번 확인 범위에 포함되지 않는다. 샘플 사진과 QA 산출물을 외부에 게시하지 않았다.
현재 우선순위는 **사진 로드 시 수동 구도 보존 결함 수정**, 다음으로 **어두운 얼굴·작은 얼굴의 식별성과 Ref1 표현 재평가**, 그리고 **현행 동작과 어긋난 테스트 기대값 정리**다.