Mip-Mapping

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.
Leer más

Neutralización de referencias fotográficas

En este vídeo muestro como neutralizar referencias fotográficas para mantener la consistencia entre imágenes fotografiadas en set. A diferencia de como muestro en algunos de mis cursos, en esta ocasión no utilizo Nuke, si no que, utilizo Adobe Lightroom, ya que en muchas ocasiones no dispondras de Nuke en un set de cine.

También anuncio un nuevo proyecto formativo que me estoy planteando para elephant vfx.

Leer más

Marvelous Designer -> Maya

Este vídeo complementa al que ya publicara tiempo atrás, donde mostraba el worflow Marvelous Designer -> 3D Max. En esta ocasión, muestro el mismo workflow utilizando Marvelous Designer y Maya, que es la opción mas común que encontrarás en un facility de VFX.

Leer más

Matchmoving stills

Nota: Este post contiene información exclusiva para los miembros de elephant vfx pro.

A raíz de las imágenes Legos que estoy haciendo de vez en cuando, me preguntan sobre como me planteo este tipo de imágenes. Como ya comenté en su día, la idea es muy sencilla, al igual que su ejecución. Lo importante, realizarlas en unas pocas horas.
Me llegan dudas sobre modelado, lighting, look-dev, etc. Una de las preguntas, era sin embargo sobre cual es mi proceso para recrear la cámara virtual, para matchear la cámara real. Como se tratan de stills, o imágenes fijas, es muy sencillo, aunque los principios de tracking y matchmoving son exactamente los mismos que con secuencias de imágenes. La ventaja, no necesitamos ningún software de matchmoving o tracking, lo podemos hacer fácilmente con cualquier software 3D.

  • Voy a ilustrar este ejemplo con esta imagen. A modo de "helper" he colocado en el suelo unos libros, podría haber sido una caja o cualquier otro objeto que nos indique dos lineas de fuga, para poder asi matchear la perspectiva.
  • Como con cualquier otra tarea de matchmoving y tracking, conviene conocer algunos datos de la cámara. Como por ejemplo, el focal lenght, la altura del tripode, el tilt (orientación) tamaño del sensor, etc.
  • Podemos comprobar toda esta información gracias a los meta datos, tanto en Nuke como en Photoshop (ojo, que todavía hay gente que utiliza Photoshop).
  • El siguiente paso es crear una cámara en Maya e introducir los valores de focal length.
  • También conviene ajustar el clipping plane, para poder ubicar nuestra escena. Se puede cambiar a posteriori.
  • En las opciones de film back de la cámara, vamos a poner el film gate como horizontal, ya que esa ha sido la posición de la cámara real.
  • Añadimos como image plane la fotografía.
  • Incrementamos el valor depth ya que no sabemos Lo grande que sera el entorno. De esta forma seremos capaz de ver toda la geometría, de lo contrario, se cortaría por la imagen utilizada en el imagen plane.
  • Como se puede observar en la imagen anterior, el aspect ratio de la cámara no coincide con el sensor de la fotografía. Hay que escalarlo en consonancia.
  • Con la información de altura del trípode y tilt, podemos orientar la cámara.
  • En este momento voy a crear un proxy para el suelo, y girar la cámara que aparezca en el plano.
  • Ayudándome de un "helper" en este caso el felpudo, voy a posicionar el suelo en una esquina.
  • Ahora podemos orientar toda la escena en base a esa esquina.
  • Creamos un grupo con la cámara y movemos su pivot point a la esquina.
  • Basta con rotar el grupo hasta alinear las dos lineas de fuga.
  • Una vez orientado el suelo, podemos moverlo o escalarlo para ocupar todo el espacio que se presupone.
  • Realizamos el set fitting con el resto de elementos.

Los suscriptores de elephant vfx pro podéis acceder a un video explicativo de 37 minutos.

Leer más

Mezclar displacement y varios bumps en Arnold

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.
Leer más

Meshlab polygon reduction

Seguramente Meshlab sea la única herramienta disponible para trabajar con cantidades muy altas de polígonos, al menos, sin contar software propietario de soluciones Lidar. Además, Meshlab es gratuito, open source y disponible para todo tipo de arquitecturas.

Estoy trabajando con terrenos complejos, de mas de 50 millones de polígonos. Maya simplemente no puede gestionar de forma eficiente semejante cantidad de polígonos. Lo ideal seria abrirlo en Zbrush y reducir la cantidad de polígonos mediante decimation, pero la gestión de memoria de Zbrush no es demasiado buena, y simplemente no te dejara abrir el terreno.

La alternativa es abrirlo en Meshlab y utilizando sus (rapidísimas) herramientas de reducción de polígonos, exportar versiones más ligeras para utilizar en Maya. Llevo mucho tiempo utilizando Meshlab para lidiar con Lidar, photogrammetry y otro tipo de geometrías muy pesadas, y sin duda creo que es la solución más adecuada para la mayor parte de trabajos que he tenido que realizar. (en Linux tienes algunos bugs un tanto fastidiosos).

  • Veamos como reducir los poligonos de este terreno de 16 millones de polys. Ya he descartado Zbrush ya que da error de memoria y no permite abrirlo.
  • En Meshlab existen diferentes soluciones para reducir la densidad de una malla, a mi particularmente me gusta Quadric Edge Collapse Decimation, sobretodo por su rapidez.
  • Existen diferentes estrategias para controlar el tipo de reduccion, me gusta utilizar el percentage reduction. En este caso estoy reduciendo a la mitad, 0.5
  • El resultado como cabe de esperar, es de 8 millones de polys.
  • He vuelto a correr la herramienta para obtener un terreno de 4 millones de polys y llevarmelo a Maya.
Leer más