Index
2026-09-18 — Experiment

Cycles source RGBA/UV 바인딩 전이 — binding correctness PASS, photometry FAIL

R2S | importer fidelity branch, job 133762

TL;DR

12/12
binding tests PASS
FAIL
photometric gate
00:01:16
job 133762 runtime

1 배경 / 목적

같은 날 앞서 진행된 table_radiance(재질 emission scalar 튜닝, 2단계 모두 REJECTED)와 semantic_wall_ownership(mesh 소유권 재분류 diagnostic, NO-GO) 두 branch가 모두 소진되면서, 남은 방향은 "재질/텍스처 수치를 손대지 않고 importer 자체의 색상 매핑을 정확하게 만드는 것"으로 좁혀졌다.

기존 frozen r2s/cycles_render.py importer는 geom 이름 문자열(lime/orange/tan 등) 휴리스틱으로 색을 추정하고, MuJoCo가 실제로 계산한 material-effective RGBA나 mesh UV를 전혀 참조하지 않는다. 이 실험은 "native RGBA·UV를 그대로 전이하면 색상 오차가 줄어드는가"를 실측으로 검증한다.

기존 한계: importer가 8개 텍스처 mesh(table, cabinet101/103, wall107, Foundation108/109 등)에 대해 실제 material-effective RGBA/UV를 무시하고 이름 기반 색상 근사만 사용 — 색상 오차의 근본 원인 후보로 지목됨.

2 작업 내용

Architect/Critic 순차 리뷰(plan SHA 0e1a9504f2..., APPROVE)를 거쳐 구현. frozen cycles_render.py와 foundation_radiance_preview_v3.py는 수정하지 않고 재사용만 한다.

신규: r2s/cycles_source_bindings.py, tests/test_cycles_source_bindings.py, scripts/cycles_source_bindings.sbatch, reports/cycles_source_bindings.md 전이 대상: compiled mjv_updateScene에서 얻은 native effective RGBA (예: collision block geom92/94 = orange RGBA [.478,.216,.125,1], teal [.055,.2,.2,1]) + 8개 textured mesh의 2D texture role/repeat/UV 그대로 전이 주의: compiled texture colorspace는 LINEAR, 캡션에서는 "display-sRGB 해석"임을 명시 — 측정된 albedo로 주장하지 않음 Foundation mesh는 기존 frozen camera-only emission 그대로 유지, 다른 metallic/roughness/light/emission 가설은 손대지 않음(전체 PBR 동등화 아님)

첫 워커(job 133745)는 synthetic OBJ fixture가 완전 coplanar라 MuJoCo Qhull 컴파일 단계에서 ValueError: Error: qhull error / Element name 'q', id 0, line 1로 실패 — production 파라미터는 그대로 두고 fixture만 1mm saddle(2m quad)로 수정 후 재제출.

실행: CPU own 16코어/64GiB, 기존 개인 venv-render 사용. GPU/외부 API 없음.

3 결과 (job 133762)

COMPLETED 00:01:16, exit 0:0. 12개 테스트(OBJ→compiled UV→Cycles orientation, untextured/white/tinted RGB-transfer regression 포함) 전부 PASS. 1280×720, 64-sample 이미지 8장 생성, portable.html에 48개 PNG payload(4개 fullframe triplet + 36개 object crop) 직접 임베드.

항목 (row50, pooled channel)Frozen baselineSource-bound candidate판정
ext1 changed-owner (median/p95)26 / 9545 / 126악화
ext2 changed-owner (median/p95)34 / 11151 / 144악화
ext1 table (median/p95)22 / 8443 / 122악화
ext2 table (median/p95)29 / 10259 / 147악화
ext1 orange (median/p95)37 / 12423 / 53개선
ext2 orange (median/p95)45 / 128.825 / 61개선
ext1 green (median/p95)33 / 15521 / 68개선
ext2 green (median/p95)51 / 16824 / 67개선

독립 검증(main)이 71개 output hash / 115개 input hash / 48개 metric record / 36개 pixel-identical crop / 48개 embedded payload / 85개 native effective RGBA binding / 77개 changed geom ID를 재확인. 131916 저장 상태(row 9/50) exact 일치.

블록 색상 개선: collision block(orange/green) native RGBA 전이는 4개 케이스 모두 median/p95 동반 개선 — 이 부분은 importer 휴리스틱이 명확히 틀렸었다는 증거.
전체 게이트 FAIL: table/changed-owner 영역은 8개 케이스 전부 악화 — 사전등록 photometric gate FAIL로 후보 미채택, parent 131913 불변.

4 Takeaway

의미

"importer가 native RGBA/UV를 무시해서 색이 틀렸다"는 가설은 블록 색상에 한해서는 실측으로 맞았지만, table/장면 전체 오차의 주범은 아니었다. table_radiance(재질 scalar 튜닝, REJECTED) → semantic_wall_ownership(mesh 소유권 재분류, NO-GO) → cycles_source_bindings(importer RGBA/UV 매핑, FAIL) 세 방향이 같은 날 연속으로 모두 소진되면서, 남은 오차는 단일 파라미터 조정이 아니라 조명·노출·texture 해상도 등 더 근본적인 요인일 가능성이 높아졌다.

5 Next Steps

미해결 한계

table/전체 영역이 native RGBA 전이로 왜 악화되는지 원인 미규명. Non-Foundation mesh에 대한 source→compiled→Blender UV 전체 매핑이 실제 fixture로 검증되지 않았고, mat_texid role/tex_colorspace를 단순 RGB로 오인 처리하고 있을 가능성이 native researcher 인용에서 지적됨.

다음 실험

metallic/roughness/emission shader 전체를 재구성하는 방향이거나, 별도 evidence 기반 missing-surface 방법으로 전환 필요. Scalar tuning·mask 재분배·RGBA/UV 매핑 세 방향이 모두 소진된 만큼, 다음 branch는 "왜 table 영역만 악화되는가"에 대한 근본 원인 진단(diagnostic-first)으로 시작하는 것이 합리적.