cockpit: /ice Iceland scene — height-profile terrain palette, sky, Kurvenlineal breathing#88
Conversation
Add a dedicated /ice route rendering the EXISTING Iceland helix bake (iceland_latest = iceland.helix.soa.gz, already in the manifest) through the same BodyHelix Signed360 decoder — equivalent to /helix?scene=iceland, but a home with height-profile beautification. Client-side render only: no re-bake, no new network fetch. What changed: - Route: /ice → <BodyHelix /> in main.tsx, next to /geo. - Scene-helper unification: the path→scene mapping (/geo→osm, /ice→iceland) now lives in ONE pathScene() helper, read by BOTH fetchSoa() (which bake to load) and isGeoScene (whether to disable server LOD + light the geo beautification), so the two resolvers can never disagree — the file's own comment demanded this. `?scene=<name>` still overrides. - Height-profile terrain palette (geo-scene-gated via a uGeo uniform): colour is driven by per-vertex elevation (display.y), normalized against the ACTUAL measured [uYMin,uYMax] (the Iceland bake is true-scale, not exaggerated — span ~0.0074 with 39% ocean at exactly 0 and a heavily quantized lowland plateau, so [-1,1] normalization would flatten it to all-water) with a sqrt curve to spread the skewed highland tail. Bands: ocean (deep blue) → coast/moss-tundra (the dominant quantized lowland) → brown rock → grey scree → white/pale ice cap, plus a subtle warm "volcano" accent in the mid-high band. Water is separated cleanly at the exact-0 ocean vs first-land boundary. - Colour is HEIGHT-ONLY on purpose: the decoded Signed360 normal is bimodal for the geo bake (measured 77% |n.y|≈0 / 23% ≈1), so it is not a usable continuous slope — classifying rock/scree/volcano from it would produce a binary patchwork. The shade lighting term still uses the normal for form. - Geo relief: a uExag geometry-raise so the true-scale island reads as terrain off the y=0 sea plane, plus a 3/4 default camera for geo scenes. - Procedural sky dome (geo only): a large BackSide sphere with a vertical horizon→zenith gradient shader, rendered first (renderOrder −1, depthWrite off) so terrain paints over it. No external asset (CSP blocks CDNs). - Gating leaves anatomy byte-identical: uGeo==0 → exactly the pre-existing `aColor * shade` and uExag==1 → position unchanged; the sky dome and geo camera are added only when isGeoScene; non-geo scenes keep PAGE_BG. Honest note: true volcano / lava-field / glacier feature classification needs a DEM re-bake carrying feature layers; the warm "volcano" band here is a deliberately-subtle height-derived accent approximation. Verified: `npm run build` (tsc + vite) passes clean; a headless swiftshader-WebGL Playwright screenshot of /ice shows the sky gradient and the Iceland relief with elevation-varied colour; /helix keeps its unchanged title and same graceful behaviour (its body bake is a release-only asset, absent locally). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012jEwwaT5JZ5x8qWvcnaMYC
Wires the helix::CurveRuler stride-4-over-17 phase (the sculpt crate's kurvenlineal) into the geo terrain shader as a GLSL port. Not bit-exact to the Rust CurveRuler (it walks a u64 place with integer mixing; here we hash floats), but faithful in spirit: a deterministic bipolar phase regenerated from each vertex's lattice address — "phase is convention, not data". Two effects, geo-scenes only (anatomy stays byte-identical: uRuler/uTime 0): - synthesised relief detail where the sparse DEM bake has gaps, so the terrain reads as a living surface instead of a flat scatter; - breathing: uTime advances every frame and modulates the phase, so the horizon gently breathes — a mental horizon that motivates the next, DEM-true improvement (per the operator's steer). Geo scenes now render continuously (rAF) to animate; anatomy stays fully on-demand (uTime 0, dirty-gating untouched — no idle cost). Builds clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012jEwwaT5JZ5x8qWvcnaMYC
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Warning Review limit reached
Next review available in: 11 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
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. Comment |
A dedicated
/iceroute rendering the Iceland helix bake with height-profile beautification — a sibling to/geo, gated so every anatomy scene (/body,/helix,/torso*,/fma*) stays byte-identical.What's in
/iceroute + a singlepathScene()helper unifying the two scene resolvers (/geo→osm,/ice→iceland) so the bake-URL and LOD-disable paths can never disagree.position.y, normalized against the bake's actual measured[yMin,yMax](the Iceland bake is true-scale — span ~0.0074 — so [-1,1] normalization would flatten it to all-water) with a sqrt curve for the skewed distribution (39% ocean at exactly 0, ~58% quantized lowland). Bands: ocean → coast/moss → rock → scree → glacier-ice, plus a subtle warm volcanic-highland accent.helix::CurveRulerstride-4-over-17) ported to GLSL: a deterministic per-vertex phase that (a) synthesises relief detail where the sparse DEM bake has gaps and (b) breathes over time — the horizon gently undulates. Not bit-exact to the RustCurveRuler(float hash vs u64 integer walk); faithful in spirit ("phase is convention, not data"), per the operator's steer to open marvelous visuals now and motivate the DEM-true improvement next.Gating
Anatomy scenes:
uGeo==0 → aColor*shade,uExag/uRuler/uTime==0/1 → position untouched,PAGE_BGbackground, fully on-demand rendering. Geo scenes add the palette, sky, aerial camera, and continuous rAF (for the breathing). Zero change to non-geo visuals or idle cost.Verified
cd cockpit && npm run build(tsc + vite) clean across every iteration. Static frames (headless swiftshader) confirmed the sky gradient, aerial framing, and Iceland silhouette; the Kurvenlineal breathing is live (it's literally what makes the animated canvas never idle).Honest limitation (follow-on in this PR)
The existing
iceland.helix.soa.gzis a sparse, OSM-style point bake (137K discrete "structures", quantized elevation, no feature layers) — so the beautification paints a faint scatter, not solid terrain. A follow-on commit replaces the bake with a real Iceland DEM heightfield (added as a new file, existing bake preserved) so the palette + relief + breathing land on a solid landscape. The shader work here needs zero change when that lands.🤖 Generated with Claude Code
Generated by Claude Code