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.
Posted
AuthorXuan Prada
2 CommentsPost a comment

Una situación muy común cuando realizamos look-dev, es el combinado de varios displacement maps y varios bump maps. En ocasiones anteriores ya habíamos hablado de como combinar varios displacement maps. En esta ocasión, voy a contaros como podemos añadir varios bump maps, encima de una o varias capas de displacement, utilizando Maya y Arnold. Prácticamente todos los assets en cine llevan como mínimo una capa de displacement y una de bump. Los hero assets, llevarán varias de cada.

  • Lo primero que voy a hacer es añadir el displacement map. En esta ocasión, por simplificar, voy a utilizar una sola capa de displacement. Échale un vistazo a este tutorial para ver como añadir varias capas de displacement. Como displacement voy a utilizar un simple noise.
  • El siguiente paso es conectar el bump map, como lo harías normalmente, conectando el red channel al bump value. Ahora mismo tendriamos una capa de displacement y una capa de bump.
  • En el hypershade crea tu textura para la segunda capa de bump. En este caso un low frequency noise.
  • Crea un nodo average y dos nodos multiply.
  • Conecta el red channel del primer bump al input 1 del multiply. Controla su intensidad con el input 2.
  • Repite el paso anterior con el segundo bump map.
  • Conecta los outputs de los multiply nodes al input 3D0 y 3D1 del average node.
  • Es muy importante que el bump depth sea 1 para que esto funcione.

Ya está disponible nuestro nuevo curso online, Texturizado y Look-development avanzado.
Alrededor de 26 horas de formación profesional en efectos visuales. En este curso avanzado y complementario al curso de iniciación al texturizado y look-development, explicamos en profundidad como funciona un pipeline de texturizado y look-dev dentro de un facility de efectos visuales. Cubrimos no solo las técnicas y procedimientos de texturizado y look-dev estandarizados dentro de la industria, si no que aportamos información adicional muy útil y necesaria para todos aquellos aspirantes a trabajar como texturizadores y look-development artists en al industria de los efectos visuales para cine. Hablamos de software de texturizado, pipelines de color en VFX, formatos de texturas, workflows de look-development, etc.

El curso, además de toda la información de la que hablábamos en el párrafo anterior, también incluye un extenso recorrido por The Foundry Mari, el software de texturizado por excelencia en VFX para cine. Una vez concluidos todos los preliminares del curso, realizamos una práctica de producción, donde texturizaremos desde cero un asset propio de un proyecto cinematográfico, el Hulkbuster Mk44 de la película The Avengers. Una vez terminadas todas las texturas, continuaremos nuestra práctica durante la etapa de look-development en Maya y Nuke hasta conseguir terminar una primera versión que podríamos enseñar a nuestro VFX supervisor.

Tienes toda la informaci
ón en la página del curso.

Posted
AuthorXuan Prada

Una de las opciones más útiles existentes en Clarisse son los shading layers. Pueden utilizarse para diferentes tareas, y además combinarse entre si para crear sistemas de shading complejos. En esta ocasión vamos a ver como utilizar los shading layers para renderizar y crear variaciones de crowd (multitudes) de forma muy rápida, y sobre todo, muy sencilla. Necesitando apenas unos minutos para gestionar el shading y sus variaciones en centenares de personajes.

