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).

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.