El motor de nebulosas: cómo se pinta un volumen de gas y por qué parece real

Técnica del simulador · render en tiempo real con WebGL2

Las nebulosas de Orbit Universe no son fotos ni carteles planos: son volúmenes de gas y polvo que se atraviesan con rayos sesenta veces por segundo. Esta página cuenta cómo funciona ese motor, qué física lleva dentro, cómo se decide la forma en 3D de cada nebulosa, cómo se compara con las fotos de los telescopios y cuánto le cuesta a la tarjeta gráfica.

Abrir la Hélice Abrir Orión Todos los escenarios

Todas las imágenes son del propio simulador o dibujos propios, salvo las fotos de referencia de Hubble y Webb, que llevan su crédito. Cuando algo es una aproximación, se dice.

En cinco cifras

1. El volumen: una marcha de rayos

Un cartel plano funciona de lejos y se cae en cuanto la cámara se mueve: no tiene parte de atrás, no se puede atravesar y no se hace sombra a sí mismo. Una nebulosa es justo lo contrario: un volumen donde el gas emite luz en unas líneas concretas y el polvo la absorbe. Así que cada nebulosa vive en una caja 3D y, por cada píxel de la pantalla, el shader recorre un rayo desde la cámara a través de esa caja.

En cada muestra del rayo se resuelve la ecuación de transporte de la radiación, integrada hacia delante con la transmitancia acumulada:

I=∑iTijiΔs,Ti+1=Tie−kiΔs

I es la luz que llega al píxel, j la emisión de cada muestra, k la absorción del polvo y T lo que queda de transparencia. T tiene tres componentes (rojo, verde y azul) porque el polvo apaga más el azul que el rojo, y eso es lo que enrojece la parte lejana de una nube.

Esquema de un rayo que sale de la cámara y cruza la caja de la nebulosa con muestras equiespaciadas, y la curva de transmitancia que baja de 1 a casi 0
Un rayo, sus muestras cada Δs y la transparencia T que se gasta al atravesar el gas. Cuando T baja de 0,06 ya no se ve nada más y el rayo se corta. Dibujo propio.

Densidad horneada y densidad analítica

La densidad del gas sale de dos sitios. La mayor parte está horneada en una textura 3D: una turbulencia de Kolmogorov (con la ley de potencias de un gas turbulento de verdad) moldeada por la forma de cada nebulosa, que la tarjeta lee con una sola consulta por muestra. Evaluar ese ruido en el shader costaría unas cuarenta operaciones de hash por muestra; la textura es una lectura, con caché.

Y lo que es más fino que un vóxel se evalúa analíticamente en el propio shader: las cáscaras delgadas de las nebulosas planetarias, los frentes de choque del Velo, las trompas de la Roseta, la piel de la Cabeza de Caballo. Una rejilla de 128³ no puede guardar una lámina más fina que su celda; una fórmula sí.

CalidadRejillaPasos por rayoMotas
Baja32³4880.000
Media64³96350.000
Alta128³1761.200.000

La rejilla va siempre en potencias de dos porque la turbulencia se genera con una transformada de Fourier; con 96 celdas la escena ni siquiera cargaba.

Las sombras, horneadas una sola vez

Los glóbulos densos tapan la luz de la estrella y dejan pilares y colas detrás. Hacerlo bien pide un segundo rayo hacia la estrella desde cada muestra del primero: con 128 muestras y 32 pasos de sombra serían más de cuatro mil lecturas por píxel y por fotograma. En lugar de eso, la transparencia hasta la estrella se calcula una sola vez al cargar y se guarda en otro canal de la misma textura: se recorren los vóxeles en orden de distancia creciente a la estrella y cada uno lee al que tiene delante en la dirección de la luz. Es un solo barrido de la rejilla y en el shader cuesta cero.

Un bucle que no se despliega

En Windows, los navegadores traducen WebGL a Direct3D, y ese compilador despliega los bucles de límite fijo: un bucle de 176 pasos se copiaría 176 veces, tardaría decenas de segundos en compilar y una orden de más de dos segundos reinicia la tarjeta. Por eso el número de pasos llega en una variable y nunca como constante.

