Skip to content

Canyon museum lighting — the NatGeo art direction (skin relight + river protagonist)#102

Merged
AdaWorldAPI merged 1 commit into
mainfrom
claude/canyon-museum-light
Jul 13, 2026
Merged

Canyon museum lighting — the NatGeo art direction (skin relight + river protagonist)#102
AdaWorldAPI merged 1 commit into
mainfrom
claude/canyon-museum-light

Conversation

@AdaWorldAPI

@AdaWorldAPI AdaWorldAPI commented Jul 13, 2026

Copy link
Copy Markdown
Owner

"Stop thinking like a GIS, start thinking like a landscape photographer. … Don't optimize against Google Maps. Optimize against National Geographic." — the operator's art-direction brief

The remaining work wasn't more geometry — it was art direction. This round replaces the ver-9 skin's flat orbit-light (0.80 + 0.32·ndl) with museum lighting, and makes the Colorado the protagonist.

Shader (GeoHelix VERT, uSkin branch)

  • Museum light — warm morning key (wrap diffuse), weak cool sky fill, and a warm umber shadow floor (0.46,0.33,0.26 — reddish-black, never grey). The canyon glows in its own bounce light.
  • Terrain first, imagery second — partial de-light: the photo's baked-in orbital luma is pulled 50% toward a mid reference (gain clamped [0.7,1.9] so dark pine stays deep, not lime) and our key re-shades the surfel form; the satellite palette remains as tint.
  • Colour separation — hue-preserving chroma ×1.20: cream limestone / ochre / orange sandstone / deep red strata split without cartooning.
  • Warm atmospheric perspective — distance lifts toward pale warm amber, never grey fog. Arizona's dry air; distant mesas stay readable.
  • The river is the only material with dynamic lightingaWet from the Garmin KIND grid; deep blue-green channel; riparian fringe at the Gouraud-feathered banks; two view-dependent Blinn lobes (pow 80 sun-path + pow 420 sparkle) that slide along the bends as the camera orbits. Sandstone stays matte — a few moving glints read as living water, no animation needed.

Bake (garmin_bake.rs)

  • --crop KIND registration fix — the kind grid was rasterized against the full-tile bbox on a cropped grid (misregistered; invisible while the skin covered it). A deg→mu kbbox from the crop window now feeds kind_grid/river_fill_grid.
  • Connected-component river filter (≥25 cells) before the ×2 widening — Garmin's 0x4c class also stamps hundreds of 1–4-cell flecks across the plateau; at altitude the region must read dry, so only the Colorado ribbon gets the river material (flecks fall through to the still-water subtle class: 21k cells demoted at full res).

Asset

