Zbrush displacement en Modo
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.
Multi UDIM workflow en Modo
Segunda entrada con tips sobre mi método de trabajo en Modo (el cual estoy aprendiendo a marchas forzadas).
Trabajar con multi UDIM es algo básico, del día a día. Me ha resultado un tanto tedioso hacer el setup en Modo, por aquello del shader tree, que no me gusta demasiado (muy lento).
Me resulta extraño que no haya un automatismo para exportar desde Mari (para Maya si lo hay) ya que tanto Mari como Modo pertenecen a la misma compañia.
- Chequeamos texturas e UDIMs en Mari.
- Chequeamos el asset y UVs en Modo.
- Cargamos las texturas en el image manager de Modo.
- Creamos un nuevo material para el asset.
- Añadimos cada una de las texturas correspondientes a cada UDIM como texture layers. Hay que añadirlas en orden descendente. Repetir para cada channel que se necesite.
- En el texture locator de cada textura hay que cambiar el Horizontal Repeat y Vertical Repeat a Reset. (Esto es el equivalente a wrap texture de Softimage o Maya). También hay que hacer el offset de cada una de las texturas, que funciona en negativo hacia la derecha y arriba y positivo hacia la izquierda y abajo (al contrario que Softimage o Maya).
- Y con esto ya está, multi UDIM funcionando a la perfección. Haz un test rápido para ver so todo esta en su sitio.
Linear Workflow: Ejemplo práctico
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.
Migrando a Modo
Ya todos sabéis que Autodesk ha anunciado oficialmente que dejará de desarrollar Softimage, el que es hasta la fecha mi software 3D favorito.
Mirando al futuro, y pensando en utilizar otro software para mis trabajos personales, proyectos freelance o simplemente para probar cosas nuevas, he decidido instalarme una versión de prueba de Modo.
Las razones por las que he escogido Modo son simples y superficiales.
- Es un software moderno, entre comillas, joven y con mucho margen de desarrollo.
- Se adapta bien a mis tareas más comunes, modelado, pintado de texturas, look-dev y lighting.
- Es desarrollado por The Foundry, una compañía que conozco a la perfección, en la que confío y de la que soy cliente desde hace tiempo.
Dicho esto, voy a empezar a escribir en este blog algunos trucos y diferentes formas de hacer las cosas en Modo. Serán simples entradas, cortas, con recordatorios de como hacer las cosas, especialmente destinado a usuarios de Softimage o Maya, que desarrollan su actividad en proyectos de VFX.
No mantendré un orden o estructura determinados, simplemente escribiré a medida que vaya necesitando utilizar las herramientas del software. Si eres usuario habitual de Modo y tienes alguna idea o sugerencias que añadir a mi workflow, por favor, no dudes en comentarlo.
Empiezo con un par de tips.
Herramientas para UV Mapping
Sin entrar a valorar todas y cada una de las herramientas y opciones que ofrece Modo para UV Mapping, voy a atreverme a decir que me gustan más que las de Softimage, Maya o 3D Max, que son los software 3D con los que he trabajado profesionalmente en el pasado.
Sólo voy a recalcar dos herramientas que sin duda, son las dos que yo particularmente voy a utilizar asiduamente.
- UV Projection tool -> Projection Type Atlas: Esta proyección separa las caras de los polígonos en función de la mejor alineación posible, y además, mantiene la escala global de los mismos. No están conectadas entre si, pero en muchos casos esto no será un problema. Yo lo utilizaré muchísimo por ejemplo, para crear las UVs de entornos basados en LIDAR scanns para proyectar HDRIs.
- Unwrap tool: Funciona como cualquier unwrap de cualquier software 3D. Si has trabajado con Unfold o UV Layout ya estarás acostumbrado a utilizar esta herramienta. A falta de probarla con assets complejos, diría que funciona muy bien.
Preparar el editor de UVs para multi UDIM
Por defecto Modo presenta solo un cuadrante en el editor de UVs. Cualquier asset en un pipeline de VFX será texturizado utilizando multi UDIMs. Cambiando un par de opciones puedes configurar el editor de UVs para este propósito.
- Por defecto, este es el editor de UVs.
- Haz click en el icono de opciones en el visor. Arriba a la derecha.
- Utiliza las siguientes opciones.
- Así se queda el editor, listo para multi UDIMs.
Corrección de gamma de texturas RGB
Como sabes en un pipeline Linear Workflow es necesario corregir las texturas RGB que utilices en tus shaders, por defecto se ven un tanto lavadas, y por lo tanto necesitas corregirlas para funcionar en gamma 2.2
- Por defecto Modo funciona con gamma 1.0 lo que es correcto para texturas lineares o floating point. Pero no es correcto para texturas de tres canales como RGB. Si haces un render las texturas se ven lavadas.
- Si necesitas corregirlas para trabajar en gamma 2.2 (divide 1/2.2=0.454545) simplemente en las propiedades de la textura cambia el valor en el Gamma input.
- No he encontrado como decirle a Modo que corrija el gamma automáticamente en función del tipo de textura utilizada. Si sabes como hacerlo, por favor dímelo. Gracias :)
Render output lineal
Otro de los pasos necesarios para trabajar de forma lineal, es renderizar en formato .exr floating point sin ningún tipo de color profile "bakeado" en el render.
Por defecto Modo muestra los renders en gamma 2.2 que es correcto, pero escribe los renders también con gamma 2.2 que no sería correcto para trabajar de forma lineal.
Para cambiar el output a gamma 1.0 o lineal sigue los siguientes pasos.
- En las preferencias de Modo puedes cambiar el gamma display y el output gamma.
- También puedes cambiar el output gamma en el Final Color Output, en las propiedades de render.
- Si chequeas ambos renders (gamma 2.2 y gama 1.0) comprobarás que el que no has lanzado como lineal tiene el gamma bakeado y por lo tanto es incorrecto. Siempre puedes leerlo en Nuke como sRGB y corregirlo con un gamma node.
Sobre la utilización de HDRI en VFX
Recientemente he estado pensando mucho sobre el uso que le damos a los mapas HDRI en los entornos de producción de efectos visuales.
Para que se me entienda, me refiero a mapas HDRI panorámicos con proyecciones equirectangulares. Ya que como sabéis utilizamos otro tipo de mapas HDRI para multitud de usos.
Hablo concretamente de los mapas HDRI que utilizamos para la iluminación de planos en los que hay un footage rodado en un set y hay que integrar un asset generado por ordenador, sea de la naturaleza que sea.
Panorama HDRI equirectangular fotografiado en set.
La utilización de mapas HDRI equirectangulares para esta tarea es algo que está implementado en todo pipeline de iluminación de cualquier estudio de efectos visuales. Lleva siendo la técnica estándar durante varios años, y es probablemente el primer paso que se toma cuando se inicia la iluminación del primer plano de una secuencia.
Las razone son obvias.
- Los HDRI nos dan una representación digital de la iluminación muy precisa. Guardan muchísima información lumínica recogida en un set de rodaje que puede ser utilizada para recrear dicha iluminación con una precisión altísima.
- Es muy sencillo y extremadamente rápido realizar HDRIs en un set. Apenas necesitas un par de minutos.
- Es muy fácil, rápido y eficaz gestionar los HDRI en un software 3D para reproducir con alta fidelidad la iluminación del set. Aunque hay diferentes técnicas, todas ellas en conjunto con los modernos motores de render, nos dan unos resultandos fantásticos.
- Solo necesitamos buenas referencias de iluminación para ajustar nuestro HDRI. Con una esfera gris neutra para ajustar la dirección de la luz, una esfera cromada para ajustar los reflejos y una carta de color para ajustar el balance de blancos, tenemos suficientes datos para replicar digitalmente la iluminación con muchísima precisión.
Lighting y color checker fotografiado en set. Bola cromada.
Lighting y color checker fotografiado en set. Bola diffuse.
Estas son algunas de las virtudes de los HDRI para iluminación en proyectos de efectos visuales. No está nada mal.
Pero, una vez tengo mis HDRI ¿ya está? Todo está perfecto, simplemente lanzo el render?
No es tan sencillo.
Pensando mucho sobre el tema, llego a la conclusión, de que un panorama equirectangular, tiene una proyección esférica. Está mapeado digamos a una bola que hace de mundo. Esto puede resultar apropiado para planos de exteriores, donde nuestros HDRI serán cielo y tierra básicamente. Puede que haya todo tipo de objetos en el entorno, pero lo mas importante serán esos dos elementos.
Ahora bien, ¿qué ocurre cuando hablamos de interiores? Siempre utilizaremos un panorama equirectangular, pero seguramente necesitemos cambiar el tipo de proyección. Si por ejemplo estamos iluminando una habitación, seguramente una proyección esférica no funcionará bien, y una proyección cúbica sea mas apropiada, por aquello de cuatro paredes, techo y suelo.
¿Se puede utilizar una proyección esférica? Si se puede, y en muchas ocasiones funcionará bien, pero una proyección cúbica se adaptará mejora al tipo de entorno que quieres reproducir.
Panorama equirectangular transformado mediante una proyección cúbica.
Precisión absoluta
Pensando en entornos más complejos, con objetos a medio camino entre la estructura del entorno y los actores/assets digitales, un simple mapa HDRI proyectado de forma esférica o cúbica, no nos da la precisión en la iluminación que necesitamos.
Para entenderlo mejor, cuando mapeas un HDRI a una esfera o un cubo, todos los rayos provienen de la misa distancia. Si por ejemplo tenemos a un personaje que se mueve por el entorno, debería de estar más iluminado cuando pasa cerca de una luz, o debería de reflejar más un objeto cuando pasa cerca de este que cuando está en la otra punta de la habitación.
Este tipo de información tan precisa no nos la da un HDRI proyectado mediante técnicas convencionales.
Para solucionarlo, se me ocurre básicamente generar el set de forma digital mediante técnicas de escaneo 3D o photogrametría.
Al mismo tiempo generar varios HDRI equirectangulares desde diferentes puntos del entorno, y cubrir todos y cada uno de los puntos del entorno con fotografías HDRI realizadas con los mismos ajustes de exposición que los panoramas, salvo que utilizando lentes convencionales, como 20mm por ejemplo.
Tomar todas las referencias necesarias en el set, sobretodo bolas y cartas de color, medidas, y posición del trípode en todo momento.
Witness cam.
Herramientas necesarias para hacer "survey".
Medidas y anotaciones sobre las características del set.
Una vez terminado el trabajo en set, podemos procesar el scann del entorno, hacerlo poligonal y crear UV Mapping de alta resolución o trabajar con Ptex.
Con la geometría generada, pasamos a procesar todo el material fotográfico, unificar su exposición y balance de blancos, corregir las distorsiones de lente, etc.
Una vez procesadas las fotografías y la geometría, importamos todo en Mari. Gracias a environment -> sphere map projector, podemos proyectar los mapas HDRI equirectangulares en la geometría, y controlar la posición en tiempo real.
Para este paso, es importantísimo tener anotadas las posiciones del trípode en el momento de la realización de los panoramas.
Cuando tengamos los HDRi proyectados más o menos en la geometría, el siguiente paso seria proyectar las fotografías HDR tomadas con el objetivo 20mm para cubrir aquellas partes de la geometría que no hayan sido capturadas en el HDRI panorámico. Como por ejemplo las caras traseras de objetos que miraban en dirección opuesta a la cámara.
Una vez nuestro set este completamente cubierto por fotografías HDR, simplemente tenemos que exportarlas como texturas floating point. De esta forma tendremos texturas de 32bit con todo el rango dinámico necesario para iluminar los assets que situemos en el entorno, y además, con total precisión, ya que cada pixel de las textura viene desde la posición exacta en el espacio que ocupaba en el set de rodaje.
Si todo se hace bien, manteniendo la continuidad entre imágenes y no perdiendo en ningún momento el rango dinámico, obtendremos una precisión absoluta en la iluminación.
Scann de una parte del set.
Procesado del scann para convertirlo en polygons renderizables.
Genial, ya tenemos las condiciones lumínicas idénticas, trabajo terminado.
¡No! Este es uno de los problemas de iluminación HDRI. Muchos artistas piensan que una vez hemos reproducido las condiciones lumínicas del set, nuestra iluminación ya es perfecta. Teóricamente si, pero no nos olvidemos de una cosa, la iluminación en cine no es una reproducción física de la realidad, si no que iluminamos siguiendo unos conceptos establecidos, que llamamos iluminación cinematográfica.
¿Qué quiere decir esto? Básicamente que no iluminamos para que nuestras creaciones sean físicamente correctas, si no para que se vean bonitas en pantalla. Para ello utilizamos un montón de trucos, que se llevan utilizando desde que el cine se inventó como instrumento narrativo.
Dicho esto, hacer un match del plate mediante tecnicas HDRI es solo el principio.
También hay que tener en cuenta el trabajo de iluminación práctica en set. En muchas ocasiones el cinematógrafo de turno (y me atreveré a decir que la persona más respetada en un set de rodaje, incluso por encima del director) realiza un millón de trucos de iluminación cinematográfica que no se verían reflejados en los HDRI. Como por ejemplo iluminación negativa con placas negras, crear espacios negativos enormes cubriendo las paredes de una habitación off-camera para un determinado plano, luces direccionales intercambiables, etc.
Todos esos extras, generalmente no son recogidos por los HDRI, así que en muchas ocasiones nuestros mapas equirectangulares no serán 100% fieles a la iluminación del set.
En otras ocasiones incluso vamos mas allá, como por ejemplo cuando fotografiamos los HDRI en diferentes días que el rodaje, cuando parte del set ya no existe, etc.
Sirva esto para ilustrar algunas de las carencias de los HDRI.
Así que como estaba diciendo, hacer un buen setup de HDRI solo es el principio.
En muchas ocasiones tendremos que trabajar la iluminación CG para recrear iluminación cinemática, utilizando las técnicas que precisemos.
Algunos artistas prefieren empezar con un todo (HDRI) e ir quitando iluminación a medida que lo necesiten. Otros en cambio, prefieren empezar con la nada, e ir añadiendo todo aquello que precisen.
Luces directas, áreas, espacios negativos, rim lights, lo que sea necesario para crear un lenguaje visual basado en las leyes cinematográficas a las que estamos acostumbrados.
Los planos no serán físicamente correctos en relación al footage, pero en cine nada es real. Cine es precisamente eso, engañar al ojo humano.
Si nos conformamos en crear un plano realista, tendremos una fotografía perfecta, pero no estaremos contando ninguna historia. La iluminacion cinematográfica será la meta que tengamos que alcanzar para apoyar narrativamente a la acción.
Iluminación creada entre otras cosas, cubriendo todas las paredes off-camera con grandes paneles negros para restar luz y crear contraste. Este tipo de elementos no son recogidos por los mapas HDRI.
De todas formas, los HDRI siempre serán un seguro de vida, si la iluminación cinematográfica falla, o no hay tiempo de crearla o lo que sea, siempre tendremos los HDRI que nos darán una base muy consistente.
Introducción rápida a Ptex
¿Qué es Ptex?
Ptex es un sistema de mapeado desarrollado por Walt Disney Studios que está siendo utilizado en producciones de animación y efectos visuales en diferentes estudios alrededor del mundo. Si bien no podemos considerarlo como un estandard dentro de la industria, si que ha tenido una excelente acogida por parte de usuarios y colectivos.
¿Qué tiene de particular?
No requiere de UV Mapping tradicional, lo que permite a los modeladores ahorrarse un proceso tedioso, complicado y que puede ser bastante lento en función del asset a texturizar.
Ptex crea una textura para cada uno de los polígonos que forman la geometría de un asset.
El formato de archivo utilizado por Ptex es capaz de almacenar cientos de texturas en un solo fichero.
El filtrado en render es de mejor calidad que en las texturas tradicionales basadas en UV Mapping.
¿Puedo utilizar Ptex en cualquier software?
No, solo algunos motores de render y software de texturizado soportan esta tecnología, aunque bien es cierto que cada día son más. Estos son algunos de los que sí soportan Ptex.
- Vray
- Arnold
- RenderMan Studio
- MentalRay 3.10
- 3D Light
- Houdini
- Mari
- Mudbox
- 3D Coat
Paso a paso como utilizar Ptex en Mari, Maya y VRay.
Chequear el asset en Maya, cerciorarse de que no tenga UV Mapping alguno y exportar como .obj
- Crear un nuevo proyecto en Mari e importar el .obj exportado desde Maya.
- Seleccionar Force Ptex como Mapping Scheme y seleccionar Create From Face Groups en Selection Sets. Esto forzará a Mari a trabajar con Ptex por si acaso nos hemos olvidado algunos restos de UV Mapping, y nos creará un grupo de selección por cada cara de la geometría.
- Finalmente elige las opciones de textura que necesites.
En la nueva ventana que aparece, tenemos varias opciones. La primera es para cargar un archivo de Ptex en el caso de que ya hayan sido creadas texturas para el asset. Supongamos que otra persona ha trabajado en las texturas y nos pasa la geometría y el archivo para cargar en Mari.
La siguientes opciones son relativas a crear Ptex desde cero. Nos encontramos dos opciones diferentes.
- Uniform Face Size: Solemos utilizar esta opción cuando todas las caras de una geometría tienen similar tamaño. Con esta opción tenemos que seleccionar Per Face Texture Size, que es el tamaño en texels de cada textura que se aplica a cada una de las caras. Y finalmente el Format (8bits, 16bits o 32bits) y un Color base.
- Worldspace Density: Aplica la resolución de textura en texels a cada centímetro de geometría. Con este método las caras pequeñas tendrán menos resolución que las caras grandes. Generalmente yo utilizo este método.
Vemos que Mari se inicia, se carga nuestro asset y se crea un channel y una layer llamados Ptex. Fijaos que no tenemos acceso a la pestaña UV.
- Si seleccionamos, podremos comprobar que un Selection Set ha sido creado para cada una de las caras de nuestro asset. Ptex siempre funciona bajo polígonos individuales, así que poder seleccionarlos uno a uno es muy importante.
- Podemos pintar y ver que tal se comporta el trazo.
- En la barra de herramientas de Ptex podemos cambiar la resolución de las texturas de las caras seleccionadas. De este modo, si vemos que al pintar no tenemos suficiente resolución, simplemente seleccionamos las caras y aumentamos el número de texels. No olvides darle al icono redondo para aplicar los cambios.
- En este ejemplo he reducido el número de texels, y como podéis ver, el trazo es apenas visible y de muy mala calidad.
- Huelga decir que se puede utilizar cualquier herramienta de forma normal. Proyecciones, displacements, etc.
- Una vez terminada tu textura, para exportarla sigue el mismo proceso que con texturas basadas en UV Mapping. Simplemente click derecho encima del channel deseado y Export Current Channel Flattened.
- Utilizar las siguientes opciones en la ventana de diálogo.
- La forma mas rápida para comprobar si se ha exportado bien, es crear una capa vacía e importar el archivo.
- Para renderizar en Maya, simplemente importa el asset como .obj o cualquier otro formato.
- Crea un VRay Material y un nodo VRay Ptex.
- Listo, lanza el render y voilá!