Otro de esos pasos obligatorios cuando intentas trabajar con un nuevo software, es como no, utilizar displacement maps extraídos desde Zbrush.
No hay proyecto de vfx que no los utilice, así que como dicen los ingleses, "it's a must".

Dejo aquí los pasos necesarios para utilizar con éxito este tipo de displacements en Modo.

  • En Zbrush, una vez has terminado de esculpir todos los detalles necesarios en tu modelo, con todas las capas que te interesen activadas, vete al nivel de subdivisión más bajo.
  • Vete al panel Morph Target, click en StoreMT e importa el modelo base que habías importado previamente en Zbrush para esculpir. Si has empezado desde cero en Zbrush en lugar de hacer este paso, simplemente exporta tu personaje en el nivel de subdivision mas bajo como .obj
  • Una vez creado el morph target con el modelo original, verás que este se muestra en viewport. Click en switch morph target para volver a tener activar tu modelo esculpido.
  • Exporta los mapas utilizando multi map exporter. Te recomiendo siempre 32 bits. (o vector displacement en el caso de que así lo necesites).
  • Échale un ojo a mis settings en la captura de pantalla. Lo único que tienes que tener en cuenta es el parámetro scale, que debería ser 1 e intensity que se calculará solo cuando utilices el botón get sale.
  • Chequea los mapas en Nuke y corrige cualquier imperfección que puedas encontrar.
  • Una vez en Modo, importa el asset original, vete al item y activa linear uvs y tantas subdivisiones en render como necesites.
  • Asigna un nuevo shader al asset (tecla m), añade un nuevo texture layer con la textura de displacement y configúralo como displacement effect.
  • Low value y high value deberían ser 0 y 100 respectivamente. Estos valores corresponden al mid-mapping.
  • En las opciones de gamma de la textura, asegúrate de que el valor es 1.0 estamos trabajando en linear workflow y los mapas de desplazamiento scalar no se corrigen.
  • En las opciones del shader, bajo surface normal, utiliza 1m como valor en el parámetro displacement distance. Si trabajas en 32bits este valor debería ser un estandard. (no es oficial, pero me ha funcionado siempre).
  • Finalmente, en las opciones de render, juega con el displacement rate para conseguir mayor calidad. Cuidado porque aumenta drásticamente los tiempos de render. Parámetros entre 0.5 a 1 son bienvenidos. Más abajo de eso, solo para fine displacement para primeros planos. Este parámetro es similar al shading rate de RenderMan.
  • Render para chequear el resultado des displacement.

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.

Se que en algunas ocasiones, puede resultar un tanto complicado hacer que los desplazamientos esculpidos en Zbrush funcionen correctamente en un software 3D.

Puede que los detalles no se vean exactamente igual, que la calidad del desplazamiento no sea la esperada, y un largo etcétera de problemas.

He grabado un vídeo tutorial donde explico los diferentes tipos de desplazamientos que nos podemos encontrar hoy en día.
Como exportar correctamente los mapas de desplazamiento desde un software de esculpido como Zbrush.
Y finalmente, como trabajar en Maya con Vray 2.0 para que el desplazamiento funcione exactamente igual que en Zbrush.

Además de eso, también explico como re-proyectar detalle en Zbrush desde un modelo esculpido a un modelo de producción, listo para render.
Como realizar de forma muy breve UVs en UV Layout.
Y finalmente, todo el proceso de exportación de mapas de 16 bits, 32 bits, vector displacement, y su utilización en Maya y Vray.

Espero que os sirva y podáis aplicarlo en vuestros pipelines personales.
Cualquier duda o sugerencia, dejad un comentario.

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

Cuando trabajamos con linear workflow y entornos HDRI, no importa el paquete 3D o el motor de render, siempre resulta difícil mantener la consistencia entre texturas y backplates. En ocasiones son demasiado oscuras, o lavadas, etc.

El problema generalmente viene dado porque las texturas son multiplicadas por la iluminación que viene del HDRI, y esa información de más necesita ser compensada de alguna forma.
Estamos añadiendo información a las texturas que ya se encuentra en ellas, por lo que debemos restar esa información proporcionada por el HDRI.
Este proceso, se llama normalizar las texturas.

Aquí abajo dejo una forma sencilla de solucionar este problema.

  • Para empezar crea un set-up image based lighting.
  • Utiliza un plano con un material mia_material_x_passes completamente blanco, sin ningún tipo de reflexión.
  • Lanza un render y configúralo como linear.
  • Crea otro material mia_material_x_passes con una textura con el gamma corregido, y asígnalo al plano.
  • Estoy utilizando este mapa de textura.
  • Si renderizas en este punto, te darás cuenta de que la textura se ve lavada. Esto ocurre porque esta siendo multiplicada por la información lumínica de la escena.

Para arreglar esto:

  • Aplica de nuevo el shader blanco al plano.
  • Haz un bake de la información lumínica.
  • Ahora tenemos que dividir la información de color de la textura por la información lumínica del entorno, esto nos dará el color bruto o RAW.
  • Conecta la textura con su gamma corregido al input 1 del nodo multiply/divide.
  • Conecta al textura bakeada .hdr al input 2 del nodo multiply/divide.
  • Pon la operacion como divide.
  • Renderiza de nuevo y ahora debería de verse correctamente.

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

He grabado un video tutorial donde muestro el proceso que utilizo para normalizar texturas en Softimage, fácilmente aplicable a cualquier otro software.

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

Siempre es un poco complicado hacer funcionar a la perfección los desplazamientos de Zbrush en los diferentes motores de render.
Si has cambiado recientemente de Mental Ray a Vray, como es mi caso, probablemente necesites algunos tips para poder renderizar tus displacements con todo su potencial.

He escrito algunas lineas aquí abajo para mostrar como hacer esto.

  • Carga tu displacement de 16bits en el Hypershade.
  • Arrástralo al slot displacement en el shading group attributes.
  • Maya creará de forma automática un nodo displacement en el Hypershade. no necesitas tocar nada ahí.
  • Selecciona la geometría de tu asset y añade un Vray extra attribute para controlar las subdivisiones y las propiedades de displacement.
  • Si has exportado tu displacement desde Zbrush con la opción subdividing UVs, deberías de seleccionar esta opción para el render. Generalmente lo harás así.
  • Edge length y Max subdivisions son los parámetros más importantes. Juega con ellos hasta obtener un resultado que te guste.
  • Displacement amount es la fuerza del displacement.
  • Displacement shit debería de ser un valor la mitad en negativo del valor utilizado en displacement amount. Esto solo si utilizas displacements 16 bits.
  • Si utilizas displacements de 32 bits el displacement shift es siempre cero.
  • Además, con displacements de 32 bits también necesitas añadir un Vray attribute llamado allow negative values, para que tus mapas no seas clampeados.
  • Render comprobando que el displacement se vea igual que en Zbrush.
  • Mapas de displacement utilizados en este ejemplo.