Sebastián me pasó una imagen de un agujero negro y otra con sus partes explicadas, y me pidió un efecto física y matemáticamente correcto: que se pueda mirar desde distintos ángulos con el mouse, que la parte de atrás del disco de acreción aparezca doblada como en la realidad, que se vea el círculo del horizonte, que el lado del disco que viene hacia la cámara brille más, y que una imagen puesta detrás se deforme según la lente gravitacional. Lo quería como un fondo animado más de Infiniwall, hecho en three.js.

El agujero negro sobre el fondo de nebulosa

La luz, pixel por pixel

Cada pixel sigue la trayectoria exacta de un rayo de luz alrededor de un agujero de Schwarzschild, calculada en el shader. De esa única cuenta salen la sombra, el anillo de fotones, la parte de atrás del disco doblada por encima y por debajo, y la lente sobre el fondo. El disco tiene la temperatura de un disco delgado real, y el Doppler y el corrimiento gravitatorio hacen brillar el lado que se acerca; el Parámetro «Doppler» en 1 es el valor físico.

Antes del shader escribí la misma física en JavaScript con tests que la contrastan con resultados conocidos: el borde de la sombra en 3√3·M, la desviación de la luz en campo débil, el Doppler y la temperatura del disco.

Vista desde más arriba y más cerca: el anillo de fotones rodea la sombra

La cámara se gira arrastrando el mouse, se acerca con la rueda y se mueve con las flechas. Quieta, gira sola y sube y baja un poco, así funciona como fondo de pantalla.

Lo que hay detrás

El fondo se elige entre estrellas, nebulosa, una grilla, un panorama de 360° o un cuadro detrás del agujero. La grilla deja ver cómo tira la lente del espacio alrededor. Al cuadro se le suelta o se le pega cualquier foto, y la lente la deforma; Shift + arrastrar la mueve, Shift + rueda le cambia el tamaño y el doble clic la centra.

La grilla de fondo, curvada por la lente gravitacional

Un cuadro de prueba detrás del agujero, deformado por la lente

Una versión liviana para la TV

Sebastián lo quiso ver en HD en la TV LG del living, que tiene mucha menos potencia de cálculo, y conservando la versión completa. El camino de cada rayo depende sólo de la altura y la distancia de la cámara, así que armamos una calidad «Liviana (precalculada)»: traza los rayos una vez, guarda un mapa de lente, y cada cuadro sólo lo lee. El giro alrededor del agujero sale gratis rotando ese mapa, y cambiar la altura lo recalcula repartido en seis franjas. Se ve igual que la completa —difiere en el 0,03 % de los pixeles— y en la notebook dio 61 cuadros por segundo contra 7 a 3360×1814. En la TV arranca así sola, y se puede elegir desde el panel en cualquier aparato, el celular incluido.

Después pulimos dos detalles de imagen que Sebastián vio: las estrellas del fondo, que ahora reparten su luz dentro del pixel y se quedan con brillo parejo al moverse, y el anillo de fotones, mucho más fino que un pixel, que ahora promedia ocho rayos por pixel en la franja donde vive y se dibuja como una línea continua.

Bengalas

Sebastián quiso poder tirarle algo al agujero y ver cómo lo trata la gravedad. Con la tecla X aparece una bengala violeta bajo el mouse; moviendo el mouse con la tecla apretada se le da velocidad, y una línea punteada muestra el recorrido que haría, hasta dos vueltas alrededor del agujero. Al soltarla sigue la geodésica de una masa: cae, queda en órbita o hace un slingshot. La órbita precesa y dibuja una roseta, y por debajo de tres radios de Schwarzschild termina cayendo, como predice la relatividad.

Apuntando una bengala: la línea punteada muestra el recorrido previsto a través de la lente

La bengala se ve a través de la lente, con su imagen secundaria del otro lado del agujero, y con el mismo Doppler que el disco. Esas imágenes se resuelven en JavaScript, así que funcionan igual en la versión liviana. En la TV, Enter o el botón rojo del control la tiran desde un costado.

En realidad virtual

Sebastián preguntó si lo podía usar en el Oculus. En un Meta Quest aparece el botón «Entrar en VR», con dos modos: un diorama de 50 cm flotando delante, que se rodea caminando y se mira desde arriba o desde abajo, y una órbita con el agujero gigante enfrente. Las bengalas se tiran con la mano, y con los botones de agarre se agarra el agujero: con una mano se lo mueve y con las dos se lo rota y se lo escala, con el cielo pegado a él.

La vista previa de la escena de VR, con el diorama y el cartel de controles

Para que la lente alcance a dibujarse dos veces por cuadro, una por ojo, la calculamos una vez en una tabla que aprovecha la simetría del agujero: la misma física exacta, con pocas lecturas por pixel. Sebastián lo probó en el visor y le pareció perfecto.

Está en https://infiniwall.ip1.cc/?s=blackhole