fix(sky): keep the Sun and Moon, settle outside the ICRF tables

- Pass the custom sky box to the Viewer instead of `skyBox: false`, which
  also stopped CesiumWidget from creating the Sun and the Moon. Guarded by
  scripts/qa-sky-sun-moon.mjs.
- Outside the IAU 2006 tables (before 1975, after ~2050) the preload
  resolves without data; remember that span and stay on TEME instead of
  preloading and rendering every frame.
- The anime style no longer cel-shades the far plane, where four bands
  turned the faint Milky Way into blotches.
- Paint the planets out after the star-removing opening and with the
  ring median, so no brighter plateau is left; faces rebuilt.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
German KhokhlovandClaude Opus 5.5 committed 2026-10-19 19:43:25 +04:00
1 parent 6549344946
commit fb81e155b7
15 files changed
+243 -28

No files matched your search

+6 -2
View File
@@ -12,6 +12,7 @@ export const animeShader = {
},
fragmentShader: /* glsl */ `
uniform sampler2D colorTexture;
uniform sampler2D depthTexture;
uniform vec2 colorTextureDimensions;
uniform float intensity;
uniform float saturation;
@@ -38,9 +39,12 @@ export const animeShader = {
vec2 texel = 1.0 / colorTextureDimensions;
vec4 color = texture(colorTexture, uv);
// Cel-shade: quantize luminance into bands
// Cel-shade: quantize luminance into bands. Not the far plane: four
// bands turn the faint Milky Way behind the globe into blotches. Its
// packed depth reads a few 1e-7 short of 1.0.
float luma = dot(color.rgb, vec3(0.299, 0.587, 0.114));
float bands = mix(256.0, 4.0, intensity);
bool space = czm_readDepth(depthTexture, uv) > 0.99999;
float bands = space ? 256.0 : mix(256.0, 4.0, intensity);
float celLuma = floor(luma * bands + 0.5) / bands;
float lumaScale = (luma > 0.001) ? celLuma / luma : 1.0;
vec3 celColor = color.rgb * lumaScale;