Inicio >1. Introduccion2. Modelado3. Materiales e Iluminacion4. Animacion5. Render y Postproduccion
5.4. Radiosidad 5.6. Metropolis (LuxRender)

5.5. Pathtracing y Mapa de Fotones (Yafray)

El método de PathTracing fue introducido por Kajiya en 1986 basándose en las ideas del Distributed Ray Tracing para calcular todos los posibles caminos de luz. Algunos problemas de integración del método que no quedaban resueltos como el cálculo de la iluminación indirecta obtenida por el rebote de la luz en una superficie difusa, son resueltos por el PathTracing trazando un rayo aleatorio dentro del dominio de integración para estimar el valor de esta integral. La resolución de la función que queremos conocer (la distribución de la luz) se resuelve trazando rayos aleatoriamente por todos los caminos de luz (debido a que la solución exacta por otros métodos de integración no es abordable) y dividiendo por el número de muestras que tomamos por cada píxel obtenemos una estimación del valor de la integral teniendo en cuenta todos los posibles caminos de luz en ese píxel. Este método de resolución se basa en la técnica de integración de Monte Carlo.

Una de las principales diferencias entre este método y el RayTracing original es la construcción del camino de la luz. En PathTracing sólo se lanza un único rayo en la llamada recursiva, lo cual nos produce un camino (Path), y no un árbol de rayos. Este rayo puede ser un rayo difuso, un rayo especular (espejo) o un rayo transmitido, con una cierta probabilidad.

El principal problema del método de PathTracing es la lenta convergencia a la solución final, lo que se traduce en ruido. Si se conoce la distribución de las regiones más brillantes de la escena, se pueden concentrar las muestras en esas zonas para reducir la varianza rápidamente. En esta idea se basa el método del mapeado de fotones.

Figura 01. Esquema de Construcción y Utilización del Mapa de Fotones: Construcción (Izquierda) y Uso (Derecha).

El uso de Mapas de Fotones fue propuesto por Jensen en 2001, y se basa en desacoplar la representación de la iluminación de la geometría. Se realiza en dos pasos, primero se construye la estructura del mapa de fotones (trazado de fotones), desde las fuentes de luz al modelo (ver Figura 1 (Izquierda)). En una segunda estapa de render se utiliza la información del mapa de fotones para realizar el renderizado de manera más eficiente (Figura 1 (Derecha)).

Figura 02. Representación del Mapa de Fotones y Uso.

Cuando se emite un fotón, éste es trazado a través de la escena de igual forma que se lanzan los rayos en raytracing, excepto por el hecho de que los fotones propagan flux en lugar de radiancia. Cuando un fotón choca con un objeto puede ser reflejado, transmitido o absorbido (según las propiedades del material y un factor aleatorio dentro del dominio del material). En realidad el mapa de fotones está formado por dos estructuras; una para guardar los impactos de fotones debido a las caústicas (efectos de concentración de luz cuando pasan a traves de lentes, objetos de cristal... Ver ejemplo de esfera de cristal en Figura 2), y otro para representar la iluminación global.

En la segunda etapa se renderiza empleando PathTracing, con varias muestras por píxel. Primero se calcula de forma precisa la iluminación directa, de forma similar a como se realizó en RayTracing. Las posibles caústicas de la escena se calculan empleando el mapa de fotones de caústicas que se calculó en la primera etapa. No se utiliza nunca el método de PathTracing para calcular las caústicas debido a que es muy ineficiente (en Figura 2, se percibe el impacto de los fotones de caústicas sobre el suelo). Finalmente, la iluminación indirecta se calcula empleando el mapa de fotones global. Gracias a esta información, el método de Monte Carlo converge antes a la solución correcta y se suaviza enormemente el ruido que presentan este tipo de métodos.

En general, el uso de mapas de fotones ayuda al PathTracing en escenas de difícil iluminación (por ejemplo, interiores con la fuente de luz que incide desde una pequeña ventana) o en la simulación de caústicas.

