Este post incluye contenido exclusivo para los suscriptores de elephant vfx pro. Un video de 20 minutos explicando el proceso en detalle.

Ya hemos hablado en el blog, y en nuestros cursos, en varias ocasiones acerca de normalización de referencias, neutralización, white balance, etc. No hace mucho, escribí este artículo sobre tech grading en VFX, donde explicaba un poco el proceso más común que siempre tenemos que realizar con cualquier footage que deseemos incorporar en un pipeline de producción de efectos visuales.

Generalmente y siempre en Nuke, podemos utilizar el gizmo mmColorTarget con macbetch charts de referencia fotografiadas en unas condiciones lumínicas conocidas, para realizar el proceso de neutralización. En ocasiones, trabajaremos en producciones donde por las razones que sean, no podamos utilizar el gizmo mencionado, o puede que simplemente trabajames en un software de composición linear diferente, como Fusion o Flame.

También es posible que estemos utilizando referencias de macbeth chart que no son Xrite, las más comunes utilizadas en la industria. Y por lo tanto, el gizmo mmColorTarget no funcione, ya que está construido para trabajar con estas cartas de color. En esta demos estoy utilizando una carta de color Spydercheker 24 de Datacolor.

Aquí explico un método más genérico, con herramientas propias de Nuke, sin necesidad de gizmos externos, para realizar una neutralización de footage decente. En un futuro explicaré este mismo método en Fusion.

Este es el footage que vamos a utilizar para esta demo. En este caso, es una simple referencia, que perfectamente podría ser nuestro plate para look-dev, o una referencia de iluminación para la recreación de un set. Nótese que he buscado condiciones lumínicas extremas, precisamente para poner en evidente manifiesto esta técnicas, para que no haya espacio para sutilezas :)

  • Para no complicarnos demasiado, y entender bien el concepto de neutralización, he decidido trabajar de la forma más simple posible en cuanto a espacios de color se refiere. Es decir, vamos a trabajar de forma linear y visualizando el footage a través de una curva sRGB. De este modo, Nuke está configurado en consecuencia.
  • En un pipeline de cine, raramente vamos a trabajar así. Seguramente trabajaríamos con una gestión de color más complicada que una simple curva, por ejemplo OCIO o ACES. O en el más simple de los casos, un LUT creado por la producción. Ya hablaré en un futuro de como integrar footage linear y sRGB en un pipeline ACES.
  • Debido a las condiciones lumínicas extremas de la imagen, he realizado esta fotografía con un ISO de 1200, consecuentemente tenemos bastante grano en la imagen. Queremos samplear el gris neutro de la carta de color debidamente, así que lo primero que voy a hacer en este caso, es utilizar un denoise.
  • En este caso no perdemos calidad y obtenemos un plate limpio. Y en el caso de perder calidad tampoco importaría demasiado, ya que solo queremos samplear valores del swatch gris, el resto de la imagen nos importa poco en este paso.
  • Lo primero con lo que tenemos que lidiar de cara a neutralizar un footage, es el white balance. Identificar si las fuentes lumínicas son cálidas o frías. En un entorno controlable, deberíamos de conocer todos los valores de las luces, potencia, temperatura de color, etc. Las macbeth chart están calibradas suponiendo que las fuentes lumínicas son perfectamente blancas y lineares, y en consecuencia, podemos obtener la información rebotada de los swatches.
  • En este caso, no conocemos los detalles de las fuentes lumínicas, así que lo que vamos a hacer es simplemente desaturar la imagen. De este modo, obtenemos nada más información de luminancia, olvidándonos del factor temperatura de color.
  • Conectando un color lookup a la imagen original, justo después del denoise, y con las 3 curvas seleccionadas, sampleamos el valor del gray swatch en el source.
  • En el target, vamos a samplear el mismo gray swatch pero en este caso en la imagen desaturada, ya que esa debe ser la luminancia a utilizar en nuestro plate.
  • Ya hemos solucionado el problema de white balance. El siguiente paso es linearizar la imagen. Para ello necesitamos que el grey swatch nos devuelva una respuesta conocida, que en este caso es de más o menos 0.18 que es el valor gris neutro en linear space.
  • Podemos utilizar un exposure node y ajustarlo hasta obtener el valor deseado, o simplemente utilizar otro color lookup y ajustar el source y target en consecuencia.
  • Y con esto hemos terminado la neutralización de esta imagen. Realizaríamos lo mismo con todo nuestro material (footage, referencias, hdri, etc) para tener el material "conformado" y listo para trabajar en un software de 3D.