2. Líneas de emisión y polvo que absorbe

Una nebulosa de emisión no brilla con un color cualquiera: brilla en líneas atómicas concretas. El hidrógeno recombinado da la Hα roja (656,3 nm) y la Hβ azul verdosa (486,1 nm); el oxígeno dos veces ionizado, las líneas [O III] de 495,9 y 500,7 nm, turquesa, junto a la estrella que ioniza; el nitrógeno [N II] (654,8 y 658,4 nm) y el azufre [S II] (671,6 y 673,1 nm), rojos, en los bordes y los frentes de choque. Cada color se convierte de longitud de onda a RGB con las funciones del CIE una sola vez; el shader solo suma colores ya calculados.

La emisión de recombinación va con el cuadrado de la densidad (electrones por protones). Es lo que hace que los filamentos densos destaquen tanto sobre el gas difuso; con una ley lineal, una nebulosa parece humo. Qué línea domina en cada sitio lo decide el grado de ionización, que sale del número de fotones ionizantes de la estrella y del radio de Strömgren.

Arriba, las líneas de emisión sobre el espectro visible; abajo, la curva de extinción del polvo, que vale 1,29 en el azul y 0,83 en el rojo
Arriba: las líneas que suma el shader. Abajo: cuánto apaga el polvo cada color respecto al verde, con la curva de Cardelli, Clayton y Mathis (RV = 3,1). El azul se pierde antes: por eso lo que hay detrás de una nube de polvo sale rojizo. Gráfica propia.

El polvo hace tres cosas: absorbe con esa curva (las tres componentes de T), dispersa la luz de la estrella hacia la cámara con la función de fase de Henyey y Greenstein (eso son las nebulosas de reflexión, y son azules por la misma razón que el cielo) y, en la paleta Webb, además brilla en el infrarrojo. Las siluetas oscuras, como la Cabeza de Caballo o las trompas de elefante, no son manchas pintadas: son polvo que se come la luz del gas que tiene detrás.

Cada nebulosa se ve con la paleta de la foto con la que se compara: visible (color natural), SHO (la de Hubble: azufre en rojo, hidrógeno en verde y oxígeno en azul), HOO (hidrógeno y oxígeno) o Webb.

Lo que no se hace, dicho aquí: la absorción del fondo que hay detrás de la nebulosa es acromática. La luz propia de la nebulosa se apaga con las tres componentes exactas, pero la mezcla con lo que hay detrás usa una sola transparencia, porque WebGL solo tiene un factor de mezcla. Hacerlo en color doblaría el coste.

3. Las motas: millones de puntos sobre la misma densidad

De lejos, la marcha de rayos es perfecta. De cerca, la interpolación de la rejilla empieza a verse. Encima del volumen va una capa de 80.000, 350.000 o 1.200.000 motas (según la calidad) que siguen exactamente la misma densidad y llevan el color de la química de cada región: [O III] cian junto a la estrella, Hα roja en las alas, [S II] y polvo pardo en los frentes. De cerca ponen el grano fino; de lejos se apagan y la imagen del volumen no cambia.

Muestreo sin millones de intentos

  1. La densidad se evalúa una vez en una rejilla de 65³ nodos.
  2. Cada población (gas emisor, polvo, reflexión…) convierte esa densidad en un peso por nodo.
  3. Se elige la celda con una tabla de alias (una consulta, sin importar cuántas celdas haya) y el punto se saca de la densidad trilineal de la celda por inversión, sin rechazo. Solo un ruido de grumos por debajo del vóxel rompe la celda para que el grano no repita los bloques de la rejilla.

Las motas se mezclan en modo normal, no aditivo: con un millón de puntos, la mezcla aditiva satura los núcleos densos; la normal converge al color de las motas y deja que las de polvo oscurezcan, como en las fotos. Se dibujan antes que el volumen, así que el gas de delante las atenúa.

El LOD que no cambia el brillo

