Una ecuación para iluminarlos a todos

Por Alex Méndez Feliu, el 17 octubre, 2014. Categoría(s): Tecnología

¿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.

En la retina hay cuatro tipos de células fotorreceptoras, los conos con un tipo para cada color básico, rojo, verde y azul, y los bastones, que miden la instensidad. Imagen tomada de aquí

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.

Imagen de un modelo virtual de coche iluminado por una luz de entorno (environment map) Imagen tomada de http://bmwmag.com/?p=11128
Imagen de un modelo virtual de coche iluminado por una luz de entorno (environment map) Imagen tomada de aquí

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.

Un mismo objeto visualizado con distintos materiales. Imagen tomada de http://blenderartists.org/forum/showthread.php?278285-Yet-Another-Thread-about-Cycles-Materials/page7
Un mismo objeto visualizado con distintos materiales. Imagen tomada de aquí

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:

Este es el aspecto que presenta la ecuación de render. Para una descripción de los símbolos y sus significados, podéis acudir a la página de la wikipedia http://en.wikipedia.org/wiki/Rendering_equation
Este es el aspecto que presenta la ecuación de render. Para una descripción de los símbolos y sus significados, podéis acudir a la página de la wikipedia

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



Por Alex Méndez Feliu, publicado el 17 octubre, 2014
Categoría(s): Tecnología