Esta es la primera parte de un artículo compuesto de dos partes, donde hablamos de technical grading en visual effects.

Color correction vs color grading

Lo primero que necesitamos aclarar es la diferencia entre color correction (o tech grading) y color grading.

Color grading, son correcciones de color y luminosidad que realizamos a un footage o render basado puramente en conceptos subjetivos. Para crear drama, por razones estéticas, etc. Lo único que nos importa es la apariencia visual, no los valores de la imagen.

Color correction o tech grading, es el proceso mediante el cual corregimos el color/luminosidad de una imagen con respecto a otra, con el menor número de errores (valores matemáticos). La imagen de referencia que utilizamos para realizar el tech grading tiene unos valores conocidos, de ahí que se llame referencia, y generalmente estos valores vendrán dados por un Macbeth Chart color checker capturado bajo unas condiciones lumínicas conocidas.

También incluye el proceso de linearización, necesario para trabajar en visual effects, ya que los motores de render trabajan siempre de forma linear, además, de que la luz en el mundo real también se comporta de forma linear. Generalmente los plates de cine, o las fotografías provienen de una cámara que no ha sido calibrada de forma rediométrica, por lo tanto, no son lineares. ¿Por qué? Básicamente porque un footage linearizado no es bonito, además de que el ojo humano no percibe la luz de forma linear. Por lo tanto necesitamos linearizar todo el footage antes de continuar en un pipeline de VFX. Es indispensable que todo el material que utilizamos en un proyecto de VFX viva bajo el mismo contexto.

¿Cómo funciona?

Tenemos que leer cada color swatch del Macbeth Chart en la referencia y sus equivalentes en el footage donde necesitamos realizar el tech grading. Mediante sustracciones y adiciones los valores del destino se corrigen para acercarse lo máximo posible a los valores de la referencia. Las matemáticas son lineares (2+2=4) así que el footage necesita ser linear. Si no lo es, tenemos que linearizarlo antes.

Un render siempre es linear y con primarios sRGB. El footage de una cámara de vídeo/fotos no suele ser así. Como decíamos antes, la razón es que un footage linear no es bonito, pero linear es lo que necesitamos para que las matemáticas funcionen. En este estado no nos importa que el footage sea bonito o no, nos importan sus valores numéricos. Renders y footage han de vivir bajo el mismo contexto (linear) para que la composición tenga éxito.

Es importante tener en cuenta, que este proceso (linearising + tech grading) no es perfecto, siempre se generan algún tipo de errores numéricos, aunque intentamos que sean los mínimos posibles. Siempre hay espacio para eye-balling a posteriori.

¿Como se lineariza una imagen?

Necesitas tener puntos conocidos en el footage, y probablemente nada viene mejor que los grey swatches de un Macbeth Chart. Esos swatches van a devolver prácticamente toda la luz rebotada entre 380nm y 780nm. Con esto quiero decir que una fuente lumínica blanca, después de impactar en un swatch neutral grey, va a devolver prácticamente la misma luz hacia nuestros ojos (o sensor de cámara). Como estos swatches son neutrales, la luz no se va a tintar del color de su superficie.

En este punto conocemos los valores de esos neutral swatches en la vida real y también los valores que tiene en el footage. En Nuke, podemos fácilmente mediante color lookups mapear los valores del footage para que tengan los valores que deberían de tener en el mundo real.

Con los 6 swatches grises deberíamos de tener más que suficiente. Puede que algunas características del footage, como el grano, causen problemas de vez en cuando, pero en general, con los 6 neutral grey swatches deberíamos de ser capaces de linearizar el plate. Otro problema es que generalmente no conocemos las fuentes lumínicas que impactan en los swatches del Macbeth Chart, pero esto es algo con lo que tenemos que vivir, de ahí que siempre haya espacio para eye-balling.

