You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
look: solve the hero backlight against the terrain, stop AA erasing the eave
The entry settle frame had almost no rim. Attribution, measured:
1. The landing pinned the sun to the hero's back (rotY + pi + 55 deg), but
baesan-imsu puts a mountain there. Measured on vseed 20260716: sun
elevation 9.51 deg against a 16.59 deg terrain horizon on that bearing —
the sun sat 7.08 deg *below* the ridge, so no direct light reached the
compound at all and rim.js `_directGate` started pinned at its 0.45
shadow floor. Ridge profiles differ per seed, so no constant survives;
src/env/hero-sun.js now solves azimuth and elevation together against
the site, scoring the two gates that actually make the rim (altitude x
backlit) and raising the sun only as far as clearing the ridge needs.
Flat sites keep the profile elevation unchanged (identity path).
2. The Fresnel AA damp deleted the silhouette it exists to draw — a
silhouette is by definition where ndv changes fastest. Measured at the
hero settle (7 deg lens, 146 m): mean _aa 0.491 with 42.9% of silhouette
triangles fully dead, readable fraction 0.803 -> 0.459. The two geometric
cutoffs now attenuate to a floor instead of zeroing; the energy-conserving
Toksvig term still does the real anti-aliasing.
3. Tile fields carry no rim by design, so the eave gold lives on the eave
band alone — 2-3 px in that telephoto frame. It gets its own multiplier
through the existing per-material uniform (no new program family). The
discrete eave-end ornaments are excluded: at the same multiplier the ridge
read as a dotted gold line, which is the stipple the AA layer exists to
prevent.
The sun solve also runs after the framing is known, so its backlit term uses
the real settle azimuth (13.8 deg off rotY) instead of assuming the camera
stands on the house axis.
Gate: npm run check:hero-sun (pure, carries a FAIL-first fixture that
reproduces the occluded legacy constant). check:rim confirms the program
family plateau is unchanged (6 -> 6, one canonical LOD program).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|`tools/verify-gltf.mjs`| FULL/FAR 카메라 독립 export, scenery·transient focus 제외, commit된 일반집 overlay 포함과 대체 base LOD 제외, GLB 라운드트립·예산 | 기본 출력은 OS 임시 디렉터리이며 `CHEOMA_GLTF_OUT`으로 재지정할 수 있다. |
1132
1132
|`tools/check-rim-facing.mjs`| 실제 WebGL에서 N·V 실루엣, 실제 태양 N·L, V·L 역광, directDiffuse=0·그림자·제품형 비그림자 fill·`receiveShadow=false` 반례, 50% penumbra 비율, 실제 cloud-shadow callback/cache-key 합성, plain/LOD cloud+snow+rim 프로그램 공유(R8 diet)와 동차 `worldPosition` 복원, cloud/snow 단독 install이 rim 전에도 screen-door token을 갖는지, 추가 shadow fetch 0, HDR 에너지 상한, instanceColor·program plateau; `--app`은 시간을 멈춘 최종 24° 석양 focus에서 실제 마을 cloud+rim 지붕과 OFF/ON A/B | 고정 fixture와 대표 실앱 한 장이 모든 seed·재질의 미학을 대신하지 않는다. |
|`tools/check-hero-sun.mjs`| 히어로 랜딩 역광 태양 해(`src/env/hero-sun.js`) 순수 계약. 배산임수 픽스처(배면 능선 25.3°·+55° 15.5°·+90° 10.1°)에서 (1) **FAIL-first**: 종전 상수 `rotY + π + 55°` 가 같은 픽스처에서 실제로 가려짐(지형 수평선 15.48° > 석양 9.51°)을 재현하고, (2) 해가 능선을 넘긴다(clearance ≥ ridgeMargin), (3) 오프셋이 배면 대역 [35°,115°] 안이고 고도가 프로필 이상·22° 이하, (4) rim.js 역광 게이트 ≥0.60 이며 점수가 종전 상수(그림자 바닥값 0.45 포함)보다 높다, (5) **평지 항등 경로** — 넘길 능선이 없으면 고도를 올리지 않는다, (6) 수평선 산출이 해석해와 일치, (7) 고도 게이트가 post.js 저고도 램프와 같다 | 순수 노드(브라우저 없음). `npm run check:hero-sun`. 실제 프레임의 처마 금빛은 `check:rim`(프로그램 계열·계수)과 진입 캡처가 맡는다. |
1134
1135
| `tools/check-rim-master.mjs` | #35-1 순수 계약: (1) 실제 `createFocusPolicyRuntime` 에 `setPostFocus(false)` 를 걸어 부감·시네마틱 정책이 `setRimEnabled(false)` 를 부르지 않고 `RIM_CONTEXT_MASTER.aerial > 0` 만 다이얼하는지(flare OFF·DoF 0 은 유지, focus 는 1.0 불변, dofAmount 단독 호출이 마스터를 흐트리지 않음), (2) `rimDistanceGate` 가 실측 부감 프레이밍(한양 crane-in 464m·pullback 432m·capital·village)에서 피사체 거리 페이드 ≥0.60 을 남기고 렌즈 밴드를 **확장만** 하는지(근경 60m·히어로 170m 무회귀, 비정상 입력은 렌즈 밴드로 폴백), (3) sunset 역광 처마 프래그먼트의 가산이 authored 피크의 ≥6% 이고 정오(altGate 0)에서는 정확히 0, 부감 수관(organic)이 건물 아래인지. post.js·engine.js 접합 2줄은 소스 계약으로 확인 | GL 없이는 실제 `uRimScale` 값을 못 읽으므로 살아 있는 유니폼·프로그램 수는 `tools/shoot-rim-aerial.mjs` 가 확인한다. `CHEOMA_RIM_ROOT` 로 다른 트리(예: `git archive HEAD`)를 가리켜 FAIL-first 를 재현할 수 있다. |
1135
1136
| `tools/check-fog-wash.mjs` | #35-R2 순수 계약(네 노을 프로필 gold·crimson·violet·dawn 전부): (1) 저작 축 — `fog` 의 HSL 채도 ≤0.25 와 선형 휘도 ≤ 그 프로필 표면 휘도 중앙값의 4배, (2) 워시 — 마을 부감 최대 대기 혼합비 `fogFactor 0.456` 에서 대표 알베도 12종의 채도가중 색상 표준편차 ≥25°, hue 320~30° 대역 점유 ≤6/12, (3) 암부 중립 — 중성 알베도(화강암·회벽)가 대기에서 얻는 채도 증가 ≤+0.06, (4) 부감 돔 구배 — `sky.js` `DOME_HAZE` 를 소스에서 읽어 pos 0.44~0.52 밴드가 제품 부감 렌즈(46°/1080행) 기준 100행당 **+**1.5 이상 단조 증가(무구배 밝은 평면 금지). 마을 조명 리그는 미러 + 드리프트 단언 | `<fog_fragment>` 선형 mix·캔버스 그라디언트·GradePass·ACES 를 해석적으로 재현하므로 GL 이 필요 없다. 실제 프레임의 대기 원근·능선 겹침은 `shoot:cine`·`shoot:village-light` 가 맡는다. FAIL-first 재현: 소스 사본에서 fog 를 `be6c74`/`a8788f`/`91859c`/`e4cfbd` 로, `DOME_HAZE` 를 0.28/0.74/0.96 으로 되돌리면 20건이 실패한다. |
1136
1137
|`tools/check-celestial.mjs`|#53 천체 순수 계약: 태양 원반 림 다크닝·저고도 편평화/확대, 달 위상각·조명 방향·가시 조명 면적·터미네이터·지구조, 별 시드 재현성·등급 멱법칙·반구·시간대 페이드, 은하수 페이드, `SUN_BAND` 밤 배율, `sky.js` 배선 정합 | 순수 노드(브라우저 없음). `npm run check:celestial`. 픽셀·미감은 `shoot:sky`가 맡는다. |
0 commit comments