Las motas empiezan a fundirse cuando la nebulosa ocupa 150 píxeles en pantalla y están enteras a 500. De lejos, y cuando la tarjeta va al límite, se dibuja solo una fracción f de ellas, y cada una se hace más opaca en 1/√f, la misma ley que se usa entre calidades, para que el conjunto no cambie de brillo: con la mitad de las motas, un 45 % menos de coste y una diferencia media de 0,4 a 1,1 niveles de color.

Curvas del LOD de las motas: el fundido empieza a 150 píxeles y termina a 500, la fracción dibujada sube de 0,25 a 1 y la opacidad de cada mota baja de 2 a 1
Qué parte de las motas se dibuja según el tamaño de la nebulosa en pantalla, y cuánto se refuerza cada una para compensar. Gráfica propia con las constantes del código.

Si el ritmo cae por debajo del 70 % del objetivo de fotogramas, el simulador recorta por este orden, del que más gana y menos se nota al que más se nota: el volumen a media resolución (−73 %), las motas a la mitad (−45 %), los pasos por rayo a ×0,8 y a ×0,6 (hasta −40 %) y las motas a un cuarto (−70 %). Solo después toca la resolución de toda la escena. En el flujo del agujero blanco, que es todo motas, el objetivo es fijo: añade motas hasta que el cuadro llega a 30 fotogramas por segundo (33,3 ms) y recorta si baja de ahí.

4. Sin paredes: la envolvente redonda de la caja

El volumen de cada nebulosa vive en una caja, y el gas que llegaba a sus caras se cortaba en seco. De frente no se notaba; al girar la cámara, la nebulosa era un acuario de bordes rectos. La solución es multiplicar todo el gas —y las motas, con la misma cuenta— por una envolvente que vale cero en todas las caras antes de llegar a ellas:

E(x,y,z)=1−smoothstep(0,723,0,923,|x|3+|y|3+|z|3)

Un superelipsoide: redondo, sin caras planas, y con una esfera interior donde vale 1 sin hacer ninguna cuenta. Se funde entre 0,72 y 0,92 del lado de la caja.

Tres cortes de un campo de gas: cortado por la caja con bordes rectos, la envolvente redondeada en azul, y el gas multiplicado por ella con borde redondo e irregular
Corte por el centro de la caja. El borde irregular no lo pone la envolvente: lo pone la turbulencia del propio gas. Un ruido añadido a la envolvente costaba un 4 % del volumen y no se veía. Dibujo propio.
La Trompa de Elefante vista de frente, de lado y desde arriba, antes y después de la envolvente
La Trompa de Elefante (IC 1396) de frente, de lado y desde arriba. Arriba, antes: de lado y desde arriba se ven los cortes rectos de la caja y un recorte oscuro en la esquina. Abajo, con la envolvente. Capturas del simulador.

La lección vale para cualquier volumen: todo lo que se calcule solo con x e y es un cilindro a lo largo de la visual, y de lado es una pared. Por eso cada nebulosa se mira desde cinco vistas (ver la validación).

5. Por qué está prohibido proyectar fotos

El atajo es tentador: coger la foto de Hubble o de Webb y proyectarla desde la cámara sobre unas capas a distintas profundidades. De frente clava la foto. Se probó con cuatro nebulosas (Carina, Tarántula, Laguna y Trífida) y la comparación automática daba diferencias de 2 a 5 sobre 100, casi idénticas. Pero la puntuación medía justo la vista de arranque, la única que ese método acierta por construcción, porque comparaba la foto consigo misma. Al girar la cámara, cada nebulosa era un fondo plano con recortables pegados encima.

A la izquierda, capas planas paralelas proyectadas desde la cámara que de lado se ven de canto; a la derecha, un volumen de gas que sigue siendo gas desde cualquier lado
Una foto proyectada solo es cierta desde un punto. Un volumen es cierto desde todos. Dibujo propio.

Desde entonces la regla es fija:

6. La forma en 3D: los modelos publicados

Una foto es una proyección: no dice qué está delante y qué detrás. Para decidir la forma en profundidad se buscan las reconstrucciones 3D publicadas (espectroscopía de velocidades, modelos morfocinemáticos, simulaciones hidrodinámicas y las visualizaciones 3D de NASA y ESA) y el volumen se construye para cuadrar con ellas.

