# Fotografía y viajes de cámara — versión 07

## Qué representa cada modo

**Didáctico** mantiene visibles las estrellas elegidas y una luz de relleno tenue para facilitar la exploración. **Fotográfico** elimina ese relleno y vincula las estrellas a la exposición del visor. Las efemérides, fases, direcciones de luz, relieve y tiempo no cambian al pasar de modo. Las líneas y nombres de constelaciones continúan siendo ayudas superpuestas, controladas por sus casillas.

En modo fotográfico, una exposición orientada a un paisaje lunar iluminado deja casi invisibles las estrellas. Aumentarla permite apreciar más estrellas mientras la superficie clara tiende a saturarse. Esta relación cualitativa corresponde al problema de rango dinámico de una fotografía; **los valores no constituyen un modelo radiométrico calibrado ni emulan un sensor, ISO, obturador o integración temporal**. No se añaden resplandores o estrellas ficticias.

La exposición automática compensa la atenuación solar inversa al cuadrado de la distancia cuando la escena activa esa atenuación. En los paisajes lunares ajusta gradualmente la exposición según la altura solar. De noche puede aumentar la exposición, pero no añade luz al terreno. La iluminación de estudio, cuando se elige en el relieve, se identifica como artificial.

La compensación va de −4 a +10 EV: un paso multiplica por dos la exposición visual. La exposición automática puede desactivarse para comparar luminosidades con una misma exposición. Los colores y texturas no son mediciones actuales del tiempo atmosférico. El panorama del cielo terrestre conserva su modelo de día/noche; el control fotográfico actúa sobre el visor espacial y lunar.

## Cámara

`js/camara.js` calcula viajes entre encuadres sin mover los astros. Usa interpolación logarítmica de distancia, el giro corto al cruzar ±π y una curva quintic con velocidad y aceleración nulas en sus extremos. Los viajes habituales duran 1,1 s; saltos entre escalas muy distintas pueden alcanzar 2,4 s. El destino sigue las efemérides durante el viaje. Arrastrar o usar la rueda interrumpe el viaje conservando posición y mirada. La preferencia de movimiento reducido cambia inmediatamente de encuadre.

`SolarCamera.fitSphere(radius, fieldOfView, aspect, margin)` calcula la distancia para encuadrar un radio envolvente, incluidos los anillos si se entrega su radio exterior. El aspecto se tiene en cuenta para pantallas estrechas.

## Archivos y conexiones

- `js/fotografia.js`: validación, cálculo puro, controlador y panel compacto. No crea reloj ni bucle de animación.
- `css/fotografia.css`: presentación de esa tarjeta.
- `SolarPhotography.evaluate(context, options)` devuelve exposición, ganancia estelar, factor de relleno y factor solar. `context` admite `view`, `distanceAu`, `solarFalloff`, `sunAltitudeDeg` y `studioLighting`.
- `SolarStarField.setExposureGain`: uniforme del shader que atenúa las estrellas sin modificar sus coordenadas o selección.
- `SolarTerrain.setPhotography` y `SolarGround.setPhotography`: conservan el resultado durante cambios de región y actualizaciones del reloj.
- `tests/fotografia.cjs`: relaciones día/noche/EV/distancia; validación; interrupción y seguimiento de cámara; encuadre; persistencia del ajuste en los hooks reales.

## Fuentes consultadas

- [NASA — Where are the stars?](https://science.nasa.gov/blogs/earth-matters/2011/09/28/where-are-the-stars/): explica por qué una exposición breve que registra la Tierra o una superficie lunar brillante no registra las estrellas débiles.
- [NASA — Lunar Photography Guide](https://science.nasa.gov/moon/photography-guide/): explica los compromisos entre exposición, brillo y movimiento en fotografía lunar.
- [Three.js — WebGLRenderer](https://threejs.org/docs/pages/WebGLRenderer.html): API de tone mapping y `toneMappingExposure`.

No se incorporan recursos gráficos externos ni plugins nuevos para estos efectos. Se utiliza el renderer Three.js ya distribuido y su licencia existente. La implementación es original del proyecto.