Canyon rebaked from the hue-preserving-brightened demgrid (operator: colour "a little on the dark side" — satellite haze + atmospheric degradation vs the eye's idealized diffuse morning light): global luma p2→p98 stretch to [12,242] (NOT per-channel — that would grey the red rock), gamma 0.94 shadow-open, sat ×1.12, warm bias. Luma mean 108→139, red-rock ratio kept (R155>G140>B89). 38.6 MB gz.

Verification

  • Three headless iterations on a 643k proxy: strata separation ✓, warm umber shadows ✓, dry plateau (confetti eliminated across two root-cause fixes) ✓, deep pine forest ✓, river meanders in blue-green ✓. Glint motion is view-dependent — best seen live on the deploy by orbiting.
  • cargo build --release -p geo-hhtl ✓ · npx tsc --noEmit ✓ · npm run build

Follow-ups

  • River continuity: 0x4c river-fill rasterizes the thin inner-gorge reaches sub-cell (dashed); width-stamped polyline rasterization would give continuous material coverage.
  • Release-hosted assets (session cannot create Releases — proxy-blocked; needs an operator-created release, then I wire the Dockerfile pull + git rm the blobs).
  • Same relight applies to Havel/Iceland skins automatically (shared shader) — Havel gets its glints once a water mask lands (no Garmin KIND there; imagery-based detection is the follow-up).

🤖 Generated with Claude Code


Generated by Claude Code

Summary by CodeRabbit

  • New Features

    • Introduced a museum-inspired lighting treatment for satellite terrain, with warmer atmosphere, enhanced geological depth, and improved relief presentation.
    • Added dynamic river lighting with water highlights, bank blending, and view-dependent sparkle.
    • Improved river and lake rendering by filtering isolated water artifacts and preserving broader river channels.
  • Bug Fixes

    • Corrected river, lake, and forest alignment when generating cropped terrain views.

…ction

"Stop thinking like a GIS, start thinking like a landscape photographer.
Don't optimize against Google Maps. Optimize against National Geographic."
(operator brief, 2026-07-10). The remaining work wasn't more geometry — it
was art direction. Six directives + the river as protagonist:

GeoHelix VERT, uSkin branch (replaces the flat 0.80+0.32*ndl orbit light):
- MUSEUM LIGHT: warm morning key (wrap diffuse), WEAK cool sky fill, and a
  WARM UMBER shadow floor (0.46,0.33,0.26 — reddish-black, never grey);
  the canyon glows in its own bounce light.
- TERRAIN FIRST: partial DE-LIGHT — the photo's baked-in orbital luma is
  pulled 50% toward a mid reference (gain clamped [0.7,1.9] so dark pine
  stays deep, not lime) and OUR key re-shades the surfel form; the
  satellite palette remains as tint.
- COLOUR SEPARATION: hue-preserving chroma x1.20 — cream limestone /
  ochre / orange sandstone / deep red strata split without cartooning.
- WARM ATMOSPHERIC PERSPECTIVE: distance lifts toward pale warm amber,
  never grey fog — Arizona's dry air; distant mesas stay readable.
- THE RIVER IS THE PROTAGONIST — the only material with dynamic lighting:
  aWet vertex attribute from the Garmin KIND grid, deep blue-green channel,
  riparian fringe at the Gouraud-feathered banks, and two view-dependent
  Blinn lobes (pow 80 sun-path + pow 420 sparkle) that slide along the
  bends as the camera orbits. Sandstone stays matte.

decodeGrid: per-vertex wets from the palette's blue-dominant KIND slot
(LAKE_SUBTLE stays below threshold by design) + a morphological opening.

garmin_bake:
- --crop KIND registration fix: the kind grid was rasterized against the
  FULL tile bbox on a cropped grid (misregistered — invisible while the
  skin covered it). A deg->mu kbbox from the crop window now feeds
  kind_grid/river_fill_grid, so Water lands on the real Colorado.
- Connected-component river filter (>=25 cells) before the x2 widening:
  Garmin 0x4c also stamps hundreds of 1-4-cell flecks across the plateau;
  at altitude the region must read DRY, so only the ribbon gets the river
  material — flecks fall through to the still-water subtle class.

Asset: canyon rebaked from the hue-preserving-brightened demgrid (global
luma p2->p98 stretch to [12,242], gamma 0.94 shadow-open, sat x1.12, warm
bias — luma mean 108->139, R>G>B red-rock ratio kept; the operator's "a
little on the dark side" + homunculus-morning-light read). 38.6 MB gz.

Verified headless across three iterations (643k proxy): strata separation,
warm shadows, dry plateau (confetti eliminated), deep pine forest, river
meanders in blue-green. Follow-up noted: width-stamped polyline
rasterization for continuous river-material coverage in the thin gorge.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012jEwwaT5JZ5x8qWvcnaMYC
@cursor

cursor Bot commented Jul 13, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_4928fa2b-8f14-457a-a9b1-260a05760730)

@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7b9ac40f-4ab6-4cba-a74b-5b91fcf68516

📥 Commits

Reviewing files that changed from the base of the PR and between 343d2f0 and 9609e37.

⛔ Files ignored due to path filters (1)
  • cockpit/public/canyon.v8grid.soa.gz is excluded by !**/*.gz
📒 Files selected for processing (3)
  • claude-notes/plans/2026-07-10-garmin-dem-satellite-skin.md
  • cockpit/src/GeoHelix.tsx
  • geo/src/bin/garmin_bake.rs

📝 Walkthrough

Walkthrough

The change adds crop-aware Garmin KIND rasterization, filters arid river components before dilation, derives per-vertex wet masks in decodeGrid, and applies river-specific ver-9 terrain shader lighting through the new aWet attribute.

Changes

Ver-9 river material pipeline

Layer / File(s) Summary
Crop-aware Garmin river rasterization
geo/src/bin/garmin_bake.rs
KIND overlays use crop-adjusted bounds, and arid river dilation now operates only on connected components containing at least 25 cells.
Wet vertex mask decoding
cockpit/src/GeoHelix.tsx
decodeGrid derives and morphologically cleans per-vertex water flags, returning them through the optional wets buffer.
River-specific terrain lighting
cockpit/src/GeoHelix.tsx, claude-notes/plans/...
The ver-9 shader uses aWet for channel, bank, tint, and view-dependent highlight effects; geometry binds wet data or a zero fallback, and the lighting plan documents the associated direction.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

  • AdaWorldAPI/q2#96: Both modify water-related vertex shader lighting in GeoHelix.tsx.
  • AdaWorldAPI/q2#97: Both update arid Garmin river handling and related shader behavior.
  • AdaWorldAPI/q2#98: Both extend Garmin river/lake handling across baking and cockpit rendering.

Sequence Diagram(s)

sequenceDiagram
  participant garmin_bake
  participant decodeGrid
  participant Terrain vertex shader
  garmin_bake->>decodeGrid: crop-aligned KIND and filtered river data
  decodeGrid->>decodeGrid: derive and clean wets mask
  decodeGrid->>Terrain vertex shader: bind aWet vertex attribute
  Terrain vertex shader->>Terrain vertex shader: compute river and bank lighting
Loading

Poem

I hop through wet masks, bright and spry,
Where river glints beneath the sky.
Cropped grids align, stray flecks depart,
Warm museum light gives maps their art.
— A pleased little rabbit 🐇

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately captures the main change: canyon museum-style relighting with the river as the visual focus.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint install failed: one or more packages not found in the registry.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@AdaWorldAPI AdaWorldAPI merged commit 643884a into main Jul 13, 2026
4 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants