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