31/10/13

Iluminación directa e indirecta

Cuando trabajamos con imágenes y escenas 3D generadas por ordenador, uno de los factores más relevantes a la hora de trabajar con nuestra escena es la iluminación. Actualmente hay muchas técnicas y motores de render que realizan simulaciones muy reales del comportamiento de la luz dentro de una escena. Hay muchos métodos para el cálculo de dichas simulaciones y que podremos pararnos a analizar en otro momento, pero ahora queríamos centrarnos en lo más básico: las diferencias entre la iluminación directa y la indirecta.

Para comenzar creemos conviene recordar como funciona la luz para saber distinguir entre lo que es una iluminación directa y lo que es indirecta. De forma muy genérica podemos decir que toda fuente de luz emite unas ondas que rebotan sobre los objetos y trasladan al observador una determinada cantidad de luz, lo cual nos permite distinguir entre los diferentes objetos entre sí y también sus características o colores.

Hablando en términos de CGI, una iluminación directa es aquella que se consigue al crear una fuente de luz que emite rayos de luz e iluminan la escena sin rebotar en los objetos. De esta forma, las superficies tienen dos posibilidades: o están iluminadas o no lo están.






La aplicación de este método como cálculo de iluminación dentro de la visualización arquitectónica, genera imágenes muy simples con poca información pero en cambio son extremadamente rápidas de calcular.

Por otro lado, la iluminación indirecta es aquella que reciben los objetos como consecuencia del rebote de la luz sobre otros objetos en la escena. Es decir, la que no proviene directamente desde la fuente de luz sino de su reflexión, refracción o transmisión a través de otros objetos. 



La combinación de la luz directa y la luz indirecta nos da una imagen más real para el diseño de nuestras escenas. Ahora ya no solo hay zonas iluminadas y zonas que no lo están, sino que también aparecen zonas en penumbra o zonas con diferentes grados de iluminación.

Evidentemente, el comportamiento real de la luz es mucho más complejo que todo esto y por tanto el simularlo virtualmente requiere de una gran potencia de calculo. Cuantas más veces hagamos rebotar la luz entre los objetos de la escena, más real será la simulación que consigamos.

Además de todo esto, hay que sumar que los materiales del mundo real suelen ser también muy complejos y sobre ellos la luz reacciona de diferentes modos, con lo cual hay que tener en cuenta sus características de reflexión, refracción, transmisión, rugosidad... etc. Simular todas estas características y el comportamiento de la luz sobre ellas es realmente complejo y existen multitud de métodos y software capaz de simularlo de un modo u otro.


Evidentemente cuando trabajamos intentado conseguir realismo en nuestras escenas de arquitectura es fundamental estudiar cómo se comportan los materiales en el mundo real para ser capaces de trasladar sus propiedades físicas al software con el que estemos trabajando y así poder conseguir las infografías que deseamos.

De este modo, cuanto más compleja sea la escena y más detenimiento pongamos en el desarrollo de los materiales y en el comportamiento de los mismos frente a las fuentes de luz que hayamos colocado, más realismo podremos conseguir en nuestros trabajos.

A esto, además, hay que sumar el método que utilice nuestro motor de render para realizar el cálculo de la iluminación. Un método completamente real (el que usan los llamados motores unbiased) realizaría un cálculo infinito de rebotes de luz sobre la escena, con lo cual necesitamos una potencia de cálculo abrumadora, aunque cada vez es más viable. Pero por suerte existen métodos para realizar aproximaciones realmente asombrosas del comportamiento de la luz, que si bien no son completamente reales, sí que realizan simulaciones de iluminación global casi indistinguibles de un cálculo real.


El estudio de la simulación del comportamiento de luz llevó al desarrollo de dos algoritmos de Iluminación global que son en los que se basan principalmente todos los métodos, el RayTracing (1980) y el Radiosity (1984). El primero de ellos realiza un cálculo por muestreo de puntos y el segundo por elementos finitos. Estas dos técnicas han ido evolucionando e incluso se han mezclado para conseguir aprovechar las ventajas de cada una de ellas. En cualquier caso el estudio del funcionamiento de cada uno de estos métodos, o de otros como el Path Tracing, Montecarlo, Fhoton Mapping, etc. quedan para futuras entradas.

0 comentarios: