Skip to content

Saturn moon textures, normal maps, and tidally-locked moon facing - #833

Merged
rulkens merged 10 commits into
mainfrom
worktree-saturn-moon-textures
Oct 4, 2026
Merged

rulkens merged 10 commits into
mainfrom
worktree-saturn-moon-textures

Conversation

@rulkens

@rulkens rulkens commented Oct 3, 2026 •

Copy link
Copy Markdown
Owner

What

  • Textures for Mimas, Tethys, Dione, Rhea and Iapetus from the 2014 Cassini colour maps (NASA Photojournal PIA18434/36/37/38/39), greyed and tinted like Enceladus. Chosen over the USGS Cassini mosaics, which normalise brightness and lose Iapetus's dark hemisphere. monoTint gains an antimeridianCentred flag that rolls the 180°-centred maps (rollEquirectHalfTurn); Enceladus's surface output is byte-identical. Boot atlas grows to 21 tiles.
  • Tidal lock. New tidallyLocked rotation arm: a synchronous moon keeps its IAU pole and points longitude 0 at its host. Applied to 13 moons (the Galileans, seven Saturn moons including Titan, Phobos, Deimos). Before, Tethys/Dione/Rhea/Iapetus sat 59–155° off at J2000; Titan, Phobos and Deimos had no rotation row at all, so the Sun never moved for a camera on their surface. All 13 now face their host within 1.6° at J2000 and +10 years.
  • Normal maps. Mimas, Tethys and Dione from Gaskell ICQ shape models (format: 'icq'); Enceladus from the Schenk & McKinnon 2024 DEM (format: 'floatDem', Float32 GeoTIFF). Each is registered to its texture by one measured lonOffsetDeg. Per-body gains tuned by eye (mimas 64, tethys 15, dione 7, enceladus 8).
  • Backlog. Two follow-ups filed: real relief displacement for near-spherical bodies, and the moon orbit-rate double count.

Not in this PR

  • The orbit-rate double count stays backlogged; the lock makes facing correct regardless.
  • The Moon, Pluto and Charon keep their IAU rows.
  • No shape model or DEM is public for Rhea or Iapetus, so they have no normal map.

Verification

  • Full suite: 1431 files, 14950 tests pass; npm run typecheck clean.
  • Deletion audit run on the whole branch; safe items applied in b1db9892c with build output byte-identical.
  • Eye-checked in the app: normal maps for Mimas, Tethys, Dione, Enceladus; the Sun moving from Titan's surface.

🤖 Generated with Claude Code

claude and others added 2 commits October 3, 2026 19:10
… CICLOPS maps

Saturn's five mid-sized moons rendered as flat spheres. They now take Paul
Schenk's 2014 Cassini colour maps (NASA Photojournal PIA18434/36/37/38/39)
rather than the USGS Cassini mosaics: those are brightness-normalised relief
shading, so Iapetus's dark leading hemisphere vanishes from them entirely.

The CICLOPS colour is enhanced into the UV/IR, so `writeTintedMonoTier` now
greys its source (a no-op on the 1-band USGS mosaics; Enceladus's tier is
byte-identical) and takes the whole monoTint treatment. The maps are centred
on longitude 180° — each cross-correlates against its USGS counterpart at a
clean half-turn — so a new `antimeridianCentred` flag rolls them back via
`rollEquirectHalfTurn`. Tints/lifts land each moon's mean on its flat albedo;
Iapetus is anchored on its two terrains instead. Adds the NAIF pck00011 IAU
rotation rows; the boot atlas grows to 21 tiles (2048x1536).

Checking the result surfaced a pre-existing mismatch between the IAU spin rows
and the JPL orbit rows (Enceladus and Europa already drift off their lock), now
a backlog item with measurements.
A locked moon's facing came from its IAU W row while its position came from
its JPL orbit row, and the two disagree: Tethys, Dione, Rhea and Iapetus sat
59-155 deg off sub-Saturn at J2000, and Europa and Enceladus drifted ~120 and
~144 deg over a decade. A new `tidallyLocked` rotation arm keeps the IAU pole
and points longitude 0 at the host, for the ten Jupiter and Saturn moons; all
now read under 1.6 deg at J2000 and +10 yr. The Moon, Pluto and Charon keep
their IAU rows. The orbit-rate double count behind the drift stays backlogged.
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Oct 3, 2026 •

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
skymap 16d85f3 Commit Preview URL

Branch Preview URL
Oct 04 2026, 08:05 AM

Mimas has the largest relief-to-radius ratio of the textured moons (Herschel
is ~10 km deep on a 198 km body) and no DEM, but PDS carries Gaskell's ICQ
shape model at ~0.6 km spacing. The build rasterises its point cloud to an
equirect radius grid and feeds the existing normal bake unquantised, since
8 bits over 23 km of radius would terrace. The shape frame runs 4 deg ahead
of the texture's in longitude (prime-meridian constants 337.46 vs 333.46;
measured 3.0-4.5 deg by correlation in all four quadrants), carried as
`lonOffsetDeg` on the source row. Real relief displacement is backlogged.
…ape models

Same path as Mimas: data rows only. Longitude offsets are measured against
the textures (Tethys -0.5 deg, Dione -0.6 deg); Tethys's differs from the
+1.5 deg its prime-meridian constants predict, so the measurement wins.
Gains put the 99th-percentile tilt near 36-37 deg, as for Mimas.
Enceladus's normal map is baked from the Schenk & McKinnon 2024 global DEM
(Float32 GeoTIFF, 200 m/px): binned to 4096x2048, nodata filled, rolled to the
prime-meridian-centred convention and registered by one lonOffsetDeg (0.35),
gain 8.

Tethys: gain 38 -> 15 (was overdone), and lonOffsetDeg -0.5 -> -0.1. The earlier
value came from correlating texture gradient against slope, which peaks to one
side of the true alignment; correlating brightness against slope gives -0.25 to
+0.13 across the four quadrants. Dione, Mimas and Enceladus re-measure the same
as baked.
Tuned by eye; p99 tilt 36 deg -> 16 deg, level with Tethys and Enceladus.
Titan had no rotation row, so its frame was the identity and the Sun never
moved for a camera on its surface. It is synchronous like the other ten moons;
the row-less identity tests now use Phobos.
Same stationary-Sun bug as Titan from their surfaces. Both are synchronous;
all thirteen locked moons face their host within 1.6 deg at J2000 and +10 yr.
Row-less identity stays pinned by the Galactic Centre tests.
Always-1 srcChannels param, a redundant loop counter, a duplicate 255
constant, one mirror test, hand-rolled dot/cross in a test, a duplicated
rationale comment. Also corrects the stale Tethys offset (-0.5 -> -0.1) in
the raw-data registry text. Build output is byte-identical.
@rulkens rulkens changed the title feat(bodies): texture five Saturn moons and lock moon facing to the orbit Saturn moon textures, normal maps, and tidally-locked moon facing Oct 4, 2026
@rulkens
rulkens marked this pull request as ready for review October 4, 2026 08:11
@rulkens
rulkens merged commit 53d00f4 into main Oct 4, 2026
2 checks passed
@rulkens
rulkens deleted the worktree-saturn-moon-textures branch October 4, 2026 08:22
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