Nuestro nuevo curso online "One man band" ya está disponible.
En este curso te mostramos como construir un pipeline de texturizado, look-dev, lighting, render y offline look-dev, utilizando dos metodologías de trabajo diferentes, orientadas a boutiques de VFX y freelancers. Una con Substance Painter, Maya/Arnold y Nuke. Y otra utilizando Substance Painter, Isotropix Clarisse y Blackmagic Fusion.
Aquí tienes toda la información detallada.
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.
Doy por terminado este asset que será el ejercicio de nuestro próximo curso "One man band".
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.
He empezado a trabajar en el asset para nuestro nuevo curso online "One man band.." El personaje en cuestión es Iron Patrio de Iron Man 3.
Finalmente he decido ampliar el temario del curso para hacerlo mas accesible, y las tareas de look-dev serán realizadas en Maya/Arnold/Nuke y también en Clarisse/Fusion.
A estas alturas no creo que haya nadie que no esté familiarizado con mip-mapping, en cuanto a texturas se refiere, especialmente aquellos involucrados en los cursos de elephant vfx, donde siempre ponemos especial hincapié en tópicos como este. Aun así, siempre me encuentro con algunos estudiantes, que no conocen que es esto del mip-mapping, así que vamos a tratar de explicarlo de forma breve.
Para empezar, siempre, absolutamente siempre tus texturas tienen que pasar por un proceso de mip-mapping una vez están terminadas, si no, lo estas haciendo mal. Quizás te preguntes por que tus renders tardan mucho tiempo, especialmente mucho tiempo en arrancar, seguramente sea por culpa del mip-mapping, o mejor dicho, la ausencia del mismo.
Una escena mas o menos compleja, cuando hablamos de cine, contiene seguramente miles de texturas. Un hero asset puede contener por si solo miles de texturas agrupadas en decenas de channels. Como podéis imaginar, resulta imposible para el hardware y software que utilizamos, cargar semejante cantidad de información en memoria. Las texturas son generalmente de 8k 16 y 32 bits y como digo, se cuentan por centenares. Con el mip-mapping, conseguiremos agilizar la carga en memoria de toda esa información de una forma considerable, con lo que nuestros renders tardarán mucho menos en empezar, muchísimo.
El mip-mapping se originó para ayudar a mejorar el filtrado de las texturas, el antialiasing. Cuando los objetos se alejan de cámara, los detalles de superficie generalmente parpadean, flickean. El mip-mapping ayudará a solventar esta situación, ya que se crean resoluciones de textura acorde con la posición del objeto respecto a cámara.
Como decía antes, el mip-mapping nos ayudará a mejorar la carga en memoria de las texturas. Si un objeto tiene una textura de 4k pero en un determinado plano solamente ocupa 100 pixels en pantalla, no hay necesidad de cargar una textura de 4k, podemos cargar una versión de 128 pixels.
Esta generación de versiones de textura, puede hacerse al vuelo, o puede planificarse con anterioridad, antes de lanzar el render. Ahorrando mucho tiempo, tanto de carga en memoria, como de generación de versiones de texturas.
Todo esto relacionado con mip-mapping es render agnostic, no importa que motor de render utilices, debes de generar mip-mapped textures con todos. Generalmente los motores de render incluyen una utilidad para poder generar las texturas, mediante linea de comando o mediante interface gráfico.
En el caso de Arnold Render, en el menú Arnold -> utilities encontrarás una herramienta llamada TX manager, donde podrás fácilmente convertir tus texturas a .tx
El comando por defecto que lanza esta utilidad es "maketx -v -u --oiio" forzando las texturas a generar tiles optimizados para OpenImageIO 64x64 Si la textura fuera un color, la convertiría a un tamaño diminuto, de la misma forma que hace Mari cuando exportas colores planos.
Existen varios comandos que puedes utilizar durante la conversión, como el tipo de filtrado, el tamaño de tile, o la linearización de texturas. Yo personalmente lo dejo por defecto, ya que siempre trabajo de forma linear, es decir, las texturas no necesitan conversión cuando llegan al software 3D, ya salen linearizadas de Mari. Tienes mas información sobre maketx aquí.
En las opciones de render de Arnold, existe un apartado específico para las texturas, estas son las opciones mas importantes.
- Auto-convert Textures to TX: Esta opción convertirá de forma automática las texturas que existan en tu escena y no estén en formato .tx Personalmente no lo recomiendo, por el simple hecho de acostumbrarse al proceso de terminar las texturas y convertirlas manualmente a .tx antes de meterlas en el software 3D.
- Accept Unmipped: Con esta opción activada, podrás utilizar texturas que no hayan pasado por mip-mapping. Nunca lo utilices, tus renders tardarán una eternidad.
- Tile size: Tamaño de los tiles cuando los calcules de forma automática. Cuanto mas grande, menos cargas, pero mayor tiempo de carga.
- Max Cache Size (MB): Memoria destinada a la carga de texturas.
- Mip-Mapping Bias: Controla el nivel de mip-mapping. De forma individualizada por textura. Cuanto mayor numero, menor calidad de carga. Valores negativos cargaran texturas mas grandes.