Este post viene acompañado de un video de alrededor de una hora para los suscriptores del programa elephant vfx pro.
Todos los suscriptores ya habéis recibido un email con toda la información.

  • Lo primero que he hecho, es crear un setup IBL, con un día más bien nublado sin dirección de luz muy marcada.
  • He importado el cache de animación con crowd en un context llamado geometry y también he creado un context donde crearé todos los shaders y texturas.
  • Como se puede observar en la imagen, los caches de animación están completamente desorganizados en la escena, tal cual vienen del paquete de simulación. Gracias a los shading layers podremos asignar fácilmente los correspondientes shaders y texturas, también variaciones de los mismos.
  • Clarisse nos permite asignar shading layers bien por nomenclatura exacta de los assets que van a recibir el shader o bien por localización de los mismos. Por ello, también he creado algunos context adicionales, para explorar ambas metodologías.
  • Gracias a una estructura de shading layers muy simple y a unas reglas básicas, tanto de nomenclatura como de localización, con apenas una docena de shaders podemos renderizar un sistema de crowd complejo en apenas unos minutos de trabajo.
  • En el caso de querer ver en viewport el comportamiento de un shading layer específico, basta con seleccionar el modo previz, apuntar al context donde tenemos los crowd y seleccionar el shading layer.
  • Finalmente subimos el sampling en el raytracer para renderizar la escena con calidad final.

En el siguiente video disponible para suscriptores del programa elephant vfx pro, podéis ver todo el proceso detallado y con explicaciones adicionales, duración alrededor de una hora.

Hace tiempo ya os conté como proyectar en Nuke en 3D sobre el espacio UV, algo muy común, sobre todo en tareas de matte painting. Hoy voy a contaros otro workflow también muy común para matte painters, environment artists o texture painters.
Como sabéis, Mari y Nuke son las herramientas más utilizadas en VFX para tareas de texturizado, por lo general utilizaremos Mari para este tipo de trabajos, ya que todo resulta más sencillo, pero con frecuencia los matte painters y environment artists utilizan Nuke para proyectar todo tipo de footage en geometrías básicas que soportarán sus matte painters

Desventajas de utilizar Nuke vs Mari

  • Es mas lento gestionar todo el material, ya que hay que trabajar UDIM por UDIM.
  • No existe virtual texturing, lo que hace todo el proceso más lento al tener que trabajar con footage de alta resolución (aunque se pueden utilizar proxies).

Ventajas de utilizar Nuke vs Mari

  • No depende del paint buffer. Siempre obtienes la mejor resolución de textura posible.
  • Muy rápido y fácil realizar actualizaciones de cualquier tipo. Nodos!
  • Te ahorras la licencia de Mari (£1,233)

Veamos como hacer el set-up

  • Para esta demo, voy a utilizar este panorama que servirá por ejemplo para el fondo de un plano, y supongamos que ha sido creado por un matte painter y necesita pintar cualquier cosa encima para adaptarlo a las necesidades del plano.
  • El objetivo es hacerlo en Nuke de forma no destructiva y ser capaces de exportar varios UDIMs para texturizar el geometry support donde se aplicará el matte.
  • El geometry support es un plano con 5 UDIMs.
  • Ya en Nuke, importa el geometry support y el footage.
  • Crea una cámara.
  • Utiliza un nodo Project 3D para conectar el footage y la cámara.
  • Desactiva la opción crop del Project 3D. Esto es necesario para expandir la proyección a UDIMs fuera del rango 0-1
  • Utiliza un nodo UV tile para apuntar al UDIM que necesites trabajar.
  • Conecta el img input del UV tile al geometry support.
  • Utiliza un nodo UV project conectado al geometry support y la cámara.
  • Asegúrate de que projection está off. Esta información viene dada por le UV tile.
  • Importa la cámara del plano o la que utilices para la proyección.
  • Si miras a traves de la camara en el espacio 3D la proyeccion deberia de verse de forma correcta.
  • Conecta un scanline render al UV project.
  • Configura el projection mode como uv.
  • En el espacio 2D veras la proyección aplicada al UDIM que previamente hayas indicado.
  • Si necesitas trabajar en otro UDIM basta con indicarlo en el UV tile.
  • Este es el setup básico que necesitas. A partir de aquí realiza los cambios que quieras en el footage, pinta encima, etc.
  • Exporta cada uno de los UDIMs como textura y listo para llevar a tu software 3D. Aquí un ejemplo renderizado en Maya/Arnold.