¿Por qué vemos lo que vemos?
Cada segundo, con los ojos abiertos, miles de millones de fotones entran en nuestros ojos a través de las pupilas, impactando en las células de nuestras retinas. Estas células son fotosensibles y reaccionan al impacto de fotones de diferentes longitudes de onda mandando señales al cerebro a través del nervio óptico. Es nuestro cerebro el que interpreta estas señales creando una imagen de lo que tenemos en nuestro entorno.
Vemos las cosas porque a cada célula de la retina le llegan fotones diferentes, con distintas longitudes de onda, y el número de fotones que llega a una célula puede ser mucho mayor que el de los que llegan a la célula contigua. Vemos cosas de diferentes colores (correspondientes a las longitudes de onda) e intensidades (que corresponde al número de fotones), en distintas partes de la retina, y gracias a eso, reconocemos objetos, fruta, agua, caras, a nuestras personas queridas, al animal que queremos cazar y a nuestros enemigos. Y gracias a que normalmente tenemos dos retinas separadas unos centímetros y que nos proporcionan dos imágenes ligeramente diferentes, el cerebro es capaz de calcular distancias y, con práctica, hacer que el brazo lance una piedra hacia el conejo que pasta a unos metros frente a la cueva.
Después de miles de años nuestras necesidades humanas y sociales han evolucionado, y al conejo lo crían unos pocos en granjas, mientras que los demás se han dedicado a otras cosas como inventar la fotografía, hacer películas, inventar los ordenadores e incluso usar los ordenadores para hacer películas.
La visualización realista de objetos virtuales (los que no existen en la realidad sino en la memoria de una computadora) ha surgido como una necesidad en el cine para hacernos creer que el dragón o el orco son reales, pero sus aplicaciones se extienden al diseño industrial, para vendernos un nuevo modelo de maquinilla de afeitar de cinco cuchillas antes siquiera de fabricar la primera, al diseño de interiores, para ver cómo quedará nuestra cocina pintada de verde pistacho, a la arquitectura, mostrando cómo quedará la nueva skyline de Londres cuando acaben los cinco rascacielos que están construyendo, o al patrimonio histórico, para recrear en un museo cómo lucían las murallas de Barcelona en la época romana, por ejemplo.
Pero volvamos a los fotones. El problema que tratamos de resolver en visualización realista es el siguiente. Tenemos una escena virtual con varios objetos que queremos «fotografiar», una cámara que enfoca a esta escena y un conjunto de luces que nos van a iluminar esta escena. Dados estos elementos, ¿qué color e intensidad van a tener cada uno de los pixeles de la imagen virtual que queremos calcular? En otras palabras, ¿cómo podemos hacer una simulación de los fotones (y sus características) que llegarían a la posición correspondiente al pixel en el sensor de la cámara?
Lo primero de todo es simplificar. Vamos a agrupar fotones y considerar que cada fotón lleva asociado un valor de rojo, verde y azul, que al fin y al cabo son los colores que podemos ver. Hay otros modelos, llamados espectrales, que consideran más colores del espectro lumínico, para cálculos más precisos de colores, como para difracciones de la luz en prismas, por ejemplo.
En nuestro modelo los fotones salen disparados de las fuentes de luz, que pueden ser objetos de la escena con propiedades de material emisivo, y los podemos visualizar directamente, o ser otros tipos de luces. La fuente de luz fundamental en la vida real es el sol, pero probablemente no nos conviene modelar una estrella enorme a 150 millones de kilómetros del coche virtual que queremos visualizar, así que hay un modelo de luz, llamado «skymap» (mapa celeste), que simula cómo el cielo ilumina nuestra escena, y al que, además del sol, podemos añadir nubes o elementos del paisaje que mejoran la iluminación.
Pero la gran mayoría de objetos no emiten luz. Así, ¿cómo llegan los fotones a nuestros ojos desde esos objetos para que los podamos ver? La respuesta es «por la reflectividad». Si un objeto es, por ejemplo, rojo, eso significa que ese objeto absorbe todos los fotones que le llegan que no sean de la parte del espectro con frecuencias rojas y los que sí son rojos los reemite en todas direcciones, incluída la dirección en la que están nuestros ojos. Esta redistribución de los fotones que llegan a la superficie de un objeto puede producirse de muchas formas diferentes, siendo los casos más extremos (y más simples de calcular, por cierto) la distribución uniforme (o difusa) y la especular, donde los fotones que salen del objeto vienen únicamente de la dirección del reflejo. Este último es el caso de los espejos y los metales pulidos. Entre una y otra distribución, podemos modelar todas las intermedias usando unas funciones probabilísticas llamadas «función de distribución de la reflectividad bidireccional», conocidas como BRDFs por sus siglas en inglés. Este modelo se puede ampliar para añadir materiales translúcidos, transparentes o incluso otros fenómenos como fluorescencia o fosforescencia.
Así, el color que vemos en un punto de la superficie de un objeto depende no sólo de las propiedades de ese objeto, sino de la dirección desde la que estamos mirándolo y de la cantidad de fotones que llegan a ese punto desde todas las direcciones. Puede ser que ese punto tenga visibilidad directa con una fuente de luz, entonces tiene iluminación directa, o no, y entonces está en sombra. El punto también recibe fotones de forma indirecta desde los objetos que tiene a su alrededor, y ésa es la iluminación indirecta. La integración de la luz que viene de todas esas direcciones multiplicada por la BRDF de ese objeto en ese punto (que tiene en cuenta las direcciones de entrada y salida de los fotones en ese punto) nos da una intensidad de un color, que sumaremos a la emisividad del objeto en ese punto, si es que es una fuente de luz, para obtener el color que veremos en el pixel desde el que estamos mirando.
Todo esto que os he contado se resume en una única fórmula, llamada la ecuación de render, y que tiene este aspecto:
El objetivo de la visualización realista por ordenador es resolver esta ecuación en cada punto visible de la escena, eso en primera instancia, pero para ello hace falta resolverla también para lo que se ve desde cada punto inicial, y también para los puntos que se ven desde éstos, y así hasta el infinito. Vamos que además de complicada, esta ecuación es recursiva.
Hay varias técnicas y algoritmos que resuelven esta ecuación, y se ha investigado mucho desde que fue propuesta en 1986, pero su complejidad y los avances en hardware y lenguajes de programación hacen que todavía tengamos camino que recorrer en la búsqueda de más y mejores soluciones para ella.
Referencia al artículo
Aquí se puede obtener el artículo original
Se doctoró en informática gráfica en el 2007, después de cinco años de sentirse afortunado por tener la mejor beca de investigación predoctoral de España a 13200 euros el año. Inmediatamente después fue abducido por una empresa inglesa y pasó siete años en Cambridge. Ahora está viviendo nuevas aventuras en Múnich.