ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Free solar system 3D simulator. Orbit the Sun and eight planets, switch to real distances or true scale, and inspect each world in your browser.
EducationJavaScript · HTMLGitHub @sweesamaOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Free interactive 3D solar system simulator in the browser: true-scale distances, real orbital periods, planet facts, Moon & Mars expeditions. Three.js.
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗A free, browser-based 3D Solar System visualization built with Three.js.
The project is an artistic educational visualization. It lets visitors rotate and zoom a 3D scene, select celestial objects, view basic reference data, follow a planet tour, share focused links, save a canvas snapshot, and copy an embed snippet.
It is not a live ephemeris or a professional astronomy simulator. Object sizes, distances, orbital periods, and animation speed are adjusted for visibility. Some textures and surface details are artistic or procedural.
Serve the repository through a local HTTP server; opening the HTML files directly may prevent browser workers or assets from loading correctly.
python -m http.server 8000
Then open http://localhost:8000/.
/?focus=Earth/?focus=Earth&embed=1/?quality=auto/?quality=balanced/?quality=low/?quality=highThe visible quality selector stores the visitor's preference locally. Auto mode uses available memory, CPU, viewport, pixel-density, and data-saving signals without treating every phone as low-end. It can reduce render resolution and procedural asteroid load if measured performance remains poor.
?focus= and the planet navigation share one focus path: the camera flies to the object and then follows it (trackedObject), so moving bodies stay framed. Satellites keep the same close-up framing as planets (radius × 2.5); there is no separate widened framing.animate() frame, orbital positions have not been written yet, so initial focus runs updateOrbitalPosition() once over all bodies to place them before computing the camera destination.predictWorldPosition), so fast-moving moons do not get left behind mid-flight.The eight planet pages are generated from index.html and factual page data:
node generate_seo_pages.cjs
Validate public output after generation:
node validate_site.cjs
node --check main.js
Never hand-edit mercury.html … neptune.html: change index.html or the data in generate_seo_pages.cjs (intro, quick facts, featured expedition card) and regenerate.
<article id="about"> holds two versions: .lang-en and .lang-zh. moon.css shows only the one matching <html lang>, which the page's language button sets. The arrival-card cue link has the same pair of spans.expedition-dust.js (ExpeditionDust.create) holds the footstep and landing dust used by the Moon, Mars, Venus and Mercury expeditions. Each page passes in its own colour, opacity, gravity, terrain sampler and optional wind drift; the spawning, arc, ground contact, fading and disposal logic lives once. Load it before the engine script.expedition-look.js (ExpeditionLook.applyDrag) is the drag-to-look maths used by all eight expeditions: sensitivity, yaw wrap-around and pitch limits in one place. It is a pure function, so node can check it against the old formula (the maximum difference was 0).localStorage (mzu-time-scale).REAL_PERIODS in main.js (NASA fact sheets; tidally locked moons spin once per orbit). Bodies without table data (asteroids, comets, Kuiper objects) use Kepler's third law from their semi-major axis. Retrograde motion keeps its sign (Triton); Venus and Uranus get their backward/sideways spin from their axial tilt.localStorage (mzu-scale-mode):
AU_SCENE (40) scene units, so Neptune sits about 1,200 units out. Sizes stay enlarged.applyScaleMode() rescales orbit radii, orbit lines (scaled about the focus), body meshes (rings, clouds and atmospheres scale with their planet), the Sun and the Kuiper belt. Asteroids and comets keep their artistic size, or they would be invisible.*_marker sprites). Clicking a marker focuses that planet, and the marker hides once you are within about 40 radii of the planet.flyCameraToObject, shared by clicks and the guided tour) interpolate toward the target's live position every frame instead of a predicted end point. At true scale the camera stops only thousandths of a unit from a planet, so any prediction error would otherwise strand it far away. Flight distance is always 2.5× the body's current world radius.addEclipseShadows(material, occluders) in main.js injects a shader test: from each pixel, a ray toward the Sun (world origin) is checked against up to four occluding spheres, with a soft penumbra sized by the Sun's apparent radius. Planets receive their moons' shadows, moons receive their planet's, and ring systems receive their planet's shadow. updateEclipseShadows() refreshes occluder positions every frame. The old point-light cube shadow map (jagged edges, six extra scene renders per frame) is disabled.ShaderMaterial that honours the per-star size attribute, clamps on-screen size (no giant squares up close), draws a soft disc via gl_PointCoord, and adds a gentle per-star twinkle. Kuiper-belt and comet-tail points use a shared soft-dot texture (getSoftDotTexture()); any new PointsMaterial should be given a map, or it will render squares.fbm calls risks compile failures on some GPUs; note that active is a reserved GLSL word. The corona is a camera-facing plane (sunGlowSprite, kept by name for the occlusion logic) whose shader adds a bright inner rim, slowly outward-flowing streamers, a flickering spicule fringe at the limb, and occasional flame-like prominences.og/ (1200×630 JPEG): home.jpg, one per planet page (og/<planet>.jpg) and one per expedition (og/<planet>-expedition.jpg). Every page uses summary_large_image Twitter cards, og:image:width/height/alt, and the same URL as image/screenshot in its JSON-LD. To refresh an image, open the page at a 1200×630 viewport, enter photo mode (expeditions) or close the guide panel (planet pages), and screenshot.<article id="about"> (300+ words: intro, quick facts <dl>, five discoveries, controls, science vs. art, links to its planet page and the other seven expeditions). It sits below the full-screen scene; expedition-about.js lets visitors scroll to it only while the arrival card is showing and snaps back to the top when the expedition starts. The article is English only.articles in generate_seo_pages.cjs), citing NASA Science and the NASA Planetary Fact Sheet; the FAQs are mirrored as FAQPage JSON-LD. The homepage carries its own three-question FAQ between the PLANET-ARTICLE markers, which the generator swaps per planet.BreadcrumbList JSON-LD.llms.txt summarises every page with key facts for AI search engines; keep it in step with page content.lastmod and their share image. Update lastmod when a page changes; the validator rejects future dates and missing images.validate_site.cjs also fails if a page falls back to the logo as its share image, if an expedition loses its About article or planet link, or if analytics are missing.index.html: shared page shell and visible homepage copyquality-policy.js: testable automatic quality selection and render profilesmain.js: Three.js scene, interactions, runtime performance relief, and renderingstyle.css: responsive overlay and scene controlsgenerate_seo_pages.cjs: deterministic planet-page generatorvalidate_site.cjs: metadata, content, sitemap, and claim checksllms.txt and llms-full.txt: factual machine-readable product summariesThe repository contains code, textures, models, and third-party runtime dependencies from multiple sources. Do not assume every file has the same reuse terms. Keep source and attribution records for any external asset before redistributing it.
The public page is https://www.3dsolarsystem.net/moon.html. It is listed in sitemap.xml, linked from the homepage and generated planet pages, and includes indexable robots metadata, a canonical URL, Open Graph/Twitter cards, and WebApplication JSON-LD. Query-string preferences canonicalize to the same page; there are no separately indexed language pages. Sharing cards use the existing site logo. robots.txt already allows crawling and advertises the sitemap. These settings enable discovery but do not guarantee search-engine indexing or ranking.
Open http://localhost:8000/moon.html or use Step onto the Moon in the Solar System guide. This independent page does not load the orbital simulation. It needs no account, AI service, API key, or build step.
mzu-moon-discoveries-v1. Reloading restores the journal, not the astronaut's position. If browser storage is blocked or full, discoveries still work for the current visit and the interface says they are not saved. No account or server is required.Boulders, scattered rocks, gravel, and the lunar module use GLB models from the NASA 3D Resources repository (models/); if a model fails to load, the page falls back to procedurally generated geometry. The landscape and remaining materials are generated in the browser. Distant mountains have separate multi-scale rock shading and surface-normal detail, with fine detail faded at small screen sizes to limit shimmer. Regolith piles in soft fillets around rock bases, the ground carries small impact pits and sparse glass-bead-like glints (Apollo crews described the soil sparkling), and large boulders sit in shallow debris aprons. A faint additive glow band hugs the horizon toward the Sun (the levitating-dust horizon glow Apollo crews reported), boot prints are drawn with high-contrast tread, and Earth carries a gentle emissive boost so it reads as the brilliant object it is from the surface. Earth uses the existing Solar System Scope imagery (CC BY 4.0). Earth's apparent size and location are composed for the scene rather than calculated from an ephemeris. The experience intentionally has no wind audio.
Jump gravity is a constant 1.62 m/s², following NASA's average lunar surface value (https://www1.grc.nasa.gov/beginners-guide-to-aeronautics/moon/). Scene distances use metres. The chosen takeoff velocity of 1.8 m/s gives a rise of 1 metre and approximately 2.22 seconds aloft on level ground. Eye height is 1.68 m; walking and brisk walking are 1.55 m/s and 2.8 m/s. Takeoff strength, horizontal acceleration, gait animation, and landing dip are experience settings, not measurements of an astronaut in a specific spacesuit. Rocks currently use conservative horizontal collision bounds, so jumping onto or over large rocks is not supported.
Implementation: moon.html and moon.css provide the expedition interface, moon.js handles rendering and interaction, and lunar-terrain.js exposes deterministic terrain sampling and collision-aware movement through LunarTerrain. The terrain sampler uses the same triangle interpolation as the rendered ground. createWalker(surface, position) returns a grounded locomotion state; updateWalker(surface, state, input, dt, obstacles) updates and returns that state, integrating gravity in steps no longer than 1/120 second. dt is in seconds; movement input contains forward, right, yaw (radians), fast, and a one-shot jump request. A hidden browser tab, the field guide, and photo mode pause the simulation.
lunar-expedition.js contains the discovery positions, lightweight route graph, proximity checks, and validated journal parsing. moon-discoveries.js connects the route to the interface, progress storage, and the on-demand rock viewer. Random large rocks leave a clear corridor around the authored route; the original featured boulders remain. Both the discovery dialog and field guide pause walking and jumping.
NASA 3D Resources models (models/*.glb) are Draco-compressed — every page that loads a GLB also loads DRACOLoader.js and points it at the r128 examples/js/libs/draco/gltf/ decoder path, otherwise the geometry fails to decode and the loader silently falls back.
The public page is https://www.3dsolarsystem.net/mars-expedition.html (the name avoids colliding with the existing mars.html orbital detail page). It is listed in sitemap.xml, linked from the homepage and generated planet pages, and carries the same indexable metadata as the Moon expedition.
mzu-mars-discoveries-v1.mars-expedition.html, mars.js, mars-terrain.js, mars-expedition.js, mars-audio.js. moon-discoveries.js and moon.css are shared — the discoveries module accepts optional expedition, terrain, and strings parameters.The public page is https://www.3dsolarsystem.net/venus-expedition.html (the name avoids colliding with the existing venus.html orbital detail page). It is listed in sitemap.xml, linked from the homepage and generated planet pages, and carries the same indexable metadata as the other expeditions.
flashBoost sky uniform. Terrain is volcanic, not cratered: fractured basalt slabs, a lava channel, a pancake dome, and ridged tessera-like highlands, inspired by Venera surface photos and Magellan radar maps.onThunder hook.index.html?focus=Sun.mzu-venus-discoveries-v1.venus-expedition.html, venus.js, venus-terrain.js, venus-expedition.js, venus-audio.js. moon-discoveries.js and moon.css remain shared.The public page is https://www.3dsolarsystem.net/mercury-expedition.html (the name avoids colliding with the existing mercury.html orbital detail page). It is listed in sitemap.xml, linked from the homepage and generated planet pages, and carries the same indexable metadata as the other expeditions.
?focus=Sun|Earth|Venus). There are no clouds, no haze, no wind, and no dust devils.mzu-mercury-discoveries-v1.mercury-expedition.html, mercury.js, mercury-terrain.js, mercury-expedition.js, mercury-audio.js. moon-discoveries.js and moon.css remain shared.The public page is https://www.3dsolarsystem.net/jupiter-expedition.html (the name avoids colliding with the existing jupiter.html orbital detail page). It is listed in sitemap.xml, linked from the homepage and generated planet pages, and carries the same indexable metadata as the other expeditions.
SINK_SPEED scaled by gravity). Holding Space fires an ascent thruster (THRUST_SPEED); WASD/arrows drift horizontally; there is no jumping and no ground.jupiter-atmosphere.js exposes JupiterAtmo — the same createSurface/sampleSurface/createWalker/updateWalker contract as the terrain modules, but walker.y is a free altitude clamped between MIN_ALTITUDE (−360) and MAX_ALTITUDE (420), and walker.grounded stays true so the shared discovery module works unchanged. Gravity is 24.79 m/s² (G toggles Earth's 9.8 m/s², scaling the sink rate).storm.x/z, topped by a slowly rotating spiral-textured disc for the storm's churn. Vertex colours paint horizontal bands and a rust-red collar around the vortex; the ground shader adds billow shading, wind streaks, and crest brightening, plus a uTime vertex wobble so the deck visibly churns. Roughly 190 soft additive cloud-puff sprites fill the descent corridor (three altitude layers) so the probe flies through haze rather than over a flat plane; a slight emissive lift keeps the deck reading as sunlit cloud, not rock. Sky is a procedural banded dome (fbm turbulence + filament streaks) with a Sun about five times smaller than from Earth; small translucent drifting ice crystals replace rocks (one is the specimen-viewer target).darkening uniform dims the banded sky as the probe sinks, fog thickens and shifts toward deep brown, sunlight and ambient fade, and random lightning events fire both a flash uniform and brief additive lightning-bolt sprites below the deck, paired with thunder audio.examples/js postprocessing modules (unpkg) and renders through EffectComposer — RenderPass → UnrealBloomPass (per-planet strength/threshold: Moon 0.6/0.8, Mars 0.45/0.8, Venus 0.5/0.75, Mercury 0.65/0.72, Jupiter 0.5/0.74) → GammaCorrectionShader → FXAAShader → a custom cinematic pass (vignette + animated film grain). Composer use is skipped on low quality or when the CDN modules fail, falling back to direct rendering.The public page is https://www.3dsolarsystem.net/saturn-expedition.html (the name avoids colliding with the existing saturn.html orbital detail page). It is listed in sitemap.xml, linked from the homepage and generated planet pages, and carries the same indexable metadata as the other expeditions.
CRUISE_SPEED), WASD/arrows add lateral drift and speed (Shift faster), Space rises and C sinks below the sheet. There is no gravity descent — instead the ring plane exerts a gentle tidal pull toward y = 0, scaled by the G gravity toggle (Saturn 10.44 m/s² vs Earth 9.8 m/s²).saturn-rings.js exposes SaturnRings — the same sampleSurface/createWalker/updateWalker contract (sampleSurface returns 0 — the "surface" is the ring plane), plus ringDensity(x, z) which both drives the banded sheet texture and gates how densely the instanced ice field populates each band. Altitude is clamped between MIN_ALTITUDE (−140) and MAX_ALTITUDE (300).ringDensity. Density now comes from real data: ringDensity reads a 128-sample table (RING_PROFILE in saturn-rings.js) taken from the alpha channel of textures/2k_saturn_ring_alpha.png (NASA/Cassini-based). The image's x-axis is mapped linearly to planet radii using two anchors checked against the image itself: the Cassini Division minimum (x≈1445) sits at 1.99 R, and the outer A-ring edge (x≈1947) at 2.27 R. Result: the bright B ring (1.53–1.95 R), the dark Cassini gap at ~1.99 R, the dim C ring and the Encke gap all land where they should. Fine ringlet noise is still layered on top. Geometry uses Saturn's true ring radii: the probe cruises inside the Cassini division at ~1.99 Saturn radii, so SATURN_RADIUS = RING_R0 / 1.99. The globe therefore fills ~60° of sky, and the dense B ring between the probe and the planet correctly hides Saturn's lower half. The far ring disc around the globe samples the same ringDensity profile (not a separate texture) and cross-fades with the local sheet between 2.3 and 2.9 km from the start point, so near and far rings are one continuous system. The globe is Lambert-lit and receives the rings' shadow on its southern hemisphere.models/cassini.glb, Draco-compressed) holds formation off the port bow as a wingman; the probe hull under the camera is simple geometry.The public page is https://www.3dsolarsystem.net/uranus-expedition.html (the name avoids colliding with the existing uranus.html orbital detail page). It is listed in sitemap.xml, linked from the homepage and generated planet pages, and carries the same indexable metadata as the other expeditions.
CRUISE_SPEED), WASD/arrows drift and change speed (Shift faster), Space rises and C sinks below the sheet. The ring plane exerts a gentle tidal pull toward y = 0, scaled by the G gravity toggle — Uranus's 8.87 m/s² is nearly identical to Earth's 9.8 m/s², and that near-match is itself the point of the toggle.uranus-rings.js exposes UranusRings — the same sampleSurface/createWalker/updateWalker contract. ringDensity(x, z) returns low densities for thirteen narrow charcoal-dark bands (ε/δ/γ/η/β and friends) instead of Saturn's broad bright sheet; it both drives the sparse band texture and gates how thinly the instanced particle field populates each band. Altitude is clamped between MIN_ALTITUDE (−140) and MAX_ALTITUDE (300).0x424c52), so the lumps read as charcoal debris rather than Saturn's glittering ice. A shepherd moonlet (irregular body riding a ring edge) and a small tilt marker — a turquoise globe tipped 98° with a vertical ring of its own — sit in the sheet as discoveries.2k_uranus.jpg texture, deliberately near-featureless as Voyager 2 saw it) hangs half-submerged on the plane with its narrow rings edge-on. NASA's real Voyager 2 model (models/voyager.glb, Draco-compressed) — the only spacecraft ever to visit Uranus — holds formation off the port bow.uranus-audio.js) is the same quiet cabin hum and radio hiss with rarer icePing() ticks, matching the sparser bands.mzu-uranus-rings-v1.uranus-expedition.html, uranus.js, uranus-rings.js, uranus-expedition.js, uranus-audio.js. moon-discoveries.js and moon.css remain shared.The public page is https://www.3dsolarsystem.net/neptune-expedition.html (the name avoids colliding with the existing neptune.html orbital detail page). It is listed in sitemap.xml, linked from the homepage and generated planet pages, and carries the same indexable metadata as the other expeditions.
(VORTEX_X, VORTEX_Z) — stormDensity(x, z) returns higher density along winding spiral arms and near zero inside the dark eye. The probe cruises forward on its own; WASD/arrows drift, Shift is faster, Space rises to MAX_ALTITUDE (300), C sinks to MIN_ALTITUDE (−140) where the haze thickens. Pressing G compares Earth's 9.8 m/s² with Neptune's 11.15 m/s².neptune-storm.js exposes NeptuneStorm — the same sampleSurface/createWalker/updateWalker contract as the ring modules, plus VORTEX_R so the painted vortex disc and the density eye share one radius.VORTEX_R, spiral-streak texture) turns slowly on the deck; a white Scooter-style racing cloud and a small spinning-disc marker sit as discoveries. Triton hangs in the haze as a clickable sky body alongside the Sun and Earth. NASA's real Voyager 2 model (models/voyager.glb) — the only spacecraft ever to visit Neptune — holds formation off the port bow, the same ship as Uranus's flyby.neptune-audio.js) adds a restless wind howl under the cabin hum, with icePing() ticks gating on stormDensity inside the lanes.mzu-neptune-storm-v1.neptune-expedition.html, neptune.js, neptune-storm.js, neptune-expedition.js, neptune-audio.js. moon-discoveries.js and moon.css remain shared.All eight expedition field guides open with a "What you are seeing" feature list — a localized card list (planet-facts markup, feature-list element, per-page features dictionary entries rendered by applyLanguage) that names each visible landmark and ties it to the real observation it is based on, so visitors can read the planet's signature features without walking.
After changes, run:
node generate_seo_pages.cjs
node validate_site.cjs
node --check moon.js
node --check lunar-terrain.js
node --check lunar-expedition.js
node --check lunar-audio.js
node --check moon-discoveries.js
node --check mars.js
node --check mars-terrain.js
node --check mars-expedition.js
node --check mars-audio.js
node --check venus.js
node --check venus-terrain.js
node --check venus-expedition.js
node --check venus-audio.js
node --check mercury.js
node --check mercury-terrain.js
node --check mercury-expedition.js
node --check mercury-audio.js
node --check jupiter.js
node --check jupiter-atmosphere.js
node --check jupiter-expedition.js
node --check jupiter-audio.js
node --check saturn.js
node --check saturn-rings.js
node --check saturn-expedition.js
node --check saturn-audio.js
node --check uranus.js
node --check uranus-rings.js
node --check uranus-expedition.js
node --check uranus-audio.js
node --check neptune.js
node --check neptune-storm.js
node --check neptune-expedition.js
node --check neptune-audio.js
Route verification includes both directions of every route segment at all three terrain detail levels, distant/airborne discovery rejection, duplicate prevention, and invalid saved-data handling. Browser checks should cover walking the complete route with scene obstacles, specimen rotation/zoom, quick-travel without automatic progress, refresh persistence, storage-disabled fallback, and touch discovery controls.
The validator also checks lunar terrain determinism, crater height, triangle interpolation, rock collisions, slope limits, region boundaries, jump trajectories at different frame rates, prevention of double jumps, landing, walking acceleration/stopping, and airborne momentum. Browser-script policies are evaluated in an isolated Node VM so validation does not depend on an enclosing directory's CommonJS/ES-module settings. For browser checks, exercise desktop walking/dragging, Space jump and landing, touch movement/jump, all five stops, English default in a Chinese browser, camera-motion, gravity and sound switches, photo download, and the round trip to the orbital explorer. This remains a visual prototype; more detailed suit animation and device-specific performance tuning remain future work. If a local preview shows an older interface after changes, perform a hard refresh (Ctrl+F5).
No project-wide open-source license is included. Unless the repository owner publishes a license, no permission to copy, modify, or redistribute the project is granted beyond rights provided by law. Third-party assets remain subject to their own terms.
Checked each expedition's first-glance scene against known physics and removed painted or sticker-like effects.
textures/mars_hirise_jezero_2m.bin is a 1 km patch of the HiRISE Jezero DTM (DTEEC_023247_1985_022957_1985_U01, 1 m/px, PDS). build_mars_hirise.cjs reads only the needed rows through HTTP range requests (the full file is 642 MB, not downloaded). The file stores the ground detail (height minus a 50 m average) at 2 m, so the hand-placed mesas, route and stations stay where they are. The whole 300 m walk zone is covered. validate_site.cjs re-checks every Mars route with this detail applied; the steepest walkable slope is about 34 degrees, below the 40 degree block threshold.textures/mars_mola_jezero_16ppd.bin (640 x 640, 16 px/deg, 3.7 km/px) comes from the 33 MB NASA MEGDR file via build_mars_dem.cjs. Heights are exaggerated 5x..vercelignore no longer excludes them). Real periods (REAL_PERIODS) and real semi-major axes were added so real-distance mode places and spins them correctly. Titan now sits outside Rhea and the artistic speeds fall with orbital period. Scene orbit radii are artistic, not to scale.textures/moon_nix_celestia.jpg (2048 x 1024) is the Nix map from the CelestiaContent texture set, which reprojects processed New Horizons images. Author: Askaniy Anpilogov, licence CC-BY-3.0. Source: https://github.com/CelestiaProject/CelestiaContent/blob/master/textures/medres/nix.jpgmodels/hydra_shape.json is Hydra's shape model from Porter et al., figshare 12779975, licence CC BY 4.0 (https://figshare.com/articles/online_resource/Shape_Model_of_Hydra/12779975). It was decimated from 52,488 to 1,066 triangles by build_hydra_shape.cjs. It has no colour data, so Hydra keeps the procedural tint.models/nix_shape.json is Nix's shape model from Porter et al., figshare 12779948, licence CC BY 4.0 (https://figshare.com/articles/online_resource/Shape_Model_of_Nix/12779948). Decimated from 80,000 to 4,052 triangles by build_hydra_shape.cjs <stl> nix. Nix uses its Celestia map on this shape.expedition-ground.js puts a photo-scanned soil material on the Moon, Mars, Venus and Mercury ground (colour, normal and roughness maps). Source: ambientCG "Ground054", CC0. The colour map is desaturated (textures/regolith_*.jpg, about 720 KB total) and each world tints it.models/rocks/, about 2.7 MB with textures) instead of the Bennu/Itokawa asteroid models. Venus now uses the scanned material too, which fixed its rocks rendering black.textures/footprint_apollo.png, 43 KB). Each world tints it.sky-galaxy.js (SkyGalaxy.create(options)) replaces the old Milky Way photo (2k_stars_milky_way.jpg, no longer loaded), the random starfield and the canvas "nebula" sphere.
textures/bsc5_stars.bin (73 KB) holds all 9,096 stars of the Yale Bright Star Catalogue (BSC5, public domain, http://tdc-www.harvard.edu/catalogs/bsc5.html): J2000 position, magnitude and a colour temperature from the spectral type. Rebuild with node build_star_catalog.cjs <BSC5 file>. Constellations appear in their true places; size and brightness follow magnitude.main.js). Checked: Deneb comes out at l = 84.3°, b = +2.0°; Sirius at l = 227.2°, b = -8.9°; Antares at l = 351.9°, b = +15.1°.centerToward to turn the galactic centre to the upper right of the starting view, away from the Sun. Mercury's separate black sky sphere was removed; the band now shows there.?lang=zh to explicitly open Chinese; ?lang=en forces English.?quality=auto|high|balanced|low selects a render profile. The quality preference is shared with the existing explorer. Auto mode can lower pixel resolution after sustained slow rendering; it does not promise a fixed frame rate on every device.RenderPass → UnrealBloomPass (strength 0.5, threshold 0.74, so only the Sun, lightning, and bright cloud crests bloom) → GammaCorrectionShader for correct sRGB output → FXAAShader (composer render targets lose MSAA, so FXAA restores edge smoothing) → a custom cinematic pass adding vignette and animated film grain. A THREE.Points crystal storm (≈5 200 additive particles on high quality) rains slowly through the full altitude column and wraps around, so the probe visibly falls through suspended ice. The composer is skipped on low quality or when the CDN modules are unavailable, falling back to direct rendering; resize, pixel-ratio relief, and photo capture all route through the composer when present.jupiter-audio.js) is continuous wind rush driven by descent rate via setDescent(vy), plus radio static bursts, a thruster whoosh on burn start (jump()), muffled thunder(), and the discovery chime().y altitude used by quick travel. Progress saves under mzu-jupiter-descent-v1.jupiter-expedition.html, jupiter.js, jupiter-atmosphere.js, jupiter-expedition.js, jupiter-audio.js. moon-discoveries.js and moon.css remain shared.fog: false — the scene's subtle FogExp2 exists to melt the local sheet's far edge, not to swallow celestial bodies. Below the plane, the "ring shadow" dims lights and thickens fog.saturn-audio.js) is a quiet cabin hum, occasional radio hiss, thruster whoosh, and ice-grain icePing() ticks when skimming dense bands.mzu-saturn-rings-v1.saturn-expedition.html, saturn.js, saturn-rings.js, saturn-expedition.js, saturn-audio.js. moon-discoveries.js and moon.css remain shared.