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.

Proyectar footage, backplates o cualquier otro tipo de material fotográfico y/o pintado en Nuke, es probablemente una de las tareas mas comunes que podemos realizar en un estudio de efectos visuales. Compositores, texture artists, matte painters o paint artists, son generalmente los encargados de realizar este tipo de tareas. En algunas ocasiones, en lugar de simplemente proyectar los detalles que necesitemos en los renders, es preciso bakear el trabajo realizado en Nuke en las propias texturas de nuestros assets, y así, poder renderizar de nuevo sin necesidad de volver a pasar por Nuke. La mejor forma de realizar este tipo de tareas, es proyectando los detalles directamente en las UVs de los assets.

  • He exportado mi escena de Maya a Nuke. En este sencillo ejemplo tengo la cámara utilizada para el render, y un cubo donde necesito proyectar mi footage.
  • Para importar la geometría utiliza un ReadGeo y para la cámara un nodo Camera.
  • He importado el footage que quiero proyectar, en este caso es un solo frame.
  • Conecta el footage a un nodo Porject 3D.
  • Conecta el input de la camara el nodo Porject 3D.
  • Conecta el img input del nodo ReadGeo al nodo Project 3D.
  • Mira a traves de la camara.
  • Además de estar proyectando el footage en la geometría, también estoy pintando algunos detalles encima de la misma, utilizando un rotopaint.
  • Conecta un nodo UVProject al axis/cam input, y el secondary input al ReadGeo.
  • Deja la opcion Projection como Off.
  • Conecta un ScanlineRender al UVProjector mediante el input obj/scene.
  • El projection mode tiene que estar como UV.
  • Si cambias el visor 3D a 2D verás como el trabajo realizado en Nuke aparece en el espacio UV de tu asset.
  • Utiliza un write node para escribir el trabajo a textura.
  • Ya ya está, listo para ser renderizado en Maya.

En este post voy a hablar sobre mi metodología a la hora de ensamblar diferentes imágenes o porciones de un entorno para crear imágenes panorámicas destinadas a matte painting. No estoy hablando de panoramas equirectangulares HDRI para 3D lighting, para eso utilizo ptGui que es seguramente la mejor opción disponible.

Me refiero simplemente a juntar imágenes o videos para crear una panorámica lista para utilizar en cualquier software 3D o 2D, no importa si juntamos 2 imágenes o 15, la forma de trabajar es la misma.

Este proceso es mas complicado y requiere mas tiempo humano que utilizar herramientas de stitching automáticas, pero el poder de esta técnica radica en que puede utilizarse con footage (video) y se puede mantener la estructura nodal y no destructiva de Nuke, en caso de actualizaciones o revisiones de las imágenes.

Las imágenes que estoy utilizando en este ejemplo han sido tomadas desde una base rotatoria  nodal, pero no están calibradas ni ajustadas a nada. De hecho, no necesitan estarlo, lo bueno de esta técnica es que se pueden mezclar diferentes puntos nodales, diferentes focales de lente e incluso diferentes tamaños de sensor que vengan de diferentes cámaras.

  • Estoy utilizando 7 imágenes tomadas desde un puente en Chiswick, West London. La resolución de las mismas es de entorno a 7000px así que he creado proxys de unos 3000px para agilizar el trabajo.
  • Todas las imágenes han sido tomadas desde el mismo punto nodal, utilizando la misma lente focal, misma exposición, y siempre con el balance de blancos e ISO bloqueados.
  • Necesitamos conocer diferente información acerca de estas imágenes. Lo mas importante es la focal, y el tamaño del sensor.
  • Conecta un nodo view meta data a cada imagen para leer esta información. En este caso yo he tomado las fotos y ya se todo esto, porque lo he configurado en la cámara. Pero si no estas seguro, esta es la mejor forma de leer los meta datos de la cámara.
  • Puedo ver que la focal es de 280/10 que significa que he utilizado una lente de 28mm.
  • No aparece por ningún lado el tamaño del sensor, pero si aparece el modelo de la cámara, en este caso una Nikon D800. Si busco por internet las especificaciones de la cámara puedo ver que el tamaño del sensor es 35.9mm x 24mm.
  • Crea un nodo camera con la información del sensor y el focal.
  • En este punto es buena idea corregir la distorsión de lente de las imágenes. Lo ideal, especialmente si estas utilizando footage, es corregir la distorsión de lente utilizando un nodo lens distortion en Nuke, pero para ello has de haber filmado una carta de distorsión de lente en el set.
  • En este caso, como estoy utilizando fotografías, voy a utilizar el modulo de corrección de lente de Adobe Bridge.
  • Conecta un nodo card a la imagen, y elimina las subdivisiones, que no las necesitamos.
  • También desactiva la opción image aspect, para tener una card format 1:1
  • Connecta un nodo transfer geo al card, y su input axis a la cámara.
  • Si movemos la cámara, el card depende de la misma.
  • Ahora vamos a crear un custom parameter para que la card y la cámara estén siempre alineadas, con la focal correcta y el tamaño de sensor. Así cuando toquemos la cámara, el card se alineará de forma automática.
  • En las opciones del nodo transform geo, RMB y seleccionar la opción manage user knobs, y añadir floating point slider. Llamalo distance, y pon el min a 0 y el max a 10
  • Esto nos permitirá ajustar automáticamente el card en relación a la cámara.
  • En el nodo transfrom geo translate z presiona la tecla = para escribir una expresión y escribe: -distance
  • Ahora si jugamos con el valor distance, vemos que la card se mueve acorde.
  • Ahora tenemos que referirnos al tamaño del sensor y al focal para que el card se ajuste de forma automática y correcta cuando la cámara se mueva o se rote.
  • En el nodo transform geo, vete a x scale y escribe la siguiente expresion: (input1.haperture/input1.focal)*distance y en la y scale escribe: (input1.vaperture/input1.focal)*distance
  • Si tocamos el parámetro distance, ahora vemos como el card se alinea a la perfección.
  • Crea un grupo con el card, la cámara y el nodo transfer geo.
  • Elimina el input2 e input3 y conecta el input1 al card en lugar de a la cámara.
  • Sal del grupo y conéctalo a la imagen. Normalmente hay problemas de refresco, así que corta el grupo y pégalo, eso hará que se resuelvan los problemas.
  • En el grupo, RMB y vete a manage knobs, selecciona el focal y el tamaño de sensor. Esto es solo para tener la información visual, no vamos a cambiarlo.
  • También selecciona la rotación de la cámara, y el parámetro distance que creamos anteriormente.
  • Teniendo estos controles aquí no necesitaremos entrar al grupo cada vez que necesitemos tocarlos, y en el caso de la rotación y la distancia, los tocaremos mucho.
  • Crea un nodo project 3D y conecta el input camera a la cámara, y el input1 al input.
  • Crea un nodo switch debajo del transfer geo y conecta el input1 al project 3D.
  • Crea otro custom parameter en el grupo. En este caso utiliza pulldown choice, y llámalo mode. Añade dos lineas: card y project 3D.

En el nodo switch añade una expresion: parent.mode

  • Deja el modo como project 3D.
  • Añade un nodo sphere, escálalo grande y conéctalo al camera projector.
  • Verás la imagen proyectada en 3D en la esfera, en lugar de renderizarse en el card.

Dependiendo de cual sea tu pipeline, puedes querer utilizar projector 3D o cards. Seguramente en algún momento necesites los dos, así que de esta forma puedes tener un control para mutar entre ambos.
De momento, déjalo como card y elimina la esfera.

  • Mira a través de la cámara en el viewport y fija la vista (lock).
  • De esta forma podemos hacer zoom sin perder la cámara.
  • Fija la linea de horizonte jugando con la rótacion de la cámara.
  • Copia y pega el grupo camera projection, conéctalo a la segunda imagen y establece la linea  de horizonte, siguiendo los mismos pasos que con la imagen anterior.
  • Crea un nodo scene y añade las dos imágenes. Asegúrate de que todas las imágenes tienen canal alpha completamente blanco. Puedes utilizar la opción auto alpha.
  • Mira a través de la camara de la primera imagen, lock it. Haz zoom out y empieza a jugar con la rotación y la distancia de la segunda imagen, hasta que queden perfectamente alineadas.
  • Repite el proceso con todas la imágenes. Simplemente haz lo mismo que con las dos primeras imágenes. Mira a través de la cámara anterior, fíjala, zoom out y juega con la distancia y rotación de la siguiente imagen hasta que estén alineadas.
  • Crea un nodo de camera y llámalo shot camera.
  • Crea un nodo scanline render.
  • Crea un reformat node y pon el formato de tu plano. En este caso estoy utilizando un super 35, es decir, 1920x817
  • Conecta el obj/scene del scanline render al nodo scene.
  • Conecta el input camera del scanline render al shot camera.
  • Conecta el reformat al bg input del scanline render.
  • Mira a través del scanline render en el espacio 2D y verás el panorama a través del shot camera.
  • Juega con la rotación de la cámara para posicionar el panorama donde lo necesites.

Si solo necesitas ver el panorama a través del shot camera, ya estaría. Pero digamos que también quieres proyectarlo en un espacio 3D.

  • Crea otro scanline render node y cambia la proyección a spherical. Conéctalo a la escena.
  • Crea un nodo reformat y escribe un formato equirectangular, en mi caso estoy utilizando 4000x2000
  • Crea un nodo sphere y conéctalo al scanline render con formato spherical. Pon un mirror node en el medio para invertir las normales de la esfera, ya que la estamos viendo desde su interior.
  • Crea otro scanline render y conecta su input camera al shot camera.
  • Conecta el bg del scanline render al reformat super35.
  • Conecta el scn/obj del scanline render al sphere node.
  • Ya está, esto es todo lo que necesitas.
  • Si miras a través del scanline render en el espacio 2D o 3D verás que tenemos el panorama proyectado en 3D y renderizado a traves de shot camera.

Puedes descargarte la escena de ejemplo aquí.

Posted
AuthorXuan Prada