Yafray: Un buen PathTracer con Mapas de Fotones

Yafray es un motor de render externo a Blender, aunque las opciones de configuración y el resultado del render está integrado. De este modo, habrá que instalarlo independientemente. La nueva versión actualizada de Yafray se denomina Yaf(a)ray, desarrollada desde cero y sin integración en el interfaz de usuario. En este curso emplearemos la versión anterior (Yafray) por contar con paquete oficial debian, y por su sencillez de uso.

INSTALACIÓN DE YAFRAY
Instalación desde repositorios o mediante paquete
  Yafray está como paquete oficial en muchas distribuciones de Linux. En este caso bastará con instalar el paquete del repositorio. Debes comprobar que Yafray está instalado desde un terminal ejecutando yafray -v. La versión con la que trabajaremos en este curso es la 0.0.9. Si tu distribución no cuenta con paquetes oficiales de Yafray, puedes descargar la última versión oficial de la siguiente página web: Descarga Yafray. Cuidado con no descargar el motor de Yaf(a)ray por equivocación!.

Figura 03. Pestaña Render.

Una vez instalado Yafray, podemos elegirlo como motor de renderizado en la lista de motores de render de la pestaña Render (ver Figura 3). Cuando seleccionamos Yafray en la lista desplegable aparecen dos nuevas pestañas con las opciones de configuración de Yafray (Figura 4 y 5). En la pestaña Yafray, se muestran las opciones generales de configuración:

  • XML: xml permite exportar el fichero XML que Yafray toma de entrada. En general y salvo que queramos guardar el fichero para enviarlo a un grid, es mejor no guardar el XML y obtener la representación interactiva (XML desactivado).
  • AutoAA: indica a Yafray que seleccione automáticamente el nivel de AntiAliasing (Oversampling), según el valor indicado en OSA en Blender y el parámetro de calidad de la siguiente pestaña. En general, es buena idea dejar este botón activo.
  • Clamp RGB: Realiza AntiAliasing en zonas de alto contraste.
  • Raydepth: Profundidad máxima del trazado de rayos.
  • Gam / Exp: Ajuste de gama y exposición.

Figura 04. Pestaña Yafray.

Figura 05. Pestaña YafrayGI.

En la pestaña de configuración de Iluminación Global Yafray GI hay dos listas desplegables. En la lista de método de iluminación Method, podemos elegir entre SkyDome, en el que la luz se calcula proveniente únicamente desde el cielo (un cielo infinito del color que hayamos definido el valor Sky en las propiedades del mundo, como vimos en la sección 5.1), o Full, que realiza un cálculo de iluminación global completa (con iteración de la luz entre objetos).

Si elegimos el método SkyDome, Yafray únicamente nos pide el valor de emisión EmitPwr. Esta es la intensidad con que se realizará la iluminación de la escena. Es habitual que una escena bien iluminada con el motor integrado de blender se vea algo oscura en Yafray. Mediante este parámetro podemos ajustar el nivel total de iluminación. El otro método que pro­por­ciona yafray (se­leccio­nan­do en la lista des­ple­gable Method la opción Full) es mucho más realista.

La lista desplegable de calidad Quality situada debajo (ver Figura 5) ajusta, según el parámetro seleccionado, el número de muestras de luz que empleará Yafray internamente. Con el método de renderizado completo, tendremos que especificar dos nuevos parámetros; Depth (rebotes de la luz entre objetos) y CDepth (rebotes de la luz dentro de objetos translúcidos para obtener caústicas). El parámetro EmitPower situado en el inferior del panel permite, como hemos comentado anteriormente, ajustar la intensidad de las fuentes de luz de la escena. En algunas escenas habrá que ajustar este parámetro (normalmente incrementarlo) para obtener un valor de iluminación correcto.

