Saturn moon textures, normal maps, and tidally-locked moon facing - #833
Merged
Merged
Conversation
… 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.
Deploying with
|
| 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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
monoTintgains anantimeridianCentredflag that rolls the 180°-centred maps (rollEquirectHalfTurn); Enceladus's surface output is byte-identical. Boot atlas grows to 21 tiles.tidallyLockedrotation 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.format: 'icq'); Enceladus from the Schenk & McKinnon 2024 DEM (format: 'floatDem', Float32 GeoTIFF). Each is registered to its texture by one measuredlonOffsetDeg. Per-body gains tuned by eye (mimas 64, tethys 15, dione 7, enceladus 8).Not in this PR
Verification
npm run typecheckclean.b1db9892cwith build output byte-identical.🤖 Generated with Claude Code