¿Cómo se realiza el white balance?

Una vez el footage ha sido linearizado, necesitamos un color matrix para ecualizar los valores de nuestro Macbeth Chart acorde con los valores del mundo físico, o con cualquier otro valor que sea nuestra referencia de color.

Una vez la linearización y el white balance han sido realizado al plate con Macbeth Charts, basta con crear clones y aplicarlos al resto de footage filmado con las mismas características lumínicas y de cámara. También hay que aplicar todos los ajustes a las referencias lumínicas (esferas). Cualquier material filmado y fotográfico ha de vivir bajo el mismo contexto.

¿Y luego qué?

Una vez todo el footage y referencias han pasado por el tech grading, lo siguiente que debemos corregir son los HDRIs que utilizaremos para lighting y look-dev. El proceso es el mismo que con el footage. Aunque trabajaremos con un mayor rango dinámico.

Cuando tengamos todo el material viviendo bajo el mismo contexto, ya estaremos preparados para continuar nuestro trabajo tanto en 3D como en 2D.

Una parte muy importante a tener en cuenta, es que el tech grading ha de ser revertido en compositing. Los compositores generalmente trabajan con source plates o graded plates, no con los plates que nosotros hemos generado tech grading. Así que los compositores necesitarán revertir nuestro tech grading para aplicarlo a nuestros renders 3D. De esta forma todo el material footage y 3D volverá a vivir bajo el contexto en el que fue creado por el DP.

Información adicional

  • ¿Dónde puedo encontrar los valores del mundo físico con los que comparar mis Macbeth Chart de mi footage?

Aquí: http://www.babelcolor.com/colorchecker.htm#xl_CCP1_NewSpecifications
Aunque si quieres ahorrarte trabajo, en lugar de construir tu propio matrix en Nuke, puedes descargarte gratuitamente el gizmo mmColorTarget aquí: http://www.nukepedia.com/gizmos/colour/mmcolortarget

  • Para la linearización, estaría bien tener los valores de los grey swatches

Aquí los tienes.
Los valores lineares son aproximadamente 3%, 8.5%, 19%, 35%, 58% y 91% reflectance of the light. Traducido a valores RGB seria 0.031, 0.086, 0.187, 0.35, 0.57, 0.91

Ten en cuenta que el valor del neutral grey mid point es 18% y no 45-50% como seguramente pensabas. Esto es porque la medición es radiométrica, y los humanos no percibimos la luz de forma linear (aunque lo sea). Así que cuando necesites crear por ejemplo una esfera gris digital, su valor RGB no sera 0.5 si no 0.18

En la segunda parte de este artículo, haremos un ejemplo práctico.

 

Nota: Este post contiene información exclusiva para los miembros de elephant vfx pro.

La ingestión y el output de footage es una labor que ha de realizarse de forma correcta para no perder ningún tipo de información de color e iluminación. Es muy importante que el footage que llega de editorial salga exactamente con las mismas características de latitud hacia la sala de DI (digital intermediate). En los grandes facilities de VFX y grandes producciones, esta tarea puede ser bastante compleja en ciertas ocasiones, debido a los complicados sistemas de gestión de color que podemos llegar a utilizar.

Paso a explicar como podemos realizar esta labor de forma adecuada en lo que llamaríamos un pipeline de color simple, o independiente. Es decir, la forma más común con la que generalmente trabajan boutiques de VFX, freelancers o simplemente, pipelines de color no demasiado complejos.

En la imagen de arriba, utilizada durante la explicación del vídeo, explico de forma rápida como funcionan los distintos modelos de cámaras RED. El footage generalmente oscila entre diferentes resoluciones, desde 4k hasta 8k.
Los sensores, CMOS que siempre trabajan de forma linear, si, como cualquier motor de render. Y del mismo modo, necesitamos una transformacion de color y su correspondiente gamma para visualizar el footage de forma adecuada en la mayoria de monitores y dispositivos.

