23 de abril de 2012

Del 2D al 3D: Camera Mapping con Blender


Como ya dije cedo esta entrada del blog a Andrés para que os explique como modeló en 3D las fotografías para realizar el vídeo:


Hola a todos,

Como ya estoy presentado, ¡creo que podemos pasar directamente a la acción!

Tal y como coleto os ha comentado, para el renderizado de los videos con "sensación" 3D utilizamos el programa free open source llamado Blender.

Ya decíamos que esta herramienta no es la única necesaria, puesto que se necesitó un editor de imágenes previo para preparar las fotografías y un programa posterior de edición de vídeo para darle los efectos finales. Estas partes están ya descritas con suficiente detalle, así que pasaré a mi labor que se centró en la creación de los vídeos.

La razón de utilizar Blender es que está publicado bajo la licencia pública general GNU, pero sobre todo porque en mi modesta opinión tiene una gran calidad como software de modelado 3D. En concreto para este tutorial utilizaremos la versión 2.62 en su versión ZIP para Windows 64 bits (podéis encontrar versiones para 32 y 64 bits en Windows y Linux, Mac OS X y FreeBSD).

Pero yendo al grano, ¡pasemos al tutorial! Para seguirlo más fácilmente sería recomendable ojearse algún tutorial que explique los conocimientos básicos de Blender como el modelado básico de objetos o el manejo de interfaz. De todas formas lo voy a intentar explicar para que cualquiera pueda utilizarlo sin conocimientos previos.

Al final de la entrada podréis encontrar algunos links interesantes con información sobre este programa y sus posibilidades.


El proceso

Como resumen del proceso, diré que lo que buscamos es conseguir el llamado camera mapping, donde a partir de una imagen 2D convencional estática generamos un vídeo con movimiento donde la cámara parece moverse por la escena real generando un efecto tridimensional. Para ello tenemos que generar un entorno 3D reconstruyendo a grandes rasgos la escena de la foto, colocando cada uno de los elementos importantes de la foto sobre un plano que situaremos en en este entorno.

Para obtener un buen resultado, es necesario centrarse en estos puntos:
  • Un buen recorte de los elementos en la imagen principal.
  • Una reconstrucción tridimiensional de la escena que guarde las proporciones
  • Poner los recortes adecuadamente sobre cada plano de forma que no se distorsionen durante el movimiento de la cámara.
  • Añadir efectos posteriores que aumenten realismo.
Como referencia en el tutorial utilizaremos una imagen de las que aparecen en el vídeo:

En este caso hay varios elementos que nos importan:
  1. El suelo: probablemente el elemento que más distorsión puede sufrir.
  2. La pareja de novios: dada la distancia es suficiente con añadirlos en un mismo plano.
  3. El libro y la roca donde se apoya: están en un primer plano y serán parte fundamental.
  4. El fondo de la imagen: será la parte más estática.
Como ya partimos de los elementos recortados con Photoshop que hemos obtenido siguiendo el procedimiento explicado por coleto en anteriores entradas podemos empezar a trabajar preparando el escenario de trabajo.


Primeros pasos con Blender

Lo primero que vamos a hacer es abrir Blender, para ver más o menos esto:
De la escena nos sobra ese cubo, así que lo seleccionamos haciendo click con el botón derecho sobre él y tras pulsar "x" confirmamos. Ahora seleccionamos la cámara con el botón derecho del ratón y cambiamos a la vista frontal para tener un punto de partida simple pulsando el "1" en el teclado numérico. Por defecto los botones numéricos sobre las teclas están asociados a las capas, y los del teclado numérico a las vistas; en caso de que trabajéis en un portátil podéis activar la emulación del teclado numérico, de modo que los la fila de números sobre las letras sirva para cambiar las vistas.
Una vez en la vista frontal fijamos la cámara en la posición actual con "control+alt+0" para que ambas coincidan. El resultado será el siguiente, donde la línea naranja nos indica que la cámara está seleccionada:
A continuación ajustamos la cámara para ajustar el punto de partida:
  • Colocamos como fondo la foto completa para que nos sirva de referencia (no aparecerá en el renderizado). Para ello pulsamos la tecla "N" para abrir la barra de propiedades, activamos la opción Background Images, pinchamos en "Add Image" y por último "Open", para buscar la imagen en nuestro ordenador. El valor "opacity" hará la imagen más o menos transparente.
  • Ahora con el botón derecho del ratón seleccionamos la cámara. Fijamos la resolución del 3D para que coincida con la de la fotografía, así como la distancia focal de la lente utilizada, en caso de que la conozcamos, introduciendo la información en los campos indicados. En nuestro caso la lente era de 34mm y la resolución 5184x3456 px. Sin embargo para reducir los tiempos de trabajo preferiremos que en lugar de trabajar con la resolución completa Blender utilice sólo un 10% en lugar del 50% por defecto. Al reducir la resolución efectiva todo será más rápido, en especial la edición del vídeo. En cualquier momento podemos aumentar o disminuir este porcentaje.
  • Por último con la cámara seleccionada movemos y rotamos la cámara hasta que la perspectiva de la cámara coincida con la de la imagen, que ahora vemos de fondo. Es útil utilizar la rejilla que se ve en el 3D como referencia del suelo de la imagen. De esa forma podemos modificar la posición y giro de la cámara asumiendo que esta rejilla ha de coincidir con el suelo de la foto. Puesto que la imagen que tenemos es un pequeño picado subiremos la cámara y la giraremos un poco hacia el suelo.


Propiedades de los objetos

Una vez posicionada la cámara comenzamos a añadir los planos (mayúscula+A, Mesh<Plane) para cada elemento (suelo, libro+piedra, novios y fondo), y guiándonos por la imagen de fondo los colocamos en su posición. Resulta útil seleccionar la vista de "wideframe" para ver sólo las aristas de los objetos, pulsando la tecla "Z". No es necesario que la forma de los planos se ajuste a los elementos, sólo que tengan el tamaño adecuado para que los contengan.
Como apunte en caso de que seas totalmente nuevo en Blender, para editar las propiedades de un objeto tenemos tres herramientas, de las cuales utilizaremos dos para colocar nuestra cámara en posición.
  • Desplazamiento: para mover un objeto primero lo seleccionamos (botón derecho) y pulsamos la letra “G”. En este momento podremos moverlo en el plano de visión que tengamos, pero podemos restringir el movimiento a alguno de los ejes cartesianos. Para esto después de pulsar “G” hacemos lo propio con la letra del eje, “X”, “Y” o “Z”. También podemos realizar el movimiento respecto a uno de los ejes de nuestro objeto pulsando dos veces en lugar de una la tecla del eje.
  • Rotación: para rotar un objeto, la mecánica es exactamente igual que el desplazamiento, pero la tecla es “R”.
  • Escalado: de la misma forma que los anteriores, la letra correspondiente es “S”.
Un apunte común para los tres casos es que tras pulsar la tecla correspondiente es posible definir la modificación manualmente moviendo el ratón, o bien introduciendo mediante el teclado el valor exacto (una distancia, un ángulo o un factor de escala).

Además en la barra de propiedades (que se despliega con la tecla “N”) aparecen los valores de posición, rotación y escala que puedes modificar manualmente.


Insercción de los métodos y texturas

Ahora llega el momento de añadir las texturas, y para ello hemos de crear un material adecuado para uno de los planos, y que después copiaremos al resto.
  • Seleccionamos un plano y vamos al menú de materiales.
  • Pinchamos "New" para crear un material. Es conveniente renombrarlo para no confundirlos después.
  • Después modificamos sus propiedades para que sean tal y como se indica en la imagen. Activamos la transparencia y desactivamos las sombras. Asegúrate de reducir a 0 su valor alfa. En conjunto, esto hará que el material sea invisible completamente, dependiendo sólo de la textura que elijamos en el siguiente paso.
 
  • Para crear la textura pinchamos en el menú correspondiente y de la misma forma pinchamos en "new" para crear una nueva.
  • La renombramos y seleccionamos su tipo "Image or Movie".
  • En la parte de "Image" pinchamos en open y seleccionamos el archivo con el recorte correspondiente.
  • Ahora es necesario activar la opción "Premultiply" para suavizar los bordes, y seleccionar las coordenadas UV. Estas son las coordenadas que utilizaremos para fijar nuestra imagen recortada al plano creado.
  • Por último, en las opciones de influencia tienes que activar tanto el color como el valor alfa, para que la transparencia del objeto la marque la textura y no el plano. De esta forma evitamos tener que recortar el plano justo al tamaño del objeto.
    Este es un buen momento para guardar el archivo, cosa recomendable antes de realizar un renderizado. Para ello, si pulsas F12 para hacer el render, verás que la textura no está bien colocada. Nos falta establecer las coordenadas UV.

    Para esto tienes que situarte en la vista de la cámara (con el botón 0 de teclado numérico) y seleccionar tu plano con el botón derecho. Entra en modo edición pulsando "tabulador" y pulsa "A" hasta que todos los elementos del plano estén seleccionados (en naranja). Ahora pulsamos la tecla "U" y en el menú que aparece seleccionamos la opción Project from view, para que cree las coordenadas a partir de la vista de la cámara.
    Lo que acabamos de hacer ahora es decirle a Blender que sitúe la textura seleccionada sobre el plano en función de la visión que tenemos en la cámara, que es justo lo que queremos para que se vea igual que en la fotografía original. El resultado de renderizar ahora es éste.
    Es el momento de repetir el proceso con todos los planos. En primer lugar pulsa de nuevo "tabulador" para volver al modo edición. Para evitar tener que crear los materiales desde cero, en lugar de pinchar en el botón de "new" y crear un material, pinchamos en el botón que está pegado a su izquierda y seleccionamos el material ya creado, en este caso "libro".
    Una vez seleccionado, si pinchamos sobre el botón con el símbolo "+" crearemos un duplicado del mismo, que podemos modificar independientemente. Lo primero es renombrarlo, y lo segundo es entrar en el menú de texturas y de nuevo pulsar en el botón "+" para duplicar la textura. En este caso además de renombrarla tendremos que eliminar la imagen actual y seleccionar la nueva. Recuerda activar de nuevo la opción "premultiply" al cargar la nueva imagen.
    Es muy importante que sigas estos pasos en el orden que se indica, para asegurar que creas una copia diferente de material y textura para cada plano. Si tienes un problema siempre puedes repetir el proceso para cada plano creando materiales y texturas nuevas pinchando cada vez en el botón "new".

    Repetido en todos los materiales tendremos la imagen reconstruida.
    Puede ocurrir (como ocurre en nuestro ejemplo) que el plano del suelo esté distorsionado. Para solucionarlo, entrando de nuevo en modo edición ("tabulador") y seleccionando todos los elementos (tecla "A") pulsamos "W" y seleccionamos "Subdivide". En la parte de la izquierda, dentro del menú de Subdivide, introducimos en Number of cuts un valor relativamente alto como puede ser 40. Y a continuación volvemos a fijar las coordenadas ("U, Project from view").
    Ahora el resultado es el adecuado, y no es otro que la imagen original, pero adecuada al 3D para preparar nuestro efecto final.
    Es posible que llegados a este punto os encontréis que no todos los recortes encajan. Si os ocurre escalad los planos que no encajen ligeramente y a continuación volved a definir las coordenadas UV (modo edición con el "tabulador", U, Project from view).


    El movimiento de la cámara

    La parte final será crear la animación, para lo cual utilizaremos la barra de herramientas inferior del Blender. Lo que haremos será mover la cámara por nuestro escenario tomando como referencias la posición actual de la cámara y una o más posiciones que iremos definiendo.

    El primer paso es definir la duración del vídeo. Blender lo mide en frames, tal y como se aprecia en la barra de herramientas inferior. Lo normal es que un segundo tenga 24 frames, así que para que el vídeo tenga una duración de 10 segundos marcamos el fin en el frame 240. Además en nuestro caso queremos que la imagen de la fotografía esté al final, así que nos desplazamos al frame 200 y con la cámara seleccionada pulsamos sobre la tecla "I" para insertar un keyframe (LocRot), que se encargará de llevar a la cámara a la posición adecuada en ese instante.
    Ahora es el momento de fijar otras posiciones clave de la cámara que marcarán su recorrido. Si queremos que el plano se vaya abriendo, necesitaremos una posición inicial donde la cámara esté más cerca de los novios. Para ello vamos hasta el frame correspondiente (en nuestro caso el frame 40) y una vez en él la desplazamos sobre su eje z hasta tener una vista adecuada, la rotamos sobre su eje x para que la pareja se vea entera, y de nuevo generamos un keyframe con la tecla "I".

    Una vez fijado renderizamos (para ello pulsamos “F12”, y si queremos guardara pulsamos “F3”. Para volver al 3D la tecla “Escape”) para comprobar si nos gusta el resultado. Si lo queremos modificar, no tenemos más que sobreescribir ese frame hasta que obtengamos lo que queremos. Para movernos por los frames o bien pinchamos en la barra o bien introducimos el valor correspondiente en la casilla. No olvidéis grabar el frame antes de renderizar para que se guarde la posición de la cámara.
    Si os fijáis, al tener seleccionada la cámara, en la barra inferior vemos en amarillo los keyframes ya generados. En éste nos hemos acercado lo suficiente para que el libro quede fuera de la escena.

    Para terminar el video tenemos que fijar las condiciones de renderizado. El 10% que hemos seleccionado nos vendrá muy bien para obtener una primera versión del vídeo y decidir si el movimiento de la cámara es el que nos gusta. Una vez finalizado todo, unos buenos parámetros finales serían estos.

    • Volviendo al apartado de render, modificamos el porcentaje de resolución máxima que utilizaremos. Dada la alta calidad de la imagen de partida, un 50% será más que suficiente.
    • 24 fps será también lo normal (aunque puede modificarse).
    • Después para darle calidad al video tenemos dos opciones. La primera es el Anti-aliasing, que evita la aparición de "artefactos" y defectos al renderizar. Los valores por defecto que aparecen deberían ser adecuados para la mayoría de los casos, y si bien aumenta notablemente el tiempo de procesado, esta opción es casi obligada para tener un resultado de calidad.
    • El Blur es útil en aquellos casos donde haya movimientos de objetos rápidos, de modo que para darle realismo al 3D Blender desenfoca parcialmente esos objetos para simular el efecto real . Puesto que para esto se generan una serie de sub-frames, el tiempo de procesado aumenta enormemente. En este caso no es necesario y no lo activamos.
    • Podemos seleccionar también la carpeta donde se guardará el archivo, que por defecto será la que aparece en la imagen.
    • Por último seleccionamos el formato de salida del vídeo. El formato AVI JPEG es sencillo y universal, aunque existen otros más personalizables. Ojo porque si seleccionamos un formato de imagen, la salida no será un vídeo sino una imagen para cada frame.

    Y el resultado es el que vemos a continuación. Si ya conocíais el programa, veréis que el tutorial es muy sencillo, mientras que los más novatos podéis encontrar dificultades en las herramientas que vamos utilizando en el proceso, ya que Blender requiere un tiempo inicial de rodaje dado el gran abanico de posibilidades que se obtiene.


    Como pasos adicionales, Blender cuenta con recursos para potenciar el resultado, como por ejemplo desenfoques controlados, añadir profundidad de campo a la cámara o incluso introducir partículas en el ambiente para darle un mayor parecido a una foto antigua. Pero para no complicar las cosas en esta ocasión dejaremos aquí el tutorial, y dejaremos para el siguiente post cómo añadir estos efectos.


    Enlaces interesantes

    Página principal
    http://www.blender.org/

    Proyectos realizados por la Blender Foundation
    http://www.blender.org/features-gallery/blender-open-projects/

    Portal de Andrew Price dedicado a Blender, con multitud de tutoriales, blog y otros recursos
    http://www.blenderguru.com/

    Comunidad de Blender en castellano
    http://www.g-blender.org/

    Comunidad de Blender Artists
    http://www.blenderartists.org/forum/

    2 comentarios:

    1. hola, muy bueno el tutorial, pero hay un punto que me parece complicado y me gustaría que lo pudieras detallar, en el momento de colocar la camara i la rejilla para emular la misma perspectiva de la foto, sabes si hay alguna manera menos manual y a ojo? por ejemplo alguna función con guias o que haga el cálculo con esas guias? grácias

      ResponderEliminar
      Respuestas
      1. Hola, perdona que no haya contestado antes. Hasta donde yo se no hay otra manara para hacerlo mas que a ojo, de todas formas le preguntaré a Andrés a ver si lo sabe.

        Eliminar