Este post es una traducción directa del artículo original publicado por Mike Pan en blog.thepixelary.com. Así que antes de empezar, muchas gracias a Mike por permitirme el uso de las imágenes y los ejemplos.
Gracias también a Troy Sobotka, el creador de filmic-blender, por tomarse el tiempo y el trabajo de explicar y aclarar el tema a través de twitter para entender mejor todo este asunto.
Desde la perspectiva de la física, la luz y el color son inseparables, no es posible tener uno sin el otro. En un pathtracer como Cycles, son básicamente la misma cosa. Así que estos términos se usarán para referirse a lo mismo de aquí en adelante.
Es un artículo bastante largo, así que tómense su tiempo para leerlo con comodidad y entender toda la teoría. Vamos a empezar con la escena clásica de Cornell Box con una fuente de luz:
Notarán que se han tomado varios puntos aleatorios en la imagen y se han incluido sus valores en RGB. Tenemos rojo, gris y blanco puro. Hasta ahora todo bien. Recuerden, esta escena está iluminada con una sola fuente de luz desde arriba. Vamos a ver qué pasa cuando doblamos la intensidad de 10 a 20.
Ok, la imagen en general es más brillante cómo es de esperarse. Pero si volvemos a revisar los puntos seleccionados vamos a ver que si bien la intensidad de la luz fue doblada, los valores en pixeles no son el doble de la imagen anterior…
Veamos las imágenes en comparación:
En esta imagen se ha agregado otra linea bajo la primera. Los valores que dicen “display” se refieren a la información que ya se presentó en las imágenes anteriores. Esos son los valores mapeados directamente desde la imagen JPEG. Los valores que dicen “scene” se refieren a la información real con la que estaba trabajando el motor de render – representan el nivel de energía o potencia de la luz en ese pixel específicamente. Como puede verse en la comparación, aunque los valores de display no se hayan doblado al aumentar la energía de la luz, los valores de scene si fueron duplicados como debería ser. (Algo muy importante para notar en el punto blanco, es que los valores no se ven reducidos a 1 en los valores de “scene”).
Entonces, si los valores de scene representan los valores reales de lo que está pasando en el mundo 3D, porqué la imagen final no nos muestra estos valores…? Y cómo es que el computador hace la transformación de valores de escena (scene) a valores de display?
Esto es lo que conocemos como Gamma. La historia y teoría de Gamma no son realmente importantes por el momento. Todo lo que deben saber es el valor mágico de 2.2. Este es el valor usado para transformar el color (o luz) de la escena en el color del display que vimos antes.
Para comprobarlo, es suficiente con aumentar cualquier valor de escena a ½.2 y el resultado será el valor de display correspondiente.
Pero porqué es necesaria dicha transformación? Cómo se ve la imagen si usamos el color “original” de la escena como lo entrega el render? Es decir, sin ninguna transformación?
No sólo es muy oscuro, es poco interesante y no se ve bien. Principalmente por el contraste tan marcado.
Este es el primer concepto que debe aprenderse y recordarse: Los valores de escena (scene-referred) y los valores de display (display-referred) son dos cosas completamente diferentes. De forma más simple, tenemos que aplicar una transformación gamma al espacio de color de la escena para conseguir una imagen que se vea bien en el espacio de color del display.
Así que ya sabemos cómo la transformación gamma es usada para convertir la información del render en una imagen que se ve bien, ahora el asunto es tratar de que se vea aún mejor. En vez de hacer una transformación gamma tradicional, usemos una tabla de consulta (look-up-table o lut) que está diseñada para darle a la imagen un look más cinemático, en este caso filmic-blender.
La diferencia entre la imagen original (izq) y la versión filmic (der) es bastante sutil. Noten que el punto más saturado (o hotspot) en la pared roja ha desaparecido, y en su lugar aparece un brillo mucho más natural. La marcada línea sobre saturada en la esfera naranja desaparece también, y el reflejo de la luz ya no se ve sobre-expuesto.
Esa es la principal ventaja de la configuración filmic-blender, es capaz de mostrar un rango dinámico mucho más amplio de la imagen, y eso permite que la imagen tenga un look mucho más refinado y natural en las zonas de alta exposición, especialmente en colores saturados.
En resumen: La configuración de Filmic (filmic-blender lut) es una poderosa herramienta que transforma los valores de escena lineales en valores de display no lineales.
Nota:
Esta transformación no es nada nuevo, quienes hayan trabajado haciendo corrección de color y/o colorización para video (o fotografía) sabrán que existen en internet muchos luts disponibles que hacen transformaciones similares; son como pequeños archivos prediseñados que aplican diferentes looks, dependiendo de lo que se quiera lograr con la imagen. Filmic resulta como una gran noticia, no porque solucione un problema o sea una nueva herramienta, sino porque mejora el flujo de trabajo, y permite que durante el proceso de iluminación se tomen decisiones más acertadas. Básicamente filmic realiza una administración de color más inteligente en Blender.
En general, con los programas de 3D se convirtió en regla común el uso de colores que no sean demasiado saturados o luces que no sean demasiado fuertes para evitar problemas incorregibles en post; y efectos como bloom, glow, saturación y exposición son agregados o corregidos en post-producción. Con Filmic, parte de estas “reglas” pueden ignorarse, para trabajar de una manera más realista, es decir, más cercana a la fotografía.
Pero filmic no hace magia por sí solo. Para sacar los mejores resultados de esta configuración, la escena debe ser iluminada de manera realista desde un principio. Cycles es un motor de render pathtracer, esto significa que para que funcione de manera correcta, los valores de luz deben ser realistas. El mundo real tiene un rango dinámico bastante amplio, algo a lo que no estamos acostumbrados en el mundo de CG.
Siempre que estén iluminando en Cycles, tengan en cuenta que el nivel de energía de una lámpara como el sol se mide en Watts/m2. Todas las otras luces usan Watts (fuente). Esto significa que para un transporte de luz más correcto, una bombilla casera común debería estar en el rango de 60-80, mientras que el sol debería tener un valor de 200-800 para luz de día, dependiendo del horario, latitud, y si está nublado o no.
Sin los valores lumínicos correctos, la escena no va a verse bien, incluso usando filmic. La luz no se propagará lo suficiente, y simplemente va a verse artificial. En la imagen de arriba (izquierda), el sol tiene un valor de 50, no se usa un valor más alto tal vez por miedo a “estallar” los brillos y sobre-exponer la imagen; pero cuando el sol tiene un valor más realista (500) como se ve en la derecha, la distribución de la luz es mucho más realista y la imagen es más agradable.
Trabajando con filmic, hay que perder el miedo de sobre-exponer la imagen. El mundo real difícilmente puede acomodarse en el rango dinámico de una cámara. Y filmic es especialmente útil en casos con luces muy fuertes, porque es capaz de matizar las áreas con mayor exposición resultando en una imagen mucho más natural y agradable. Comparen ahora el cuarto renderizado con y sin el lut filmic, usando en ambas versiones los valores correctos de la luz:
Pueden verse claramente los brillos molestos y los puntos sobre saturados en la imagen de la izquierda. Esos problemas no aparecen en la imagen de la derecha. Filmic permite ir más lejos en términos de iluminación sin tener que preocuparse por problemas derivados de sobre-exposición en la imagen.
Ok, hasta el momento hemos aprendido que filmic es un lut, y que transforma los valores lineales de la escena en una hermosa imagen no lineal para display. Pero eso no significa que deba usarse siempre con todas las imágenes. A veces es necesario trabajar con imágenes que también sean lineales (es decir, para post-producción y compositing).
Vamos a hablar un poco más sobre la linearidad de la luz.
La luz es aditiva. Eso significa que debería ser posible separar la contribución de cada fuente de luz y luego sumarlas entre sí, para lograr exactamente la misma imagen que se tendría si se renderizaran todas las luces juntas. La habilidad para hacer esto, y hacerlo correcto, es crucial para hacer composición y efectos visuales donde la luz y el color son generalmente ajustados de maneras bastante dramáticas.
Entonces vamos a intentarlo con la escena de la sala. Se ha hecho un render de cada luz en una capa separada y se han guardado como archivos TIFF de 32bit:
Puede verse claramente que no funcionó. La combinación de las luces genera una imagen sobre-expuesta.
Aunque se guardaron las imagenes originales en 32bits para no recortar los valores de color, el formato tiff no guardó los valores de la escena. Cuando la imagen se guardó, pasó por el proceso de transformación a valores de display, así que los valores que estamos viendo no son lineales, como en la escena, son valores de display no lineales. Esto pasa siempre, independiente de que se esté usando filmic o no.
Este es un gran problema porque cualquier manipulación que se haga en la iluminación o en los colores, se está haciendo sobre una imagen que ya convirtió todos los valores de la escena a valores de display no lineales, los cuales no deberían modificarse más, al menos no significativamente. La forma correcta de mantener la información de la escena a la hora de hacer post-producción es exportar la imagen en un formato que también opere con valores de escena lineales como EXR.
Vamos a ensayar el mismo proceso con EXRs. (Como los archivos EXR son lineales, en el ejemplo han sido convertidos con filmic para display)
Ahora todo funciona exactamente como debería! Usando la información lineal para composición y post-producción es realmente la única forma de asegurar que la escena se mantiene físicamente correcta. La transformación final de valores de escena a valores de display debería hacerse únicamente cuando vamos a exportar la versión final de la imagen o animación.
En Blender, todos los formatos de imagen respetan la configuración de administración de color que se use (sRGB o Filmic por ejm). Excepto por EXR, que siempre va a guardar la imagen con los valores que tiene la escena, no con los valores que vemos en pantalla (o de display). Es decir, este es el único formato que guarda la imagen sin aplicar ninguna transformación.
En otros programas, (y con otros motores de render) funciona básicamente igual. EXR es el formato que va a mantener la info que sale de la escena intacta, con el fin de manipular posteriormente sin perder información de color o iluminación. Similar a lo que hacen las cámaras DSLR cuando se configuran para guardar las imágenes en RAW.
Como las luces son aditivas, y se ha renderizado cada luz de la escena como un EXR independiente, es posible jugar con el color y la contribución de cada luz en post-producción, lo que permite generar imágenes y looks muy diferentes sin necesidad de volver a renderizar.
Esta es la flexibilidad de trabajar directamente con la información de la escena, y no con la información de las imágenes que ya han sido transformadas.
Finalmente hemos llegado al final de este post. Se han hecho simplificaciones (teóricas y matemáticas) para hacerlo más digerible, y hay muchos otros asuntos importantes que no se han mencionado. Desde color, no se mencionó para nada el tema de wide gamut (o gama amplia de color) y los diferentes perfiles de color. Desde el punto de vista de creación, todavía hay que hablar de aspectos como oclusión ambiental (AO), clamping, y los diferentes nodos de compositing que funcionan únicamente en imágenes que ya han sido transformadas para display. (La versión corta es: no usarlos!!).
Ojalá haya sido un proceso educativo y entretenido. Quedamos pendientes de la segunda parte. 🙂
me encanto hagan más tutoriales de estos
LikeLike