19/11/13

Ambient Occlusion

Unas semanas atrás hicimos una pequeña introducción a los diferentes pases de render. Hoy vamos a empezar a verlos particularizados y a profundizar un poco sobre ellos. Empezamos con uno de los más conocidos.

Ambient Occlusion (AO) es un concepto ampliamente nombrado en el mundillo de las imágenes generadas por ordenador (CGI por sus siglas en inglés). La traducción literal sería “oclusión ambiental”, aunque rara vez lo he encontrado nombrado así, inclusive en medios de habla hispana. Sin embargo dicha traducción nos da una aproximación bastante acertada a la definición del mismo.

Se trata de un método usado por gran cantidad de software mediante el cual se acentúa cierto realismo en las imágenes. Es una forma rápida y ecónomica en cuanto a recursos, de simular una iluminación global de nuestra escena.


Y como la mejor forma de entenderlo es verlo, aquí un ejemplo:



Esto que mostramos aquí es un pase de ambient occlusion de una escena relativamente compleja. Como vemos se trata de una imagen en escala de grises, y como vemos, es una imagen en la que se puede entender perfectamente toda la geometría. ¿Cómo se genera dicha imagen? Pues básicamente lo que hace el ordenador es estudiar cada uno de los puntos de nuestra geometría y evaluar como de “escondido” está dicho punto respecto del cielo. Desde cada uno de esos puntos se lanzan una cantidad de rayos proporcional a una opción llamada “samples” (no siempre presente). De cada uno de esos rayos se evaluará si golpea con otros objetos de nuestra escena antes de alcanzar el cielo. La cantidad de rayos que se ven interrumpidos frente a aquellos que logran alcanzar su objetivo, mediante una relación matemática, terminará dando un valor entre 0 y 1, correspondiendo el 0 al color negro y el 1 al color blanco.

Para entender como el ordenador asigna finalmente este valor a cada pixel, hay que mencionar el modo de color HSV (Hue, Saturation, Value). A la hora de asignar dicho modo a nuestro mapa de ambient occlusión, Hue (matíz) y Saturation (Saturación) serán siempre 0, mientras que a Value se le asignará el valor obtenido mediante el método descrito.

Es importante mencionar que estos rayos no sólo tienen en cuenta los objetos contra los que impactan, sino que también tienen en cuenta si los materiales asignados a dichos objetos tienen transparencia. En este sentido, si un objeto es un 50% transparente, un punto cualquiera no estará completamente oculto respecto a dicho objeto, estará sencillamente semioculto...como siempre, lo mejor para entenderlo, una imagen:


Lo que hemos hecho en esta imagen ha sido crear un plano de suelo y otro de pared, aplicando a este último un gradiente de materiales aumentando progresivamente la transparencia del mismo. Para entender mejor como esta transparencia afecta a nuestro mapa de ambient occlusion hemos ido rebajando poco a poco el valor del mismo, de modo, que como puede observarse, la oscuridad aumenta siempre mucho mas desde la esquina con la pared completamente opaca, hasta el extremo contrario donde tiene un comportamiento igual a aquellos puntos menos ocluidos del suelo.

Llegados a este punto ya tenemos una percepción mucho más clara de qué es un mapa de ambient occlusion, cómo se crea y como se comporta ante la transparencia de los materiales. Perfecto, pero estamos viendo que los mapas de AO son siempre una escala de grises, mientras que nosotros trabajamos generalmente con imágenes a color, así que, ¿cómo lo usamos?.
Lo más habitual es que nuestro software preferido directamente nos de opciones para ensamblarlo todo juntito y que nosotros sólo veamos el resultado final, sin embargo, para poder tener un control mucho más exhaustivo sobre las imágenes que generamos, es recomendable aprender a tratar estos mapas por separado, pudiendo controlar muy fácilmente a posteriori la intensidad con la que aplicamos dicho mapa, en caso de que no quedar contentos con las opciones elegidas antes del render. Y aquí es donde entran los famosos “modos de fusión”, presentes en prácticamente cualquier software de edición de imágenes y sobre los que hablaremos en detalle en otra ocasión.


El modo aceptado generalmente para la unión de nuestra imagen con un pase de AO es el “multiplicar”. Sin embargo en mi experiencia y según lo que andemos buscado, puede ser interesante probar otros diferentes.

Es importante mencionar que lo realmente correcto es multiplicar el AO por la capa de color del diffuse, no por el diffuse completo ni por supuesto por la combinación con mapas especulares o de transmisión.

Veamos un ejemplo de como controlar dicho pase de AO al aplicarlo sobre nuestra imagen:


Para explicarlo hemos creado una pequeña escena con algunos objetos. Hemos usados materiales simples y no hemos usado ningún punto de luz, sólo algo de luz ambiental. En la imagen más a la izquierda podemos observar el resultado de dicha escena. Siguiendo el esquema anterior hemos hecho varias pruebas. Como puede observarse podemos usar nuestro mapa de ambient occlusion para cambiar completamente la iluminación de nuestra escena; si previamente a multiplicarlo por la capa de color diffuse aprovechamos para aumentar o dismunuir el valor de sus píxeles, podemos aclarar u oscurecer la imagen respectivamente.

En esa escena tan sencilla es obvio que comparando cualquiera de las 5 pruebas con AO frente a la primera que no lo tiene, la percepción del espacio se hace mucho más evidente con el uso de este, dotando a la escena de un realismo que no tenía.

Por último os dejamos con un pequeño vídeo en el que podéis ver cómo el mapa de AO del principio puede usarse para retocar por completo la iluminación de esa escena.


En siguientes post seguiremos aprendiendo más acerca de otros pases de render. Stay tunned!

0 comentarios: