6 de julio de 2012

Del 2D al 3D: Camera Mapping con Blender (y II)

Hace unas semanas hablamos aquí acerca de cómo conseguir el efecto “Camera Mapping” para pasar de una imagen plana 2D a un vídeo donde podemos movernos entre los elementos de la fotografía simulando un entorno 3D.

En aquel tutorial tomamos una imagen preparada para la obra de teatro “El amor de Perlimplín y Belisa en su jardín”, obteniendo un resultado básico.

Recordemos que el objetivo inicial de este trabajo era no sólo conseguir el efecto 3D sino también obtener un aspecto final de imagen antigua, de modo que durante el vídeo se transmitiera la sensación de estar moviéndonos entre los personajes de una foto tomada hace varias décadas.

En aquella ocasión estos efectos los añadió coleto a partir del postprocesado del vídeo, pero hoy vamos a partir del post inicial para añadir algunos detalles interesantes.

En concreto, veremos cómo conseguir los siguientes efectos:
  1. Cambiar la distancia focal de la cámara durante el vídeo para enfocar distintos planos
  2. Difuminar los bordes para dar realismo a los distintos planos
  3. Añadir un efecto de viñeteado, oscureciendo ligeramente los bordes de la imagen
Está claro que con una herramienta de procesado digital posterior puede hacerse prácticamente de todo, pero como usuario de Blender me resulta muy útil poder retocar los 3D en el mismo programa, lo que en algunos casos como el desenfoque es más sencillo en esta etapa.

Como introducción, para conseguir los efectos trabajaremos con la edición de nodos, que puede activarse dentro de la sección Compositing activando la opción Use Nodes. Inicialmente sólo tenemos dos nodos, Render Layer y Composite. Lo normal es que cada nodo tenga una o varias entradas, una o varias salidas y una serie de parámetros de ajuste. En este caso el primero sólo tiene salida, el render del 3D, y el segundo sólo tiene entrada, que el resultado final de todas las modificaciones. Ahora lo que haremos será incluir nodos específicos entre estos dos para obtener los efectos deseados.


Si en algún momento veis que vuestros nodos no tienen todas las opciones que deberían, fijaros que en la parte superior derecha de cada uno tienen varios botones:
  • El botón + muestra u oculta puntos de entrada o salida adicionales. Si te falta alguno prueba con éste
  • El botón siguiente muestra u oculta opciones adicionales del nodo.
  • El tercer botón muestra y oculta una preview dentro del nodo del efecto que se consigue con él.


Modificar la distancia focal

Lo que queremos conseguir en nuestra imagen es que el punto de enfoque de la cámara comience sobre la pareja de novios y se vaya desplazando durante el vídeo para que acabe enfocando el libro que aparece en primer plano. Nos interesa también que todo lo que no esté cerca del punto de enfoque quede algo borroso simulando la profundidad de campo.

En primer lugar nos movemos al fotograma donde la cámara epieza a moverse y creamos un objeto Empty que situaremos sobre el plano de la pareja de novios y renombraremos como “focus”.

Ahora seleccionamos la cámara y dentro de sus opciones, en la sección Deep of field seleccionaremos nuestro empty como foco.  Para desplazar el foco crearemos keyframes en los momentos clave.

Alternativamente puede situarse esta distancia insertando un valor que se modifica durante el vídeo. Para añadir keyframes a un fotograma, nos colocaremos en el frame correspondiente y con el ratón sobre la celda del número pulsaremos la tecla I. De esta forma grabaremos el valor igual que fijamos la posición de un objeto.

Pero esto no es suficiente, ya que deberemos insertar un nodo que cree realmente el desenfoque. Para ello volvemos a la visión de nodos y, con el cursor sobre el área correspondiente, mediante Shift + A insertamos un nodo tipo Filter > Defocus. Unimos las entradas y las líneas arrastrando desde los puntos correspondientes, y configuramos los parámetros tal y como se aprecia en la imagen.


En la vista de composición veréis que por defecto una de las divisiones es utilizada como visor del renderizado. Una de las ventajas de Blender a la hora de trabajar con los nodos, es que los cambios que hagáis se reflejan automáticamente en el render sin tener que volver a ejecutarlo (tened en cuenta que según los cambios y vuestra máquina la actualización del renderizado puede tardar más o menos).

De los parámetros que veis en la imagen son especialmente importantes los siguientes:
  • fStop: indica la amplitud del enfoque. Valores muy bajos desenfocarán toda la imagen mientras que el valor por defecto, 128, hará que todo esté enfocado.
  • Max Blur: indica la cantidad de desenfoque máximo en las zonas fuera de la distancia de enfoque.
  • Use Z-Buffer: Si esta opción está desactivada, la distancia de foco viene dada por el valor Z-Scale. En nuestro caso queremos que sea nuestro objeto "focus" el que la marque, así que la activamos. Ahora necesitamos pasarle al nodo toda la información de las distancias de los objetos a la cámara, por lo que unimos la salida Z del nodo Render Layer con la entrada Z del nodo Defocus.

Para completar el renderizado, nos movemos al frame 200 y añadimos un keyframe para el "focus" de modo que quede situado con el plano del libro, que es el que queremos enfocado al final del plano.

El resultado es algo así:


Como puede verse en la segunda imagen, nos encontramos con un problema añadido, y es que no sólo el libro está enfocado, sino también el suelo que lo rodea. Esto es debido a que al estar todo el plano en distancia de enfoque la parte de imagen que lo atraviesa se ve enfocada también (esto ocurre a pesar de que la imagen del libro está recortada justo en su borde).

Para solucionarlo, tendremos que adaptar la forma del plano al libro, de modo que no sobresalga a su alrededor (solución poco elegante pero aún así práctica). Para esto es muy importante que partamos del frame donde la visión de la cámara coindice con la foto real, de modo que las modificaciones que hagamos coincidan exactamente en nuestro render final.

Por tanto, seleccionamos nuestro plano, entramos en modo diseño y creamos y movemos vértices para que la forma del plano coincida con la imagen que queremos enfocada. Es fundamental que en el proceso los movimientos de los vértices los hagamos sólo en los ejes x y z, para evitar deformaciones del plano en el eje perpedicular al mismo (en este caso el y).

Una vez hecho esto, para evitar que la textura quede deformada, deberemos volver a asignar las coordenadas UV a nuestro plano. Para ello vamos a la vista UV Editing, pulsamos 0 para situar nuestra visión en la cámara, seleccionamos el plano del libro, entramos en modo diseño con el tabulador, seleccionamos todos los elementos (tecla A), pulsamos la tecla U y cliqueamos en Project from View.


Ahora de nuevo nuestra textura está ajustada al plano y en función de la precisión de nuestro ajuste veremos algo así:


La finura del resultado dependerá del tiempo que empleemos en el proceso y el ajuste del plano.

Para terminar será conveniente insertar keyframes intermedios para el empty focus, de modo que el cambio del desenfoque quede como buscamos.



Difuminar los bordes de los planos

Del resultado de la parte anterior, uno de los defectos más visibles es la clara definición de los bordes de los planos. Esto es un efecto demasiado definido que no corresponde con las imperfecciones de una imagen real. Por ello en segundo efecto que utilizaremos será un ligero desenfoque, que le añadirá imperfección a la escena. Y es que como dicen algunos cracks del diseño 3D, uno de los secretos de un buen renderizado es introducir las imperfecciones necesarias.

Para ello, a continuación del anterior introducimos el nodo Filter > Blur y modificamos los parámetros como se indica.

Además de para difuminar, este nodo nos permite añadir efectos interesantes como los destellos que provoca una fuente de luz sobre la cámara, pero eso es otro tema sobre el que encontraréis más información aquí, junto con más información acerca del compositor de Blender.

Como podéis ver a continuación, el efecto añade realismo a la imagen.



Efecto de viñeteado

Por último añadiremos un efecto de viñeteado al resultado final, haciendo que los bordes de la imagen queden oscurecidos, dando un toque antiguo. Para ello, colocaremos una serie de nodos que utilizarán la salida de nodos anteriores, es decir entre el nodo Blur y el nodo Composite.

En este caso usaremos un recurso muy común para obtener efectos complejos de nodos, que es el de combinar varios resultados para obtener la imagen final. Primero crearemos el efecto de viñeteado, y posteriormente se lo añadiremos a la imagen que obtenemos tras los dos puntos anteriores.

Para crear el efecto de viñeteado necesitamos utilizar tres nodos:
  1. Add > Distort > Lens Distortion: Conectamos la imagen de entrada y le damos valor 1. Creará la forma del viñeteado distorsionando la imagen de entrada
  2. Add > Convertor > Math: Conectado tras el anterior, transformará la distorsión en valores blancos y negros, eliminando el color si no nos interesa. Seleccionamos Greater Than y fijamos su valor a 0.
  3. Add > Filter > Blur: Añadimos de nuevo este nodo para evitar formas demasiado definidas. Seleccionamos Fast Gaussian , activamos valores relativos y fijamos un 20% en cada eje.

A la hora de trabajar con nodos, es útil proyectar sobre el fondo de trabajo el resultado de nuestros cambios para ser más ágiles. Para ello añadimos un nodo alternativo al Composite, que en lugar de enviar nuestra salida a la imagen final, la envía como fondo de trabajo. Como veis, también hay que activar la opción Backdrop.


Con este sencillo paso tenemos ya la forma del viñeteado, y pasamos a combinarla con la imagen obtenida previamente. Para ello necesitaremos el nodo Add > Color > Mix. Este es un nodo muy versátil, con gran cantidad de opciones. En este caso seleccionaremos modo Multiply, factor 1 y, muy importante, la imagen completa en la entrada de arriba y el efecto de viñeteado abajo. En este caso el orden no es importante, pero generalmente el efecto del nodo Mix no es conmutativo.


Y este es el resultado final del render y el vídeo de toda la escena





Con este texto Andrés termina de explicar la parte de Blender de nuestro manual para pasar imagenes 2D a 3D. En la próxima entrada explicaré la parte de Adobe Premiere.

2 comentarios:

  1. Espectacular y super bien explicado..me inspiro en ustedes para desarrollar mi proyecto.-

    ResponderEliminar
    Respuestas
    1. Gracias, espero que tu proyecto salga genial

      Eliminar