feat(renderer): spherical cloud shell ray marching (ADR-0041) #106

Merged
akadmin merged 1 commit from feat/cloud-spherical-shell into main 2026-07-10 11:58:12 +00:00
Owner

Implements #29: the flat cloud slab becomes a spherical shell around a planet centered at world (0, -R, 0), using the same origin-centered ray_sphere convention as the atmosphere pass (ADR-0032).

  • Clouds follow the curvature and sink into the horizon; rays hitting the planet sphere render no clouds (no clouds through the ground below the horizon).
  • Three camera cases: below (normal), inside, and above the layer - verified visually in the standalone runtime for all three, plus a grazing dusk sun.
  • CloudParams: bottom_y/top_y -> bottom_altitude/top_altitude (default 1500-4000 m, the ticket low-altitude layer) + planet_radius (default 200 km - the scene-scale knob; Earth real radius pushes the cloud horizon ~140 km out, past the march cap).
  • CloudPush grows to 64 bytes -> total push usage exactly the 128-byte Vulkan minimum; pipeline layout is shader-reflected, no Rust pipeline change.
  • Sun cone march (ADR-0040) exit swapped from plane math to the shell spheres; kernel/weighting/cheap path unchanged.
  • ADR-0041 + CLAUDE.md updated.

Deferred per the ADR: adaptive step counts (the 64 uniform steps band visibly on long in-layer paths - pre-existing class of artifact), second shell segment, real Earth radius.

🤖 Generated with Claude Code

Implements #29: the flat cloud slab becomes a spherical shell around a planet centered at world (0, -R, 0), using the same origin-centered ray_sphere convention as the atmosphere pass (ADR-0032). - Clouds follow the curvature and sink into the horizon; rays hitting the planet sphere render no clouds (no clouds through the ground below the horizon). - Three camera cases: below (normal), inside, and above the layer - verified visually in the standalone runtime for all three, plus a grazing dusk sun. - CloudParams: bottom_y/top_y -> bottom_altitude/top_altitude (default 1500-4000 m, the ticket low-altitude layer) + planet_radius (default 200 km - the scene-scale knob; Earth real radius pushes the cloud horizon ~140 km out, past the march cap). - CloudPush grows to 64 bytes -> total push usage exactly the 128-byte Vulkan minimum; pipeline layout is shader-reflected, no Rust pipeline change. - Sun cone march (ADR-0040) exit swapped from plane math to the shell spheres; kernel/weighting/cheap path unchanged. - ADR-0041 + CLAUDE.md updated. Deferred per the ADR: adaptive step counts (the 64 uniform steps band visibly on long in-layer paths - pre-existing class of artifact), second shell segment, real Earth radius. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(renderer): spherical cloud shell ray marching (ADR-0041)
All checks were successful
CI / build (pull_request) Successful in 3m19s
40eb08d5fb
Replace the flat cloud slab with a spherical shell around a planet
centered at world (0, -R, 0), same ray_sphere convention as the
atmosphere pass: clouds follow the curvature and sink into the horizon,
rays hitting the planet render no clouds, and the camera can be below,
inside, or above the layer. CloudParams gains planet_radius (200 km
scene-scale knob) and bottom/top become altitudes (1500-4000 m low
layer per issue #29); CloudPush grows to 64 bytes (128 total, exactly
the Vulkan push-constant minimum).

Closes #29

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
akadmin deleted branch feat/cloud-spherical-shell 2026-07-10 11:58:12 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
akadmin/NemesisEngine!106
No description provided.