# Mapas y materiales añadidos en la versión 02

Verificación de fuentes: 20 de septiembre de 2026. Todos los recursos se guardan localmente. La aplicación no necesita una cuenta, suscripción ni conexión para cargar estas texturas. Los mapas describen observaciones históricas; la fecha del reloj cambia la geometría astronómica y la iluminación, no el clima ni la distribución actual de luces.

## Luces nocturnas de la Tierra

- Archivo: `assets/earth-night.jpg`, 2048 × 1024, JPEG de intensidad gris.
- Producto: Black Marble 2016, resolución original 3600 × 1800.
- [Catálogo y explicación oficial NASA](https://science.nasa.gov/earth/earth-observatory/earth-at-night/maps/).
- [Descarga exacta del original](https://assets.science.nasa.gov/content/dam/science/esd/eo/images/imagerecords/144000/144897/BlackMarble_2016_01deg_gray.jpg).
- Crédito: NASA Earth Observatory; Suomi NPP / VIIRS.
- Modificación: reducción Lanczos a 2048 × 1024 y JPEG calidad 95. En el material se aplica un tono cálido ilustrativo. No representa los colores medidos de cada ciudad ni la potencia de sus lámparas.

`js/materiales.js` oculta progresivamente la emisión al entrar en el día. Utiliza la dirección real del Sol expresada en las coordenadas de la Tierra; no depende de las distancias comprimidas de la vista didáctica. La transición al crepúsculo es visual, no una simulación de cuándo se enciende cada lámpara.

## Nubes históricas

- Archivo: `assets/earth-clouds.jpg`, 2048 × 1024; copia exacta del original.
- Producto: NASA Blue Marble: Clouds, publicado en 2002; compuesto histórico MODIS.
- [Registro original NASA Visible Earth](https://visibleearth.nasa.gov/images/57747/blue-marble-clouds/77558l). Este catálogo está en migración y puede redirigir al portal Earth Observatory.
- [Descarga exacta desde NASA](https://eoimages.gsfc.nasa.gov/images/imagerecords/57000/57747/cloud_combined_2048.jpg).
- Crédito: NASA Goddard Space Flight Center; Reto Stöckli. Mejoras de Robert Simmon.
- Modificación del archivo: ninguna. Su luminancia controla la opacidad de una esfera blanca situada unos 10 km sobre el radio terrestre de referencia.

Las nubes reciben la misma dirección solar que la Tierra y giran con ella. Esta capa no se anima como si fuese una predicción meteorológica y no se actualiza con el tiempo atmosférico de hoy. La casilla Nubes permite ocultarla.

## Máscara de reflejos del océano

- Archivo generado: `assets/earth-specular.png`, 2048 × 1024.
- Fuente: polígonos de tierra Natural Earth, escala 1:50 millones.
- [Descripción de la fuente](https://www.naturalearthdata.com/downloads/50m-physical-vectors/50m-land/).
- [GeoJSON en el repositorio del proyecto](https://github.com/nvkelso/natural-earth-vector/blob/master/geojson/ne_50m_land.geojson).
- [Archivo fuente exacto](https://raw.githubusercontent.com/nvkelso/natural-earth-vector/master/geojson/ne_50m_land.geojson).
- [Condiciones de Natural Earth: dominio público, uso comercial permitido](https://www.naturalearthdata.com/about/terms-of-use/).
- Modificación: rasterización equirectangular con sobremuestreo ×2. Blanco identifica océano y negro tierra. No incluye un modelo de oleaje, hielo marino actual ni todos los lagos.

El brillo especular es una aproximación visual con Phong. No pretende calcular radiancias satelitales ni un modelo físico completo de la superficie marina. El reflejo queda restringido por la máscara a las zonas de agua del mapa.

## Relieve lunar

- Fuente: [NASA SVS CGI Moon Kit](https://svs.gsfc.nasa.gov/4720/), DEM del Lunar Orbiter Laser Altimeter (LOLA).
- [Original utilizado: ldem_16_uint.tif](https://svs.gsfc.nasa.gov/vis/a000000/a004700/a004720/ldem_16_uint.tif), 5760 × 2880; enteros de 16 bits, unidades de medio metro y desplazamiento de +10 km.
- Crédito: NASA's Scientific Visualization Studio; Ernie Wright. Datos LRO / LOLA.
- Archivos preparados: `moon-height.png` (altura de 16 bits), `moon-normal.png` (normal tangente RGB, OpenGL) y `moon-relief.json` (metadatos). Ambos mapas tienen 2048 × 1024 píxeles.

La preparación convierte primero el original a kilómetros: `altura = valor / 2000 - 10`. Después reduce el mapa y calcula pendientes usando el radio de referencia de 1737,4 km y el tamaño de cada celda sobre la esfera. No se ha aplicado exageración vertical. El normal map es lineal; en Blender debe elegirse Non-Color, conectarlo a un nodo Normal Map y usar Strength 1.

En el PNG de altura, negro significa −10 km y blanco +12 km: `altura_km = gris_normalizado * 22 - 10`. Se conserva a 16 bits para permitir su uso posterior en Blender. Estos mapas no tienen color sRGB. La aplicación web usa el mapa normal para modificar la iluminación de los cráteres; la silueta y las colisiones continúan siendo una esfera. No genera sombras de relieve proyectadas ni altera el radio global en la escala didáctica.

## Condiciones de uso comercial de las imágenes NASA

Las [directrices oficiales de NASA](https://www.nasa.gov/nasa-brand-center/images-and-media/) permiten generalmente reutilizar sus materiales para simulaciones y obras informativas, y contemplan el uso comercial sin insinuar patrocinio. Se conservan las atribuciones. Estos mapas no muestran personas ni incluyen logotipos y sus registros no identifican restricciones de terceros sobre los archivos seleccionados.

Los recursos NASA no se presentan como una licencia CC0 ni como contenido propio exclusivo. El proyecto no está afiliado, revisado ni avalado por NASA. Su identidad gráfica no debe utilizarse para promocionar el producto como oficial. Los recursos cartográficos de Natural Earth sí están dedicados al dominio público.

## Código y regeneración

`js/materiales.js` contiene una clase pequeña para crear la Tierra, sus nubes y la Luna. Los controles `clouds`, `night`, `relief` y `ocean` se activan con `setOption(nombre, booleano)`. `update(datosAstronomicos, cuerpos)` actualiza la máscara nocturna después de orientar los cuerpos.

`assets/prepare-textures-v02.py` prepara las imágenes numéricas. Requiere Pillow y NumPy; no se usa al abrir la simulación. Descarga los cuatro originales enlazados arriba en una carpeta y nómbralos `night-nasa-3600.jpg`, `clouds-nasa-2048.jpg`, `ne_50m_land.geojson` y `ldem_16_uint.tif`. Ejecuta:

```text
python assets/prepare-textures-v02.py --source-dir CARPETA_DE_ORIGINALES
python assets/build-texture-data.py
```

El segundo comando empaqueta los seis mapas utilizados por el navegador como URLs de datos en `assets/textures-data.js`. Permite abrir la web con doble clic sin que WebGL bloquee imágenes locales. Los archivos normales y de altura son datos derivados de las fuentes indicadas; el render final lo genera este proyecto.

El mapa `moon-height.png` se conserva para edición y Blender; no se incluye en el JavaScript del navegador porque el dibujo usa `moon-normal.png`. Así se evita cargar unos 4,3 MB innecesarios al abrir la aplicación.
