SOTAESAN ATLAS

Markdown 원본 다운로드

Sunnyvale 보행·시대 전환과 근접 범위 조사 — 2026-10-04

화면 비교는 원본+표식과 보정 면+표식을 나란히 표시한다. 보행 28장, 제외한 마우스 시험 4장, 구역·시대·합성 시선 36장, 같은 근접 좌표 재현 8장으로 총 76장이다. 전체 조사와 이전 네 고정 시점을 함께 읽는다.

조건

실제 입력과 결과

D → A → D로 좌우 이동하고 W로 접근·접촉한 뒤 S로 후퇴했다. 거리 조건은 공개된 발 좌표로 판단하고 입력을 finally에서 해제했다. 엔진과 회차에 따라 실제 끝 좌표가 달라 보행 영상끼리 픽셀 차이를 계산하지 않는다. 네 보행 회차의 자동 복구는 모두 0회였다. Three.js의 각 촬영 상태는 grounded=true이며 PlayCanvas 조회에는 grounded가 없어 동일 접지 판정을 하지 않는다.

시대 시험은 실제 ‘과거 보기’ → ‘현재 보기’ 버튼으로 전환했다. 네 회차 모두 current → historical → current, 전환 횟수 0 → 1 → 2, idle·오류 없음·relocated=false를 확인했다. 합성 DOM TouchEvent를 기존 입력 경로로 보내 yaw 78°·102°, pitch −38°, 원래 −20°/90° 복귀를 확인했다. 실제 마우스나 손가락 제스처 시험은 아니다. 성공한 네 시대 회차의 페이지 오류·console warning/error·실패 요청은 모두 비어 있다.

S 입력으로 후퇴할 때 strip-2가 추가 로드됐지만 장애물에 막혀 발 X는 Three.js 약 −13.05m, PlayCanvas 약 −13.13m에 머물렀다. strip-1과 strip-2가 ready인 채 unloads=0이다. 시작점 복귀도 확인했으나 구역 해제·보정 면 재생성 수명은 검증하지 못했다.

근접 반례와 화질 한계

실제 Three.js 보정 회차의 접촉 eye [-15.424120773749959,2.1055323240110697,-11.121720261758108]m를 두 엔진에서 다시 고정했다. 보정 유무 각각 표식 전후를 같은 pose로 촬영했다. 표식 ROI는 [52,745,478,800]이며 23,430픽셀이다.

엔진 원본 표식 전후 MAE RGB8 보정 표식 전후 MAE RGB8
Three.js 11.5269 11.5269
PlayCanvas 13.5552 13.5422

모든 조건에서 3초과 채널 차이가 있는 픽셀은 20,207개다. 보정이 근접 시점의 표식을 가렸다고 판정할 수 없다. 수치는 표식의 영향이며 화질 점수가 아니다.

보정 면의 네 모서리는 화면 Y 약 1012–1370으로, 높이 800의 화면 아래에 모두 벗어난다. 표식 모서리로 향하는 광선은 면의 X에서 Y 약 1.536–1.774m를 지나며 보정 상단 1.48m보다 높다. 이는 면의 범위 밖이라는 기하학적 근거다. 그 위치가 실제 불투명 벽인지 창문·셔터인지까지 확정하지 않는다. 창문을 덮는 면 확장은 채택하지 않았다.

하향·후퇴 화면에서는 보정 면의 사각 경계와 무늬 평활화가 드러난다. 구역 LOD의 색·밀도와 전체 SOG에서 교정한 텍스처가 달라 정식 품질 완료로 처리하지 않는다. 기존 네 고정 시점의 가림 결과는 유지하되 전체 벽·거리·시선으로 일반화하지 않는다.

제외한 자동화 시도

제외 기록에 보존했다. Three.js native pointer-lock 시선은 큰 비제어 회전이 발생해 4장 모두 비교 선택에서 제외했다. PlayCanvas 최초 두 시도는 pointer lock의 WrongDocumentError였고, 별도 재시도에서 잠금 성공은 있었지만 상대 마우스 이동을 안정적으로 제어하지 못했다. 원시 JSON의 오류를 삭제하지 않았다. 자동화 제한과 일반 사용자 입력 오류의 원인은 확정하지 않았다.

첫 시대 시도는 ‘지상보행’ 문구에 의존한 준비 대기가 과거 전환 뒤 타임아웃됐다. 공개 상태에서 historical·idle·ready·로딩 없음이 확인돼 준비 조건을 수정하고 네 회차 모두 재실행했다. 앱 로딩 실패로 집계하지 않는다.

원본과 재실행

두 서버 5173·5174가 준비된 저장소 루트에서 별도 Playwright MCP의 browser_run_code_unsafe에 다음 파일을 순서대로 전달한다. 반환 JSON은 해당 파일명으로 저장한다.

  1. scripts/capture-wall-walking-probes.playwright.js → captures.json
  2. scripts/capture-wall-era-probes.playwright.js → era-captures.json
  3. scripts/capture-wall-coverage-probes.playwright.js → coverage-captures.json

이전 시안 생성 절차로 output/playwright/wall-calibrated-probe.glb가 준비돼 있어야 한다. 반환 JSON을 위 폴더에 저장한 뒤 아래 명령으로 PNG·스크립트·GLB 보존, 차이 재계산, 비교 HTML·해시 목록을 만든다.

uv run --with numpy --with pillow python scripts/retain-wall-walking-evidence.py

검증 결과: manifest 대상 88개 파일의 바이트·SHA-256, 76개 PNG의 무결성과 1280×800 크기, 비교 HTML의 34개 선택 조합·문서 링크가 일치했다. 보행 복구 0회, 시대 네 회차의 레이어·idle·전환 횟수, 근접 여덟 회차의 오류 없음도 원본 JSON으로 확인했다. 촬영 스크립트 세 개의 문법 검사를 통과했다.

Playwright에서 file: 접근 차단이 반환돼 이 HTML의 브라우저 조작 검증은 제외했으며, 다른 호스트·경로로 재시도하지 않았다. 장면의 localhost 촬영 성공과 구분한다.

촬영·비교가 끝나면 시험 브라우저와 조회로 생성된 빈 탭을 닫는다. 사용자 Chrome 탭과 기존 서버는 유지한다.