PRUEBAS DE RENDER
Calidad y Resolución
  Muy Importante: Las primeras pruebas de render deben realizarse a baja resolución (25% de la resolución definitiva o incluso menor), a baja calidad (parámetro Quality a Low) y desactivando el Oversampling (OSA). Cuando los valores de iluminación sean correctos, activaremos el render a mayor calidad con un nivel de Oversampling aceptable (8 suele ser suficiente).

Si activamos el modo Cache, aceleraremos los cálculos empleando Irradiance Cache. Esta cache nos evita tener que calcular la iluminación global en cada punto; selecciona algunos píxeles para realizar los cálculos y después interpola el valor de iluminación, acelerando notablemente los cálculos. En general, es buena idea activar el botón Cache. En ShadQu indicamos la calidad de las sombras; con valores más altos obtenemos mejores resultados (naturalmente, con mayor tiempo de cálculo). Prec indica la precisión del píxel (un valor más bajo implica mayor calidad). Ref es un valor umbral, donde especificamos el cambio de intensidad que vamos a permitir entre muestras. Valores más pequeños dan resultados más precisos.

El botón NoBump permite evitar el cálculo de cambio del vector normal en la superficie si se utiliza Bump Mapping. Esto es mucho más rápido si se está utilizando Irradiance Cache.

Mapas de fotones con Yafray

Los fotones Photons ayudan al cálculo de la iluminación. Funcionan especialmente bien en escenas de interiores donde no hay cielos visibles, donde la luz entra por una zona definida (por ejemplo, una ventana o una ranura en una pared). Count indica el número de fotones a lanzar, un número mayor implica un restulado más suave. Radius indica el nivel de difuminado entre fotones. Es importante encontrar un valor adecuado para que el resultado sea suave. MixCount indica el número de fotones que van a situarse dentro del radio anterior. Finalmente, el botón Tune Photons sirve para obtener una respresentación preliminar del mapeado de fotones y ver si la imagen acabará correctamente iluminada.

Ejemplo de uso

Ficheros asociados:
Escena base Ejemplo Yafray (6MB)

La imagen resultado inicial   Video: 00:06 se ha obtenido empleando los materiales por defecto y Ambient Occlusion (Approximate) como método de render. Añadimos propiedades básicas de materiales (reflexión y transparencia), y una textura de imagen para el plano del suelo   Video: 01:23. A continuación elegimos el motor de render Yafray   Video: 01:28, desactivamos XML para obtener una representación de los pasos del render   Video: 01:30 y elegimos el método de iluminación global completa Full, con baja calidad Low (para realizar las pruebas) y activando Irradiance Cache Cache   Video: 01:38. Definimos de nuevo algunas propiedades de materiales. Cuando elegimos Yafray como motor de render, la pestaña de Mirror Transp   Video: 01:46 cambia ligeramente, y permite elegir entre configuraciones para cristales y materiales reflectantes realistas. Elegimos el objeto transparente y le asignamos el preset de cristal de color   Video: 01:50. Procedemos de forma análoga con el otro objeto asignándole el preset de reflexión uniforme. El resultado es mucho mejor que el obtenido con el motor interno de Blender   Video: 02:20.

Figura 06. Izquierda: Ambient Occlusion - Centro: Yafray sin HDRI - Derecha: Yafray con HDRI.

A continuación utilizaremos un mapa de iluminación HDRI, como explicamos en la sección 5.1. Como el resultado en   Video: 03:45 está un poco quemado (debido a que el mapa de iluminación tiene una intensidad alta), bajamos el valor de EmitPwr y GIPwr   Video: 03:52. En la Figura 6 se muestra una comparativa de la calidad conseguida entre el motor interno de Blender y Yafray. Como se puede apreciar en el suelo de la figura de la derecha, el uso de mapas HDRI llevan asociados el cálculo de caústicas.

Player

5.4. Radiosidad 5.6. Metropolis (LuxRender)