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.

Si buscas a lo largo y ancho de los posts que he escrito en este blog, encontrarás varias entradas sobre trabajo "Linear Workflow" en las diferentes aplicaciones que utilizo en mi día a día.
A raíz de una pregunta que me han hecho en twitter, aprovecho para dejar un ejemplo muy sencillo y directo, que espero sirva como medida aclaratoria.

Pregunta: Hola @xuanprada , ¿Una textura PTEX 16bit float necesita corrección de gamma en un workflow linear? Muchísimas gracias!!

Respuesta: No. Si es float image 1.0 ya viene linearizada.

Una imagen vale mas que mil palabras, así que aquí dejo algunos ejemplos gráficos.
Si los inputs son imágenes floating point (hdr, exr, 16bit, 32bit, etc) no hace falta corregirles el gamma. Si los inputs son imagenes sRGB con corrección de gamma "bakeada" si hace falta corregirles el gamma en shading, para que no se le aplique la misma información dos veces.

  • Sirva este diagrama como ejemplo.
  • En este sencillo ejemplo, tengo en Nuke la misma imagen en dos nodos diferentes. La imagen original es un .hdr 32bit floating point. He hecho un crop y la he salvado a dos archivos diferentes, uno 32bit .exr (linear) y otro 8bit .tif (sRGB).
  • Ambas las visualizamos en un espacio de color sRGB gamma 2.2 y se ven exactamente igual.
  • Cargo las dos imágenes en Maya, utilizando dos shaders diferentes de VRay.
  • Si aplico cada uno de los shaders a dos planos diferentes y lanzo un render obtengo lo siguiente: La textura linear (1.0) funciona bien, y la textura sRGB (2.2) no. ¿Porqué? Pues porque la textura sRGB tiene una doble corrección de gamma, la propia "bakeada" mas la que le aplica tu monitor (sRGB 2.2)
  • Para que la textura sRGB se vea como debería verse, es necesario corregirle el gamma. Para ello hay que utilizar un nodo gamma correction con valor 4.55 (1/2.2)
  • Si renderizamos de nuevo, todo funciona correctamente.

Este post es una traducción del original escrito en Agosto del 2012 en el blog de Xuan Prada.

Cuando trabajas para un gran estudio de efectos visuales o estudio de animación, lo normal es iluminar tus planos y secuencias con unos light rigs muy complejos, generados por profesionales con mucho talento.
Pero cuando trabajas en tu casa, como freelance, en proyectos personales, o en pequeñas boutiques de efectos visuales, lo normal es que te ajustes a las herramientas comerciales disponibles y trates de hacer tu trabajo de la forma más sencilla posible, simplificando al máximo las técnicas de trabajo para conseguir unos resultados excelentes.

Por algunas de esas razones y otras, hace un tiempo que he abandonado Mental Ray para pasarme a Vray.
Y uno de las características que más me gusta de Vray es precisamente lo bien que se desenvuelve con Image Based Lighting.

Deja que te comente algunos de los puntos que me parecen interesantes.

  • El set-up técnico es increíblemente sencillo. Un dome light, sustituir las luces directas del mapa HDRI por luces reales (y a veces ni eso), activar linear workflow y un par de clicks para ajustar settings. No necesitas más.
  • Es muy fácil y rápido reducir el ruido de la escena. Basta con aumentar maximum subdivisions y disminuir el threshold.
    Algo alrededor de 25 a 50 (quizá 100) como max. subdivision y algo alrededor de 0.005 como valor de threshold.
  • Los tiempos de render son muy rápidos utilizando raytracing.
  • Incluso con global illumination los tiempos son muy aceptables.
  • Displacement, motion blur y otros aspectos heavies, son bien recibidos.
  • La calidad de las sombras, incluso sin utilizar luces directas, son muy muy buenas.
  • Puedes controlar fácilmente la orientación de los mapas HDRI desde el dome light, sin nodos intermedios, visualizando en tiempo real los cambios en el viewport.
  • En todos los render que puedes ver aquí, estoy utilizando un HDRI con muchos puntos de luz, alrededor de doce.
  • En estos ejemplos de abajo, estoy utilizando un fondo negro y dos puntos de luz formados por círculos blancos. Quiero ver como reacciona el dome light con luces directas, y como podrás observar, lo hace realmente bien.

La luz natural es suave y sutil.

Estas son algunas de las razones por las que me encanta image based lighting en Vray.

Por otro lado, no me gusta demasiado para hacer look-dev, ya que en ocasiones puede ser demasiado lento para este propósito.

Para dicha tarea, recomiendo desactivar el dome light, y crear un setup de IBL tradicional, utilizando una esfera para el HDRI y luces directas, o conectando tu HDRI a un Vray environment sin global illumination.
Trabaja tus shaders ahí, y utiliza el dome light para la iluminación del plano.

Este post es una traducción del original escrito en Mayo del 2012 en el blog de Xuan Prada.

Estoy empezando un nuevo trabajo con Vray, y lo cierto es que nunca he trabajado de forma profesional con este motor de render. Así que empecemos por el principio.

Siempre que empiezo un trabajo de texturizado y look-development lo primero que hago es preparar una escena para tal fin. Un light-rig neutro, con información lumínica tomada en el set mediante HDRI o si estamos hablando de animación, un set up similar pero creado desde cero en 3D.

Todo eso, por supuesto, en linear workflow, así que vamos a ver como configurarlo para funcionar correctamente con Vray.

  • Empieza por poner el gamma a 2.2
  • Activa don't affect colors si quieres hacer un bake del gamma correction en el render final. Si no, simplemente tendrás que corregirlo en post. No es algo grave.
  • La opción linear workflow déjala desactivada, es una opción creada por Chaos Group para arreglar escenas antiguas de Vray. No nos interesa.
  • Activa affect swatches para ver los campos de selección de color con el gamma aplicado.
  • Una vez tienes configuradas las opciones de render, lo siguiente es corregir el gamma de las texturas. Tienes dos opciones para hacer esto.
  • Añadir un gamma correction a cada textura de color. En este caso la inversa de 2.2 es 0.455
  • La segunda opción es en lugar de corregir cada textura de color, añadir un vray attribute texture input gamma a cada nodo de textura para controlar esto.
  • En el V-ray frame buffer activa el visor sRGB, si no tus renders se verán en un espacio de color equivocado.