2026-10-12 세션 A — PNCAD 실사 렌더링 모드 v1 (계획 · 모듈 제작 · 통합 · 테스트 배포 완료)
[코디] 26.10.12(월) 21:09 KST~26.10.13(화) 00:0x KST · 테스트 배포 완료(결과 = 맨 아래 「✅ 테스트 배포 결과」) · 운영배포 안 함 · 세션 A(총괄) · 병렬 세션 B = pncad 보완·기능 제안(별도 기록
C:\dev\seedchain\projects\pncad\design-improve-1012.md). 설계 정본 =C:\dev\seedchain\projects\pncad\design-photoreal.md(442줄) · devplan =C:\dev\devplan\pncad-photo.html· 작업 폴더 =C:\dev\_work\pncad-photo-1012\· 작업 트리 =C:\dev\_wt\pncad-a(브랜치 feat-1012-photo). 운영배포 없음 — 테스트 배포(8001)까지만, 운영은 페페 검토 후.
논의·대안 — 지시
- [페페] 26.10.12(월) 21:0x 지시: 「22시 사용량 갱신 전에 pncad 작업을 실사렌더링 최저비용으로 최고효과 끌어낼 수 있는 방안을 계획하고 시간이 남으면 제작 시작도 진행해라. Api 비용까지 모두 써라. 세션 하나 더 만들어서 pncad 보완과 기능 제안 계획 및 진행도 해라. 모두 페이블 울트라코드 사용해서 사용량 소진까지 최대한 많은 일을 해라. 선택은 추천대로. 운영배포는 추후 검토 후 진행하겠다. 테스트배포까지만 진행.」
- 세션 B =
session_014M3eyEre565eBFuZJUPEXu(Claude Code Remote · create_session). 충돌 방지 규약 =C:\dev\_work\pncad-photo-1012\session_b_prompt.md— B 는 worktree(C:\dev\pncad\_wt_b, 브랜치 feat-1012-b), A 는 worktree(C:\dev\_wt\pncad-a). 병합·sync·push 는 락 폴더C:\dev\_work\pncad-deploy.lock로 직렬화, 커밋 머리[A]/[B]. A 는 app.html 의 renderer·light·material 구간 +#vbar토글 + 새 파일, B 는 편집기·규격표·엔진·app.html 의 다른 구간.
논의·대안 — 상담·조사 (3안 비교 → 3검토 일치)
- 현황 5줄: ①목표 = 돈 0원·서버 GPU 없이 3D 의 «실사 느낌» 최대화(렌더 전부 클라이언트 — 사무실 PC 내장 GPU · 미니PC N100급) ②메인 렌더러는
NoToneMapping·그림자 꺼짐·환경맵 없음·AO 없음·텍스처 0개 · three@0.160.0 ③재질colorMat(hex,door)단색MeshStandardMaterialroughness .85 ④렌더 루프는 유휴에도 매 프레임 render · 썸네일(tRen)·편집기(editor.js)는 자체 렌더러라 영향 없음 ⑤헤드리스 E2E = SwiftShader 소프트웨어 WebGL2 → fps·GPU 전용 버그 검증 불가. - 조사 Workflow 3갈래: R1 코드맵(훅 14곳·위험) · R2 three r160 기술(GTAOPass r160 존재, PMREM·ACES·그림자 실측) · R3 재질데이터(
poin_colors879종은 hex 만 있고 질감 이미지 없음). 합성 =design-photoreal.md. - 3단계 안: A 실시간 PBR(환경광 PMREM·ACES·그림자맵·GTAO·결 텍스처) / B 브라우저 GPU 경로추적 스틸(
three-gpu-pathtracer@0.0.17+three-mesh-bvh@0.7.0핀 검증) / C AI 후처리·서버 렌더(나노바나나 img2img · 집PC 4070 Blender). 비용은 A·B 모두 0원, C1 은 무료쿼터 소모·형상 환각 위험(현장·고객 제출 부적합), C2 는 2~3일 공수. - 상담 3건 추천 일치 = A 먼저 → B 다음 → C 보류:
- 코덱스(
C:\dev\_work\pncad-photo-1012\consult_codex.out.txt) — 효과 순위 = 목재 질감·실척 UV ≈ 바닥 접촉감 > PMREM·roughness > ACES > GTAO. 내장 GPU 에선 상시 GTAO·별도 접촉그림자 패스·4K 그림자 제외, GTAO 는 정지 사진에서만. 질감 = 6종 아키타입 혼합. 알파 도어·opacity 0 픽킹 메시·LineSegments2 는 그림자/AO 사고 후보. - opus-max API ask 2차(
C:\dev\_work\pncad-photo-1012\consult_opus.md질문 5개, 비용 $1.76) —photo.js지연 import + 토글 1개, 원본 재질 불변 + WeakMap 복귀, 픽킹 메시visible=false,shadowMap.autoUpdate=false(장면 바뀔 때만 갱신), 경로추적은 별도 모듈. 1차는 기본 600초에 timeout → 2차에--timeout 1500. - web-designer(메인 세션) — UI 처방 =
C:\dev\_work\pncad-photo-1012\webdesigner_rx.md:#vbar끝 구분선 + [실사 Ctrl+7][▾ 품질][렌더 시작][상태칩] · 품질 팝오버#rqp(빠름/보통/최고) · 렌더 진행 = 뷰 안 하단바#rbar(모달 아님) · 렌더 중inert잠금 · 감지 3종 안내(미지원/가속 꺼짐/느림, 자동 강등 금지). - 위험(실측): 크롬 기본 ANGLE D3D11 + MIS ON 이면 경로추적이 전면 순백으로 깨지고 컴파일 32~45초 메인스레드 정지 → B 는 사무실 PC 실기 확인 선행 + 방어책 필요(그래서 v2 로 미룸).
결정
- [페페] 「선택은 추천대로」 → [코디] 결정 3건:
1. 벽 — 벽 토글 켬이면 불투명 연한 벽(실사·렌더 둘 다), 끔이면 벽 없음. 반투명 .22 는 실사 모드에서 안 쓴다.
2. 마감 — 실사 모드는 «질감 우선». 칼라코드 → 아키타입 12종(
C:\dev\pncad\data\finish-map.json), 표에 없는 코드 = default 목재 + 그 코드 hex 틴트(수동 hex 가 있으면 틴트에 사용). 실사 켜면 배치 팝업 색상칸 아래 한 줄 「실사 중에는 색 대신 질감으로 표시된다」. 3. 출력 — 긴 변 1920px 고정, 화면 비율 그대로. 옵션 없음(v1). - [코디] 상태 저장: 실사 켬/끔은 저장하지 않는다(항상 꺼진 채 시작). 품질만 localStorage
pncad.realq(fast|mid|high). 작업본(SCENE)에 안 싣는다. - [코디] PMREM·톤매핑은 실사 켠 동안만(편집 화면 바이트 동일 보장). opus 의 «PMREM 편집 상시» 안은 채택 안 함 → 다음 결정 후보로 남김.
- [코디] 첫 켬 품질 기본 = 보통. 가속 꺼짐(SwiftShader 류)이면 빠름 고정. 느림 감지(켠 뒤 2초 평균 프레임 > 45ms 제안값)여도 자동 강등 안 하고 안내만.
산출물·커밋
모듈 (API L3 run 5건 · 전부 node 자체검사 PASS · pncad master 커밋)
| 커밋 | 파일 | 내용 · 검증 |
|---|---|---|
5f13327 |
C:\dev\pncad\photo-uv.js |
부재 UV(BoxGeometry 24정점 mm 박스 투영 · 결축 · 부재별 seed 오프셋) · 자체검사 7/7 |
a5f07e2 |
C:\dev\pncad\tools\fetch_textures.py |
결 텍스처 받기 + 회색 정규화(선형 평균 0.88 · 1K · MANIFEST) · --selftest 6/6 |
c2df090 |
C:\dev\pncad\tex\ |
결 텍스처 5종(Poly Haven CC0 1K · light_oak/oak/walnut/grey_wood/dark_wood · 원본 + 회색 정규화본) + data/finish-textures.json |
8fbb510 |
C:\dev\pncad\photo-pt.js + photo-pt-core.js |
경로추적 스틸 모듈(0.0.17 + bvh 0.7.0 핀 · meter 복제 씬 · 품질 3단 · 30초 상한 · stop/finish/dispose) · 자체검사 5/5 · v2 사전 제작, app.html 미연결 |
4c946ca |
C:\dev\pncad\photo-finish.js + data/finish-map.json |
칼라 코드 → 아키타입 12종(exact·규칙·default · 수동 hex 틴트 우선) · 7/7 |
3f646f3 |
C:\dev\pncad\photo-tex.js + photo-tex-core.js |
질감 재질 공장(병렬 로드 · 아키타입 재질 캐시 · 역할별 결축 · 부재 UV 굽기 · dispose) · 7/7 · photo.js 연결은 통합 단계 |
- 텍스처 보완 후보: walnut 평균 0.816 · dark_wood 0.629 는 정규화 목표 0.88 미달 → ×5 클램프로 처리됨(색이 어둡게 나올 수 있음).
실사 모드 v1 핵심 (Workflow W1 → 적대검토 → W2 · worktree C:\dev\_wt\pncad-a 브랜치 feat-1012-photo)
| 커밋 | 내용 |
|---|---|
db964c9 |
C:\dev\pncad\photo.js(지연 import) · #vbar 실사 7·▾·렌더 시작·칩 · 하단바 #rbar · 품질 팝오버 #rqp · tools/_e2e_photo.py |
398fd86 |
검토 반영 — 렌더 중 창 크기 변경 시 구 비율 PNG 안 내고 view 크기로 복원(setSize 복원) · [여기서 멈추고 저장] 재활성 · 벽 castShadow/receiveShadow 복원 · 잠금 때만 가드 리스너 · E2E 보강 |
d9caae5 |
Merge branch 'master' into feat-1012-photo |
photo.js684줄: 공개 APIenable / disable / render / still / sync / setQuality / detect+init / press / dirty / retune / state / TUNE. PMREM RoomEnvironment · ACES · 방향광 그림자 · 바닥 · 도어 불투명 · GTAO 오버레이 방식(EffectComposer 안 씀 · mid/high · 정지 150ms 뒤 1프레임) · 스틸 = 긴 변 1920 AA 누적 4/8/16 · 30초 상한 · 취소/[여기서 멈추고 저장].C:\dev\pncad\app.html+115줄:#vbar마크업 · Ctrl+7 ·#rqp·#rbar·inert잠금 · Esc capture.TUNE초기값 exposure .75 / sun 3.8 / env .4 는 헤드리스 눈대중 — 실기 GPU 재조정 필요.?forcereal= 개발용(소프트웨어 렌더러를 가속으로 간주).- 구조 원칙: 픽킹 메시(gZone opacity 0)는 실사에서
visible=false· 그림자/AO 는 overrideMaterial 이라 opacity 무시 · 재질 교체는 원본 불변 + WeakMap 복귀.
E2E (worktree 기준)
| 검사 | 결과 |
|---|---|
C:\dev\pncad\tools\_e2e_photo.py |
72/72 |
C:\dev\pncad\tools\_e2e_3dui.py |
147/147 (기대값 갱신 — 버튼 9개 · Ctrl+1~7) |
| fold | 30/30 |
_e2e_qa1009.py |
45/45 |
| 기존 실패 | partsel 선반 867 5건 · instqty 2 · trim 1 — master 와 동일, 신규 0 |
통합·배포 Workflow (✅ 완료 — 결과 = 맨 아래 「✅ 테스트 배포 결과」)
W3 질감 통합(photo-finish/tex/uv 를 photo.js 에 연결) → 검토 → 병합 → sync_to_pfs.py → pfs master 푸시(= 테스트 8001) → _deploy_hash.py test → E2E test. 기록 시점 확인: pncad master 최상단 = 3f646f3(병합 전) · 락 폴더 C:\dev\_work\pncad-deploy.lock 없음 · pfs master 에 실사 커밋 아직 없음. 결과는 맨 아래 빈 절에 총괄이 추기한다.
함정 (14건 — 확정 사실만 · 9~14 = 26.10.13 테스트 배포에서 추가)
- pncad 새 자산은 FILES 3곳(
tools/sync_to_pfs.py·tools/_deploy_hash.py·tools/_verify_deploy.py)에 넣어야 한다 — 누락하면 pfs 에서photo.js404 → 토글 무반응 · 「실사 모듈을 불러오지 못했다」. → pncad rules 🆕. - 기존 E2E 가
/pncad/app.html(8799)을 하드코딩 → worktree 검사는 envPNCAD_LOCAL_BASE·PNCAD_LOCAL_APP(3dui·photo) + Git BashMSYS_NO_PATHCONV=1. → pncad rules 🆕. tools/_e2e_prod.png·_e2e_test.png는 git 추적 파일 —mv _e2e_*.png류 정리 glob 에 걸린다. → pncad rules 🆕.- 픽킹 메시(gZone opacity 0)는 실사에서
visible=false(Raycaster 는 visible 을 안 본다) · 그림자/AO 는 overrideMaterial 이라 opacity 를 무시한다. → pncad rules 🆕. - 실사 재질 교체 = 원본 불변 + WeakMap 복귀(원본을 고치면
needsUpdate함정). → pncad rules 🆕. - API 실행기(
cody_agent run)의 샌드박스는 네트워크가 막혀 있어 외부 자산 «받기»(fetch_textures.py실행)는 총괄이 미니PC 에서 돌린다. →C:\dev\seedchain\projects\cody-agent\rules.md🆕. notify.py step에 같은 번호를 연달아 보내면 broker 가 중복으로 막아 출력이 빈다(문구를 바꾸면 통과). →C:\dev\seedchain\rules\notify.md「같은 알림이 2번…」 절.- opus-max
ask --effort max는 기본 600초를 넘긴다 →--timeout 1500. →C:\dev\seedchain\projects\cody-agent\rules.md🆕. - fold · qa1009 · partsel · instqty · trim E2E 5개는
8799/pncad/app.html하드코딩이라 env 로 worktree 를 못 가리킨다(photo · 3dui 만 env 지원). → 임시C:\dev\_work\pncad-photo-1012\_run_patched.py로 URL 을 치환해 돌렸다. 근본 처방 = 5개에 env 지원 추가. → pncad rules 🆕. - 질감 재질
envMapIntensity기본 1 이면TUNE.env(.4) 기준에서 우드가 하얗게 뜬다. →photo.js가 질감 재질의 env 만TUNE.env로 덮고 roughness 는 아키타입 값을 유지(retune 도 같은 규칙). → pncad rules 🆕. - Edit 도구가 CRLF 파일을 LF 로 바꾼다(
photo.js전체가 LF 로 변함) → 커밋 전 CRLF 로 통일. → pncad rules 🆕. - 라운드 · 마이터 부재(비 BoxGeometry)는 결 없는 단색 짝 재질 — 늘어난 UV 방지. → pncad rules 🆕.
finish-map에 없는 칼라 = 편집 화면 색(cmHex) 그대로(질감 없음), 매핑된 칼라만finish-map색을 쓴다(적대검토 mid③ 의 처방). → pncad rules 🆕.- 비로그인 응답은 302 가 아니라 200 + 로그인 HTML 형태다 — 비로그인 노출 검사는 상태코드가 아니라 본문(데이터 0줄 · 로그인 HTML)으로 판정. →
C:\dev\seedchain\projects\pfs\rules.md🆕.
미결 · 페페 확인
26.10.13 갱신본 = 맨 아래 「✅ 테스트 배포 결과」 안 「미결 · 페페 확인 (갱신)」(경로추적 v2 항목 추가). 아래는 21~23시 시점 원문.
- ⏳[페페] 실기 GPU PC 에서 프레임 · 렌더 시간 — 이 PC(Radeon 780M)만 측정 대상이고 N100 은 미측정, 헤드리스는 SwiftShader 라 fps 검증 불가.
TUNE수치(exposure .75 / sun 3.8 / env .4)도 이때 재조정. - ⏳[페페] 안드로이드 PNG 내려받기 미검증(모바일은 렌더 막기 권고).
- ⏳[페페] PMREM·톤매핑을 편집 화면에도 상시 적용할지(opus 안) — 지금은 실사 켠 동안만.
- ⏳[페페] 텍스처 정규화 클램프 — walnut 0.816 · dark_wood 0.629 (목표 0.88 미달, ×5 클램프). 보완(다른 소스 텍스처 또는 노출 보정) 필요 여부.
- ⏳[페페] 운영배포는 페페 검토 후(지시) — 지금은 테스트 8001 까지.
- 사람 눈: 실사 켠 화면의 질감·그림자 인상, 벽 토글 켬(불투명 연한 벽) 결정이 맞는지.
다음
26.10.13 갱신본 = 맨 아래 「✅ 테스트 배포 결과」 안 「다음 (갱신)」. 아래는 23시 시점 원문(1 완료 · 3 은 B 병합분 master
60dcea5까지 흡수).
- 테스트 배포 결과 추기(아래 빈 절) — 병합(락) → sync → pfs push → 해시 일치 → E2E test.
- 경로추적 v2 연결 —
photo-pt.js(8fbb510)를 app.html 에 연결 + FILES 3곳 등록 + 사무실 PC 실기에서 D3D11 순백 깨짐 확인. - 세션 B 결과 병합 —
C:\dev\seedchain\projects\pncad\design-improve-1012.md·C:\dev\devplan\pncad-improve-1012.html. 병합·sync·push 는 락 폴더 규약대로 직렬. - 텍스처 보완(walnut·dark_wood) · 실기
TUNE재조정 · 사이트맵 재빌드(pfs 고치면 한 작업 — 배포 뒤).
관계
- 주제 그룹: pncad-photo
- 관련 문서: pncad-handoff, pncad-rules, pncad-design-photoreal, pncad-design-improve-1012, pncad-session-2026-10-09-3d-ui-joint-face
✅ 테스트 배포 결과 (26.10.13(화) 00:0x KST · 총괄 추기)
[코디] 배포 시각 = 26.10.12(월) 밤 ~ 26.10.13(화) 00시 사이(KST). 운영 deploy-live 는 안 했다([페페] 「운영배포는 추후 검토」).
질감 통합 → 검토 → 병합
- 질감 통합: worktree
C:\dev\_wt\pncad-a(feat-1012-photo) 커밋cf82294(photo-finish · photo-tex · photo-uv 를photo.js에 연결). - 적대검토 = fix-then-ship — mid 3 + low 3. mid: ①
finish-map로드 실패 뒤 복구 안 됨 ②선택 발광 클론(hiMat)에 질감이 안 붙음 ③매핑 없는 회색 칼라가 흰색으로 바뀜. →b0fd409(반영). 004fb20= master60dcea5(세션 B 병합분) 흡수 merge. 충돌은tools/_e2e_3dui.py한 파일만 수동 해소.- pncad master 병합
837f8cd(--no-ff· 충돌 0). node 자체검사 4종 PASS.
sync → pfs push → 배포 확인
tools/sync_to_pfs.py --check어긋남 16 = 전부 이번 파일(app.html·photo*.js8종 ·data/finish-map.json·data/finish-textures.json·tex/MANIFEST.json·tex/*_g.jpg5종) → sync 실행.- pfs master
7fe05ad4(명시 add 16 파일 · pusha24f100b..7fe05ad4). - GitHub Actions run
38267051825PFS Auto Deploy(master) success(deploy-test 2m8s). _deploy_hash.py test --wait 180= TEST 일치 25 파일(jpg 바이트 해시 포함).
E2E (로그인 · test 서버 · prod 안 돌림)
| 검사 | 결과 |
|---|---|
C:\dev\pncad\tools\_e2e_photo.py test 런1~7 |
106/106 |
C:\dev\pncad\tools\_e2e_3dui.py test |
147/147 |
| pageerror · 콘솔 에러 · 서버 쓰기 | 0 · 0 · 0 |
- 런7 = 질감 로딩 칩 · 실패 재시도 · 망 복구 자동 로드 · 선택 발광 클론 · 회색 칼라 유지 전부 PASS(질감 적용은 7-9~7-12).
- 비로그인:
/production/pncad/photo.js·tex/oak_g.jpg·data/finish-map.json전부 로그인 페이지 HTML(200 · 데이터 0줄) — 자산 노출 없음.
스크린샷
C:\dev\_work\pncad-photo-1012\test_real_on.png— 테스트 서버?forcereal실사 켠 화면(작업본 칼라가 흰색이라 결은 안 보임 · 질감 적용 검증은 E2E 7-9~7-12).C:\dev\_work\pncad-photo-1012\photo_still_done_test.png— 렌더 스틸 완료 화면.C:\dev\_work\pncad-photo-1012\tex_real_close.png— 로컬 오크 결 근접.
사이트맵
build_sitemap.py --dump= 그룹 8 · 페이지 64 · 미반영 1 · 공용API 6 →C:\dev\devplan\pfs-sitemap.html. 미반영 1건이 이번 파일인지는 미확인. pfs 의 sitemap 파일은 타 세션이 변경 중이라 커밋하지 않았다.
함정
- 이번 배포에서 새로 확정된 6건 = 위 「함정」 절 9~14번.
미결 · 페페 확인 (갱신)
- ⏳[페페] 실제 GPU PC(사무실 · 노트북)에서 프레임 · 「보통/최고」 렌더 시간 — 헤드리스는 SwiftShader 라 fps 검증 불가.
TUNE(exposure .75 / sun 3.8 / env .4 — 헤드리스 눈대중) 재조정도 이때. - ⏳[페페] 안드로이드 PNG 내려받기 미검증.
- ⏳[페페] PMREM · 톤매핑을 편집 화면에도 상시 적용할지(opus 안) — 지금은 실사 켠 동안만.
- ⏳[페페] walnut · dark_wood 정규화 미달(0.816 · 0.629 vs 목표 0.88 · ×5 클램프) — 보완 필요 여부.
- ⏳[페페] 경로추적 v2 —
photo-pt.js(8fbb510) 준비됨 · app.html 미연결. 사무실 PC 실기에서 D3D11 순백 깨짐 확인 선행. - ⏳[페페] 운영배포 여부(지시: 추후 검토). 운영 때는 deploy-live + 같이 master push(기본 지침) → 사이트맵 재빌드로 미반영(주황) 걷힘 확인.
- 사람 눈: 실사 켠 화면의 질감 · 그림자 인상 · 벽 토글 켬(불투명 연한 벽) 결정.
다음 (갱신)
- 페페 육안 + 실기 GPU 측정 →
TUNE재조정(실사 모드 v1 마무리). - 운영배포 판단 — 페페가 채팅에 직접 지시했을 때만 deploy-live.
- 5개 E2E 에
PNCAD_LOCAL_BASE/PNCAD_LOCAL_APPenv 지원 추가(함정 9 근본 처방). - 경로추적 v2 연결 · 텍스처 보완(walnut · dark_wood).