Las camaras RED tienen su propio color management llamado RED color y su propia gamma llamada RED gamma. Tambien puedes optar por espacios de color comunes como sRGB o rec709 con sus gammas correspondientes a 2.2 o 1.8

  • Lo primero es converir el footage a un formato estandard. Generalmente vamos a trabajar con .dpx comun en cualquier facility y cualquier software.
  • REDCineXpro es el software (gratuito) con el que puedes realizar todo tipo de conversiones. Tambien puedes realizar trabajos de edicion, color grading, etc. Generalmente vamos a utilizarlo solo para epxortar el footage a .dpx
  • En las opciones de color, podras ver el espacio de color y gamma con el que ha sido rodado el footage. Conviene cambiar el gamma a redLogFilm, siendo log un estandard neutro, perfecto para color grading. Seria lo mismo que utilizar el nodo log2lin en Nuke.
  • Exporta como .dpx
  • La forma correcta de importar el footage en Nuke es como log, es decir, color space cineon en el nodo read.
  • Para visualizarlo correctamente, utilizamos un transformacion de color sRGB o rec709. O por supuesto, un LUT enviado desde la sala de DI (lo mas comun).
  • En Nuke realizamos el trabajo de VFX que necesitemos, bien sea composicion 3D, clean up, etc.
  • En este caso, he hecho un clean up de nieve de forma muy rapida.
  • Una vez terminado el trabajo, basta con escribir lin sRGB-log (cineon) como .dpx utilizando la misma profundidad que el footage original.
  • En este punto deberiamos de ser capaces de enviar el restultado de nuestro trabao de vuelta a editorial o DI, donde podran aplicar cualquier color grading en el que hayan estado trabajando, puesto que nuestro footage tendra exactamente las mismas cualidades que antes de salir de DI, excepto los aniadidos VFX claro.
  • Para ilustrar esto, voy a importar el nuevo footage en Adobe SpeedGrade, que bien no es una sala de DI con Baselight o Resolve. Donde el input sera Cineon/Log y la transformacion de color sRBG para ver el footage igual que en Nuke, que en este punto, todavia es neutro.
  • A partir de ahora podemos tomar cualquier decisión creativa en cuanto a color se refiere. En este ejemplo simplemente estoy aplicando un LUT previamente creado.
  • En cualquier momento podemos desactivar el color grading y enviar un nuevo edit al facility de VFX, y siempre estaremos trabajando de forma neutra. Tambien podemos enviarles nuestro color grading en forma de LUT para que ellos puedan aplicarlo en los respectivos software de 3D y 2D, siempre de forma no destructiva, claro.

Es importante tener en cuenta, que para generar un LUT de forma apropiada, desde VFX necesitamos enviar un CMS pattern a DI para que nos generar el archivo LUT.

  • En Nuke, basta con crear un nodo CMS pattern, que tiene unos valores conocidos. Ellos aplicarán su color grading a este pattern, y la diferencia en valores sera el LUT, que posteriormente podemos aplicar a nuestro footage.
  • Del mismo modo nosotros mismo podemos generar nuestros propios LUTs en Nuke, concatenando cuantos color gradings o color corrections necesitemos, y escribiendo el resultado en un nodo write generate LUT. Podemos expandir esto en un futuro.

Los miembros de elephant vfx pro podéis acceder a un vídeo de mas de 30 minutos donde explico todo esto de forma detallada.

Este post está enfocado especialmente para texture artists, aunque no viene mal para todos aquellos que trabajen con referencias fotográficas en un pipeline de efectos visuales. Como texture artist trabajando en VFX lo más normal es que desde hace años no trabajes con Photoshop. Aparte de las limitaciones de no poder pintar en 3D, de no poder trabajar con UDIMs y de lo engorroso y lento que es gestionar toda la información que vas generando día a día, el mayor problema de Photoshop es la gestión de color (LUTs, ACES, OIIO, etc) y del rango dinámico. Por eso y por la estandarización de software de texturizado como Mari (que no tiene las limitaciones mencionadas), Photoshop ha pasado a ser una herramienta obsoleta para los que nos dedicamos a pintar texturas en proyectos de efectos visuales.