El caso de la Hélice: O'Dell, McCullough y Meixner (2004)

Con la velocidad del gas medida en cada punto, O'Dell y sus colaboradores mostraron que la Hélice (NGC 7293) no es un anillo ni una esfera: es un disco interior de 0,52 pársecs inclinado 23° y un toro exterior de 0,77 pársecs inclinado 53°, casi perpendiculares entre sí, con nudos en el frente de ionización del disco. El volumen del simulador se rehízo con esa geometría: el disco en [O III] a 23° y el toro en Hα y [N II] a 53°, inclinados en sentidos opuestos (76° entre los dos planos), con la proporción de radios del artículo y la línea de nodos en el ángulo de la foto de Hubble.

La Hélice del simulador en cinco vistas: de frente, a 45 grados, de lado, desde arriba y desde detrás
La Hélice en el simulador: de frente, a 45°, de lado, desde arriba y desde detrás. De frente es el ojo de las fotos; de lado se ven el disco y el toro cruzados. Capturas del simulador.
NebulosaModelo 3D publicadoVeredicto
Hélice (NGC 7293)Disco y toro casi perpendiculares (O'Dell et al. 2004)Cuadra
Anillo (M57)Barril triaxial visto casi por su eje, unos 20° (O'Dell et al. 2013; Webb, Wesson et al. 2024)Cuadra; faltan los arcos exteriores de MIRI
Orión (M42)Blíster cóncavo sobre la nube molecular, la Barra de canto y el Velo delante (Wen y O'Dell 1995)Cuadra
Cabeza de Caballo (B33)Pilar que sale del borde de la nube, iluminado por σ Orionis (visualización 3D de ESA/Hubble, 2013)Cuadra
Acantilados de CarinaPared de una cavidad con pilares y gas que se evapora hacia ella (visualización 3D de NASA, 2025)Cuadra
Velo del CisneLámina de choque arrugada vista de canto (Hester 1987)Cuadra
Burbuja (NGC 7635)Cáscara de viento con la estrella fuera del centro (ESA/Hubble 2016)Cuadra
Roseta (NGC 2237)Nube en lámina fina atravesada por la cavidad de viento (Wareing et al. 2018)Cuadra
Mariposa (NGC 6302)Bipolar de cintura estrecha con toro de polvo (Wright et al. 2011)Cuadra; inclinación sin contrastar
Cangrejo (M1)Filamentos en una cáscara gruesa, con 310.000 espectros (Martin et al. 2021)Parcial: nuestros filamentos llenan el volumen
Pilares de la Creación (M16)Orientación de cada pilar respecto al cúmulo (McLeod et al. 2015)Parcial: inclinaciones sin contrastar

En 15 nebulosas del catálogo no se ha encontrado ninguna reconstrucción 3D publicada (Laguna, Trífida, Corazón, California, Pacman, Delfín y otras). En ellas el volumen se construye con la física —frentes de ionización, burbujas de viento, polvo delante o detrás— y se comprueba con las cinco vistas, sin una referencia 3D con la que medirlo.

7. La paleta Webb y el detalle de cerca

Webb no es luz visible

Las imágenes de Webb con NIRCam y MIRI son infrarrojas: sus colores son una asignación de bandas, no lo que vería un ojo. La paleta Webb del simulador reproduce esa asignación, y añade dos cosas que en luz visible no existen: la emisión térmica del polvo (los granos iluminados, anaranjados; los fríos, púrpura oscuro) y el hidrógeno molecular de los nudos densos. La lleva la nebulosa del León (NGC 2392), comparada con la imagen de Webb de 2026.

Lado a lado: a la izquierda la foto de Hubble de NGC 2392 y a la derecha el render del simulador en la paleta Webb, con el histograma de tono y el perfil radial debajo
NGC 2392: foto de Hubble (izquierda; NASA, ESA, A. Fruchter y el equipo ERO, CC BY 4.0) y el simulador en paleta Webb (derecha). La diferencia, 41,2, es alta a propósito: la foto de la lámina es visible y el render es infrarrojo. Por eso el número nunca decide solo.

Lo que aparece al acercarse

Cuando un vóxel pasa de ocupar 7 píxeles en el centro de la caja, empieza a encenderse, con fundido hasta 14 píxeles, el detalle de cerca: octavas finas de láminas en el shader, más pasos repartidos hacia la cámara, una población local de motas alrededor de lo que se mira y el volumen siempre a resolución completa. Tres trampas que costaron vueltas:

Todo ese código va en una variante aparte del shader que solo se compila de cerca: dentro del bucle, aunque no se ejecute, costaba un 20 % de lejos.

8. La validación: cinco vistas, lado a lado y un crítico ocular

Láminas de cinco vistas

Cada nebulosa se pinta sin navegador, con el mismo shader, desde cinco sitios: de frente, a 45°, de lado, desde arriba y desde detrás. Es lo que caza las paredes, los cilindros, las losas de estrellas y los recortables que de frente no se ven.

La Cabeza de Caballo en cinco vistas: el pilar oscuro sobre la meseta de polvo y el frente rojo de IC 434
La Cabeza de Caballo: la silueta de B33 es un saliente 3D de la nube, con el frente de ionización de IC 434 por encima. Capturas del simulador.
La Roseta en cinco vistas, con la cavidad central que atraviesa la lámina de gas
La Roseta: la cavidad del viento atraviesa la lámina de gas, como en la simulación de Wareing et al. (2018). Capturas del simulador.

Lado a lado con la foto

Después, render y foto se ponen lado a lado y a la misma escala: la foto se orienta con el norte arriba y el este a la izquierda, las dos se recortan con las mismas funciones y se comparan el reparto de tonos (doce sectores de color, pesados por brillo y saturación), el perfil radial del rojo y del azul del centro al borde, la mediana, la saturación y el grano. Sale una puntuación de 0 (igual) a 100.

Lado a lado de la Hélice: foto de Hubble a la izquierda y render del simulador a la derecha, con diferencia 8,0
La Hélice: diferencia 8,0. Foto: NASA, NOAO, ESA, the Hubble Helix Nebula Team, M. Meixner (STScI) y T. A. Rector (NRAO), CC BY 4.0.
Lado a lado de los Acantilados de Carina: foto de Webb a la izquierda y render a la derecha, con diferencia 26,7
Los Acantilados de Carina: diferencia 26,7. Al render le faltan las estrellas brillantes con sus picos y el grano fino de Webb. Foto: NASA, ESA, CSA y STScI, CC BY 4.0.

El crítico ocular

El número compara un antes con un después; no dice si algo está bien. Hubo una ronda con más de 360 escenarios «limpios» según las medidas y la pantalla llena de fallos. Por eso cada lámina la mira además un crítico ocular, que contesta a lo que ve y no a la cifra: si de lado hay una pared, si hay rectas del retículo, si la nebulosa es simétrica de espejo, si los colores están separados por línea como en la foto. Si el crítico ve una pared, no se sube, dé la cifra que dé.

9. Cuánto cuesta en la tarjeta gráfica

Todo se mide en la tarjeta integrada de un portátil, la peor de las habituales. La conclusión más importante: el coste es el sombreado de cada muestra, no el espacio vacío. Con el volumen vacío, el caso peor cuesta 6 ms de 306; saltarse el vacío con un mapa de ocupación, como hacen muchos juegos, no ganaría nada aquí.

Izquierda: milisegundos por fotograma de Orión muy de cerca según el modo, de 545 a 0. Derecha: coste de dibujar un millón de puntos de 1, 2 y 4 píxeles y cuatro millones de 1 píxel
Izquierda: Orión a diez aumentos a 1678 × 1090 píxeles. Pintar cada fotograma entero cuesta 545 ms; moviéndose se pinta a media resolución con un tercio de los pasos (32 ms, o 8 ms a un cuarto), y quieta se refina por franjas de unos 20 ms hasta congelarse. Derecha: lo que cuestan las motas. Medidas propias.
CambioEfecto medido
Una variante del shader por nebulosa (forma y paleta fijas: el compilador tira las demás ramas)−10 a −25 %, imagen idéntica
Volumen a media resolución−73 %
Pasos por rayo ×0,6−40 %
Motas a la mitad (con el alfa compensado)−45 %
Detalle de cerca encendido+16 % (Orión, Hélice) a +34 % (Pilares)
Cámara quieta: cuatro pasadas acumuladas y congeladas0 ms de volumen

La acumulación se hace con los pasos completos. Acumular varias pasadas con menos pasos parece lo mismo y no lo es: la exponencial de una suma gruesa no es la media de las finas, y con un tercio de los pasos la Cabeza de Caballo salía con un ribete claro. Y el refinado va por franjas de pantalla con un presupuesto de unos 20 ms por fotograma: sin franjas, pararse daba un tirón de medio segundo.

10. El motor de polvo de los agujeros blancos

El polvo y el gas que salen del agujero blanco no pasan por el motor de nebulosas: los pinta Nebula Dust Engine, un motor de polvo para three.js escrito para Orbit Universe y publicado como código abierto con licencia MIT, con su editor de demostración.

Escena de ejemplo del motor de polvo: una nebulosa de emisión con un carril oscuro, renderizada con los shaders del motor
Una de las escenas de ejemplo del motor de polvo: nebulosa de emisión con un carril de polvo. Render del propio motor.
El flujo del agujero blanco visto a 45 grados, con un chorro azul hacia la cámara
El flujo del agujero blanco a 45°: un chorro polar viene hacia la cámara y sale azul; el otro lado del disco, rojizo. Captura del simulador.

11. Para verlo en el simulador

Cada enlace abre el escenario. Gira la cámara con el ratón o con el dedo: es la mejor prueba de que es un volumen.

12. Fuentes

  1. C. R. O'Dell, P. R. McCullough y M. Meixner (2004), «Unraveling the Helix Nebula: Its Structure and Knots», Astronomical Journal 128, 2339. ADS.
  2. C. R. O'Dell y colaboradores (2013), Astronomical Journal 145, 92 (el Anillo, M57).
  3. R. Wesson y colaboradores (2024), el Anillo con Webb, Monthly Notices of the Royal Astronomical Society 528, 3392.
  4. Z. Wen y C. R. O'Dell (1995), Astrophysical Journal 438, 784 (modelo 3D de Orión).
  5. J. J. Hester (1987), Astrophysical Journal 314, 187 (los filamentos del Velo como láminas de choque de canto).
  6. C. J. Wareing y colaboradores (2018), Monthly Notices of the Royal Astronomical Society 475, 3598 (la Roseta).
  7. N. J. Wright y colaboradores (2011), la Mariposa (NGC 6302) en 3D, Monthly Notices of the Royal Astronomical Society 418, 370. arXiv:1107.4554.
  8. T. Martin, D. Milisavljevic y L. Drissen (2021), el Cangrejo en 3D, Monthly Notices of the Royal Astronomical Society 502, 1864. arXiv:2101.02709.
  9. A. F. McLeod y colaboradores (2015), los Pilares de la Creación con MUSE, Monthly Notices of the Royal Astronomical Society 450, 1057.
  10. J. A. Cardelli, G. C. Clayton y J. S. Mathis (1989), «The relationship between infrared, optical, and ultraviolet extinction», Astrophysical Journal 345, 245.
  11. L. G. Henyey y J. L. Greenstein (1941), «Diffuse radiation in the Galaxy», Astrophysical Journal 93, 70.
  12. B. Strömgren (1939), «The physical state of interstellar hydrogen», Astrophysical Journal 89, 526.
  13. D. E. Osterbrock y G. J. Ferland (2006), Astrophysics of Gaseous Nebulae and Active Galactic Nuclei, University Science Books.
  14. A. N. Kolmogorov (1941), «The local structure of turbulence in incompressible viscous fluid for very large Reynolds numbers», Doklady Akademii Nauk SSSR 30, 301.
  15. Fotos de referencia: ESA/Hubble heic0307a y heic9910a; ESA/Webb weic2205a y weic2616a. Todas con licencia CC BY 4.0.
  16. Nebula Dust Engine (MIT), el motor de polvo del simulador.
Abrir la Hélice Teoría del agujero blanco Todos los escenarios