diff --git a/README.md b/README.md index 5bdd943..b3f9167 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ NASA figures behind it. This repo also hosts a small Claude Code plugin marketplace — see [Plugins](#plugins) below. +![The solar neighbourhood: 68 388 catalogued stars within 250 parsecs, on a polar grid lying in the galactic plane](docs/screenshots/galaxy-view.jpg) + ## Running it ```bash @@ -29,11 +31,13 @@ npm run e2e:typecheck **Galaxy view** — the HYG catalogue out to 250 parsecs, 68 388 stars, as instanced camera-facing billboards positioned from real RA/Dec/parallax, coloured by spectral index and -sized by magnitude. The field draws a budget of the most visible of them rather than all — see -"On how many stars" below. A polar grid in the galactic plane runs under them with a drop line -from each of the brightest, and names label the most prominent stars near whatever the camera is -looking at. -Behind them sits a backdrop of notable deep-sky objects and a Milky Way panorama. +sized by magnitude — all of them drawn, in one instanced call, with a budget in reserve for +catalogues larger than a GPU should be asked to hold at once (see "On how many stars" below). A +polar grid in the galactic plane runs under them with a drop line from each of the brightest, +and names label the most prominent stars near whatever the camera is looking at. Behind them +sits a backdrop of notable deep-sky objects and a Milky Way panorama. + +![The galactic scale: the Milky Way's bar, bulge and five spiral arms, with the Sun on the Orion Spur](docs/screenshots/galactic-view.jpg) **Galactic view** — keep pulling back and the neighbourhood becomes a point inside the Milky Way: the bar and bulge, five spiral arms, the disc and a thin halo, with the arms and the @@ -42,6 +46,8 @@ camera distance rather than switched, so the Sun stays where it really is — 8. Orion Spur, between the Sagittarius and Perseus arms. See "On the Galaxy model" below for what in it is measured and what is not. +![The solar system: orbit ellipses over a dashed reference grid marking 5 AU rings out to 35 AU](docs/screenshots/system-view.jpg) + **System view** — selecting a star flies the camera continuously into its system rather than cutting to a new scene. The Sun gets the real solar-system bodies from JPL Horizons; other stars get their confirmed exoplanets. Orbits are drawn as ellipses and bodies are propagated @@ -62,6 +68,8 @@ bright rather than that it is large. That floor is bounded from both sides — l the star reads at a glance, small enough that Venus's and Earth's orbits stay legible as rings around it. Mercury's, three pixels wide at that range, does not survive either way. +![51 Pegasi b: a surface derived from its measured mass, orbit and host-star luminosity, beside the figures it was derived from](docs/screenshots/body-detail.jpg) + **Body detail** — a dedicated close-up scene and info panel for one planet, moon or exoplanet, with real photography where NASA/ESA/USGS imagery exists, and a surface derived from the body's own measurements where it does not. See "On surfaces that were never photographed" below. @@ -69,6 +77,10 @@ own measurements where it does not. See "On surfaces that were never photographe **Search** — name search across stars, solar-system bodies and exoplanets, navigating to the same place an in-scene click would. +Screenshots are captured from a real run of the app at `docs/screenshots/`, and are regenerated +when the views they show change — the galactic one above records the catalogue size and reach in +its own readout, so a stale image is visible as one. + ### Architecture notes - **Rendering** runs on Three.js `WebGPURenderer`, which falls back to a WebGL2 backend diff --git a/docs/screenshots/body-detail.jpg b/docs/screenshots/body-detail.jpg new file mode 100644 index 0000000..c2a9c23 Binary files /dev/null and b/docs/screenshots/body-detail.jpg differ diff --git a/docs/screenshots/galactic-view.jpg b/docs/screenshots/galactic-view.jpg new file mode 100644 index 0000000..9c47e6b Binary files /dev/null and b/docs/screenshots/galactic-view.jpg differ diff --git a/docs/screenshots/galaxy-view.jpg b/docs/screenshots/galaxy-view.jpg new file mode 100644 index 0000000..85b5042 Binary files /dev/null and b/docs/screenshots/galaxy-view.jpg differ diff --git a/docs/screenshots/system-view.jpg b/docs/screenshots/system-view.jpg new file mode 100644 index 0000000..195bd04 Binary files /dev/null and b/docs/screenshots/system-view.jpg differ diff --git a/src/app/features/galaxy-system/galaxy-system-scene.component.ts b/src/app/features/galaxy-system/galaxy-system-scene.component.ts index acee83a..5df2651 100644 --- a/src/app/features/galaxy-system/galaxy-system-scene.component.ts +++ b/src/app/features/galaxy-system/galaxy-system-scene.component.ts @@ -421,8 +421,8 @@ export class GalaxySystemSceneComponent implements AfterViewInit, OnDestroy { } /** - * Blends between the two things that share parsec space: the catalogued 50 pc star field with - * its local grid, and the Milky Way model with its galactic one. Driven by how far the camera + * Blends between the two things that share parsec space: the catalogued star field with its + * local grid, and the Milky Way model with its galactic one. Driven by how far the camera * has pulled back from the Sun, so the scale ladder reports where the view already is instead * of switching it. */ @@ -572,7 +572,8 @@ export class GalaxySystemSceneComponent implements AfterViewInit, OnDestroy { { label: 'Arms modelled', value: `${MILKY_WAY_ARMS.length}` }, { label: 'Catalogued', value: `${this.stars.length} stars` } ]); - this.hudNote.set('Galactic structure is an illustrative model built on measured arm geometry — no catalogue holds the Galaxy’s stars. Everything inside 50 pc is real.'); + // Quotes the catalogue's own reach rather than a figure that has already been raised once. + this.hudNote.set(`Galactic structure is an illustrative model built on measured arm geometry — no catalogue holds the Galaxy’s stars. The ${this.stars.length} catalogued stars within ${LOCAL_GRID_RINGS_PC[LOCAL_GRID_RINGS_PC.length - 1]} pc are real.`); return; }