Aún así, sigo utilizando Photoshop para una sola tarea, eliminar sombras y reflejos de mis referencias utilizando la herramienta Shadows&Highlights. Sólo para eso.
Generalmente, en los VFX facilities solemos disponer de cross polarized references, carentes de información no deseable como sombras y reflejos, pero no en el 100% de los casos, y cuando te topas con referencias que han sido fotografiadas utilizando técnicas más comunes, no queda otras que intentar eliminar esta información no deseada como buenamente puedas. La herramienta Shadows&Highlights es muy buena para este propósito.

Pero comentaba, uno de los mayores defectos de Photoshop es como trata el rango dinámico. Trabajar con imágenes .exr de 16 o 32 bits es simplemente infernal. Muchas de las operaciones disponibles en Photoshop están desactivadas o requieren que hagas un merge del layer stack. Esto significa, en muchas ocasiones perder rango dinámico, tener que convertir imágenes de 32 bits a 16 bits, incluso a 8 bits. Es decir, descartado, lo ultimo que quiero es perder rango dinámico en mis referencias, que generalmente serán fotografías RAW compuestas de al menos 3 exposiciones, es decir, imágenes HDRI con alto rango dinámico.

Otro de los grandes defectos de Photoshop es la gestión de color. Si en el proyecto en el que estoy trabajando utiliza un determinado LUT (para resumir, un color grading bestial que simula por ejemplo, una determinada emulsión de película) y altera la apariencia visual de mis referencias, necesito visualizar mis imágenes bajo las mismas circunstancias en Photosop. Imposible debido a la carencia de gestión de color en Photoshop.
Afortunadamente en la última versión de Photoshop (CS6 y CC) han incorporado una capa de ajuste llamada Color Lookup que permite cargar algunos formatos comunes de archivos LUT. Esto entre otras cosas me permite poder utilizar Photoshop de vez en cuando si lo necesitase para alguna tarea extraordinaria de texturizado, como por ejemplo, la mencionada herramienta Shadows&Highlights. Veamos como.

Si trabajamos en un espacio de color sRGB

  • En Nuke tengo mis referencias en formato .exr 16 bits linear.
  • Para poder abrirlas en Photoshop sin ningún tipo de limitación, necesitamos guardarlas en formato .tif 16 bits linear.
  • Si las abrimos en Photoshop, se verán de forma incorrecta. Para visualizarlas correctamente basta con añadir un gamma correction 2.2 (solución cercana al espacio de color sRGB).
  • Tras hacer los cambios oportunos en las referencias, desactivar el gamma correction y volver a guardar la imagen como .tif 16 bits.
  • Leer en Nuke como linear.

 

  • Para seguir trabajando en el pipeline VFX, es decir, para importar en Mari o para llevársela a Maya para render, conviene convertir en .exr linear.

Si trabajamos en un espacio de color LUT

  • Visualizar las imágenes en Nuke 16 bits .exr linear a través del LUT.
  • Escribirlas como 16 bits .tif linear para poder abrirlas en Photoshop sin limitaciones.
  • En Photoshop abrir las imágenes y utilizar un Color Lookup con el LUT. Guardar la imagen como 16 bits .tif con el Color Lookup desactivado.
  • Leer en Nuke como linear.
  • Para seguir en el pipeline de VFX de nuevo conviene escribirla como 16 bits .exr linear.
  • Si las importamos en Mari con el LUT activado deberían de verse exactamente igual.
  • Del mismo modo debería de ocurrir a la hora de renderizar en Maya y Arnold (o cualquier otro software).

A estas alturas no vamos a explicar nada relacionado con Linear Workflow, Gamma Correction, Color Spaces, etc. Seguramente ya todos llevamos años trabajando así y de lo contrario, existen muchos recursos en internet con información al respecto. En este mismo blog podéis encontrar información relacionada con este tópico en esta entrada del blog, o en esta o quizás en esta. También si buscáis el término Linear Workflow en la sección tutoriales.

