docs(sky): shorten the sky comments and README, fix three stale ones

The far-plane comment said z = w (the code puts z just under w), the Milky
Way constant is a brightness, not an opacity, and the CDS acknowledgement
lives in the Data attribution popover, not DATA_SOURCES.md.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
German KhokhlovandClaude Opus 5.5 committed 2026-10-20 13:56:44 +04:00
1 parent b00c7c12c8
commit 8c33c6f349
9 files changed
+54 -92

No files matched your search

+2 -3
View File
@@ -118,9 +118,8 @@ export function applicationViewerOptions(creditContainer) {
selectionIndicator: false,
infoBox: false,
baseLayer: false,
// Instead of the default Tycho-2 cube map, whose JPEG blocks show around
// the whole globe. Passed here, not assigned later: `skyBox: false` would
// also stop CesiumWidget from creating the Sun and the Moon.
// Replaces the blocky Tycho-2 default. An option, not `skyBox: false`,
// which would also stop CesiumWidget from creating the Sun and Moon.
skyBox: new StarrySky(),
creditContainer,
msaaSamples: 4,
+23 -40
View File
@@ -1,9 +1,7 @@
# Sky background
The space behind the globe (`src/sky/starrySky.js`): catalogue stars drawn as
sharp point sprites over a soft Milky Way cube map. It replaces Cesium's
default Tycho-2 sky box, whose six 1024² JPEGs stretch 3–6× around the
whole-globe view and show compression blocks.
Catalogue stars over a soft Milky Way, drawn by `src/sky/starrySky.js` in
place of Cesium's blocky Tycho-2 sky box.
| File | Content | Size |
| ---- | ------- | ---- |
@@ -12,57 +10,42 @@ whole-globe view and show compression blocks.
## Stars — Yale Bright Star Catalogue
**Source:** Yale Bright Star Catalogue, 5th Revised Edition (Hoffleit &
Warren 1991), CDS VizieR catalogue
**Source:** 5th Revised Edition (Hoffleit & Warren 1991), CDS catalogue
[V/50](https://cdsarc.cds.unistra.fr/viz-bin/cat/V/50), file
`https://cdsarc.cds.unistra.fr/ftp/V/50/catalog.gz` (sha256
`3dc44b1e90be8fbe5bcc7656032560f51275f985c7e3f783c9028e1838ec7bed`, fetched
2026-10-19).
**License:** public domain (Yale University Observatory / NASA Astronomical
Data Center). CDS asks for an acknowledgement; the in-app "Data attribution"
popover carries it.
**License:** public domain. CDS asks for an acknowledgement; the "Data
attribution" popover carries it.
**Build:** `node scripts/build-bright-stars.mjs [catalog.gz]` — every record
with a J2000 position (14 novae and non-stellar entries dropped), RA/Dec
rounded to 0.001°, magnitudes to 0.01. The renderer maps magnitude to sprite
width and opacity and B−V to a desaturated black-body colour
(`src/sky/stars.js`).
**Build:** `node scripts/build-bright-stars.mjs [catalog.gz]`. Drops the 14
records without a J2000 position; rounds RA/Dec to 0.001° and magnitudes to
0.01.
## Milky Way — ESO/S. Brunier
**Source:** "The Milky Way panorama", ESO image
[eso0932a](https://www.eso.org/public/images/eso0932a/), full-size original
**Source:** ESO image [eso0932a](https://www.eso.org/public/images/eso0932a/),
`https://cdn.eso.org/images/original/eso0932a.tif` (6000×3000 sRGB TIFF, sha256
`10f209ab83e1fd89e7fa1ed70277ffc6ed19c43549f04ec637c6806d98aff035`, fetched
2026-10-19). Plate carrée in galactic coordinates, centred on the Galactic
Centre.
2026-10-19).
**License:** [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)
(<https://www.eso.org/public/outreach/copyright/>). **Credit: ESO/S. Brunier.**
**License:** [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).
**Credit: ESO/S. Brunier.**
**Changes made** (CC BY 4.0 asks for them to be stated): resampled to
4096×2048, stars removed with a 7×7 morphological opening, two planets
(Jupiter, by position) painted over with the median of the surrounding sky,
blurred (σ = 0.4°, blending to σ = 2° in the faint glow so unresolved
stars leave no clumps), reprojected from galactic coordinates to ICRF cube faces,
black level set at the median sky with a soft knee (the faint glow away
from the galactic plane fades to black), gamma-encoded and saved as
WebP. Build:
`node scripts/build-milky-way.mjs <eso0932a.tif>`.
**Changes made** (CC BY 4.0 asks for them): resampled to 4096×2048; stars
removed; two images of Jupiter painted over; blurred (0.4°, 2° in the faint
glow); reprojected to ICRF cube faces; black level at the median sky; saved as
WebP. Build: `node scripts/build-milky-way.mjs <eso0932a.tif>`.
The panorama is a photographic mosaic, not an astrometric map: bright stars
sit up to ~2° from their catalogue positions. That is invisible in a glow
blurred this much, and every sharp star on screen comes from the catalogue.
The panorama's stars sit up to ~2° off; that is invisible in the blurred glow,
and every sharp star comes from the catalogue.
The NASA SVS "Deep Star Maps 2020" Milky Way layer was considered and not
used: it is derived from Gaia DR2, which ESA distributes under CC BY-NC 3.0
IGO with prior authorization required for commercial use.
NASA SVS "Deep Star Maps 2020" was not used: it derives from Gaia DR2, which
ESA licenses CC BY-NC 3.0 IGO.
## Frame
Both layers are in ICRF/J2000. The cube faces use the standard WebGL face
layout with +X towards the March equinox and +Z towards the north celestial
pole, uploaded without `flipY`. At runtime one rotation —
`Transforms.computeIcrfToFixedMatrix` at the scene clock — turns both into
Earth-fixed coordinates.
Both layers are in ICRF/J2000. The cube faces use the WebGL face layout, +X
to the March equinox and +Z to the north celestial pole, uploaded without
`flipY`.
+3 -3
View File
@@ -12,7 +12,7 @@ import { buildStarVertices, STAR_VERTEX_FLOATS } from './stars.js';
*/
export const STARRY_SKY_CESIUM_VERSION = '1.138.0';
/** Opacity of the Milky Way glow over black; the stars carry the sky. */
/** Brightness of the Milky Way glow; the stars carry the sky. */
export const MILKY_WAY_INTENSITY = 0.4;
/** Clock change, in seconds, below which the sky rotation is reused. */
export const SKY_ROTATION_EPSILON_SECONDS = 1;
@@ -48,8 +48,8 @@ const MILKY_WAY_FACE_URLS = Object.freeze({
),
});
// Directions, not points: w = 0 drops the camera translation, and z = w puts
// every fragment on the far plane, inside the clip volume at any frustum.
// Directions, not points: w = 0 drops the camera translation, and z just
// under w keeps every fragment at the far plane, inside any frustum.
const SKY_DIRECTION_GLSL = `
uniform mat3 u_icrfToFixed;
vec4 skyClipPosition(vec3 icrfDirection)
+3 -7
View File
@@ -3,17 +3,13 @@
*
* Pure functions, no Cesium. The pack is `local_data/sky/bright_stars.json`
* (Yale Bright Star Catalogue, built by scripts/build-bright-stars.mjs): a
* flat `[raDeg, decDeg, vmag, bv, …]` array in ICRF/J2000.
*
* Every star is drawn as a point sprite holding a small Gaussian. Its width
* is set in CSS pixels and scaled by the device pixel ratio in the shader, so
* a star covers the same screen area at any DPR and stays a crisp dot rather
* than a texel stretched across several pixels.
* flat `[raDeg, decDeg, vmag, bv, …]` array in ICRF/J2000. Each star is a
* small Gaussian sprite, sized in CSS pixels so it stays a crisp dot at any DPR.
*
* @module sky/stars
*/
/** Faintest magnitude drawn distinctly (fainter catalogue stars look like it); the brightness reference. */
/** Brightness reference; fainter catalogue stars are drawn like it. */
export const STAR_LIMIT_MAGNITUDE = 6.5;
/** Gaussian σ of the faintest star, CSS pixels. */
export const STAR_MIN_SIGMA_PX = 0.55;
+1 -1
View File
@@ -93,7 +93,7 @@ test('plate carrée is centred on longitude 0, growing to the left, north up', (
});
test('the galactic rotation puts the Galactic Centre and pole where the IAU does', () => {
// Sgr A*-adjacent origin l = b = 0 at RA 266.405°, Dec −28.936° (J2000).
// Galactic origin l = b = 0 at RA 266.405°, Dec −28.936° (J2000).
const centre = icrfToGalactic(raDecToUnitVector(266.40499, -28.93617));
close(centre[0], 1, 1e-6);
// North galactic pole at RA 192.85948°, Dec +27.12825°.
+2 -4
View File
@@ -112,10 +112,8 @@ export class VisualEffects {
if (this.stopped || !stage) return;
stage.uniforms.intensity = value;
stage.enabled = value > 0.001;
// Anime's four luminance bands turn the faint Milky Way into blotches, and
// a post-process cannot tell the sky from far geometry reliably (near
// plane clamps, keyless terrain above the ellipsoid horizon): fade the
// glow out with the style instead. Bright stars survive as banded points.
// Anime's bands turn the faint Milky Way into blotches, and depth cannot
// tell the sky from far geometry, so the glow fades with the style.
if (stage === this.stages.anime)
this.viewer.scene.skyBox.milkyWayVisibility = 1 - value;
if (stage.enabled && stage.uniforms.time !== undefined)