El caso es que Autodesk Maya 2016 viene con una serie de novedades, entre ellas la gestión de color, lo que hace que por ejemplo, el Gamma Correction en Arnold Render se vea ligeramente alterado con respecto a versiones anteriores de Maya. Parece que esto está causando algunas confusiones entre algunos usuarios de Arnold, así que vamos a explicar de forma sencilla como configurar Maya 2016 y Arnold para trabajar de forma correcta. Nótese que esta no es la única forma de configurar LWF correctamente, pero es la que más me gusta a mi.

En las preferencias de Maya tenemos que activar el Color Managment. Lo ideal es renderizar siempre de forma linear y que el view transformation sea siempre sRGB (o LUT en el caso de estar utilizando uno). El input color space vamos a dejarlo como sRGB aunque después será Arnold el encargado de dictaminar el color space de nuestras texturas.

Como prueba para chequear que todo funciona correctamente, vamos a utilizar dos texturas de Macbeth Chart. La primera es una textura linear en formato .exr y la segunda una textura sRGB en formato .jpg Estos son generalmente los dos tipos de inputs que vamos a encontrar en una producción, linear y sRGB.
Si leemos ambas como linear, que es lo que ocurre a la hora de renderizar (hay que linearizar las texturas siempre) comprobaremos que la textura sRGB no se ve de forma correcta. Bien, lo mismo debería ocurrir en Maya y Arnold.

En las opciones de render de Arnold, en el apartado Gamma Correction, tenemos que poner todos los parámetros a 1.0
Esto quiere decir que Arnold espera que todos los inputs estén linearizados. Como ya dije anteriormente, hay que linearizar las texturas siempre.

El Macbeth Chart de arriba es el que tiene aplicado la textura linear .exr y el Macbeth Chart de abajo tiene aplicada la textura sRGB .jpg
La esfera diffuse tiene aplicado un color neutral grey 50%

Cuando lanzamos un render, ya que Arnold espera que todos los inputs estén linearizados, el Macbeth Chart de abajo y la esfera gris se van a ver de forma incorrectaLa solución es linearizarlos antes del render.

Existen dos formas de linearizar los inputs. La primera pasa por colocar invert gamma correction en todas las texturas que no estén linearizadas. Es decir, cualquier textura en espacio de color sRGB sea cual sea su formato. En este ejemplo solo tendremos que corregir la textura del Macbeth Chart de abajo.

Si renderizamos de nuevo, los dos Macbeth Charts deberían de verse de forma correcta.

La esfera diffuse sigue sin verse correctamente. Esto ocurre porque Maya está tratando al color plano 50% grey como si estuviese en el espacio de renderizado (linear). Así que tenemos que decirle que lo trate como si estuviese en el espacio de visionado (sRGB).

Ahora si renderizamos de nuevo, todo se verá de forma correcta.

Antes comentaba que existen dos formas de linearizar las texturas. La primera es la que hemos visto, la segunda, es la recomendada, ya que obviamos gamma correction nodes y ahorramos tiempo de computación al render.
Consiste en convertir las texturas al formato .tx que por otro lado me imagino que ya estás acostumbrado a convertir tus texturas a este formato ya que las texturas han de ser convertidas a MIP-mapped textures sobre todo, para ahorrarte infinidad de tiempo en el renderizado.

En el caso de texturas en espacio de color sRGB no olvides utilizar la opción "--colorconvert sRGB to linear"

Si ahora eliminamos todos los nodos gamma correction y sustituimos las texturas por su equivalente .tx obtendremos el resultado esperado.

No está de más mencionar que en la última versión de Arnold, SolidAngle proporciona su propio Frame Buffer. Puedes encontrarlo en el menú Arnold -> Experimental -> MtoA RenderView

Donde entre otras opciones, puedes cargar directamente un LUT.

Huelga decir que nuestros renders siempre van a ser lineares, así que se verán correctamente en Nuke. Basta con leerlos como linear y visionarlos como sRGB (o LUT) al igual que en Maya.

Cualquier duda, pásate por el foro o deja un comentario en el blog.