
Cliente: Telefónica
Agencia: Tribal DDB
Campaña para Navidad, o como nos gusta llamarlas “pesadilla antes de Navidad”. Siempre llegan con plazos cortos e inamovibles (por más que lo he intentado nunca he conseguido que retrasen la Navidad unos días). Lo bueno es que muchas agencias ponen toda la carne en el asador y se pueden llegar a hacer cosas interesantes.
En este caso Tribal huyó (gracias a Dios) del típico microsite navideño con lucecitas y deseos y ñoñadas por el estilo y se (nos) metieron en un embolao que al final es bastante cachondo.
El vídeo muestra la parte que hice yo del site, la parte de Papervision3D, el tracking de vídeo y demás. Del resto se encargó el gran Javier (Drus) Fernández Montes y el podría escribir un libro con la parte de Flash Media Server, madre mía…
Cómo se hizo
Bueno, lo primero que hice fue fijarme como lo hacen los grandes e intentar aproximarme lo máximo posible. Esta técnica se está poniendo de moda últimamente y está apareciendo en muchos sitios, pero la primera vez que la vi aplicada con verdadera maestría fue en The Eco Dance (altamente recomendable)
Lo primero que está claro al verlo es que el actor al que se le va a hacer el tracking hay que ponerle una capucha, gorro o lo que sea para que el salto de la foto del usuario en 3D al vídeo original se note lo menos posible. El vídeo está encima del 3D y toda la cara del actor (lo que está dentro de la capucha) tiene un chroma que hace que esa parte del vídeo sea transparente y se vea el 3D de debajo. En nuestro caso, por cuestiones que se escapan a mi compresión, eso no fue posible. Así que nos pasaron un vídeo en el que la cara del actor era un chroma (que no un cromo) y en el que el actor no llevaba gorro ni nada para disimular la junta (se ve en la captura siguiente).
Al entender, el cliente, que finalmente no quedaba del todo bien (podías ser rubia y con el pelo largo y nosotros integrábamos tu cara en la de ese actor con entradas, por ejemplo), y al no ser posible rehacer los vídeos poniéndole un gorro de Papá Noel al actor, se optó por hacer modelos 3D de diferentes cabezas y ponerlas encima del vídeo. Haciéndolas un poco más grandes para dar un efecto ligeramente cómico, ya que el realismo, llegados a ese punto, lo habíamos descartado.
Para el tracking en 3d estuve probando diferentes programas, finalmente opté por PFTrack que me permite importar un modelo 3D de la cara del actor y él, casi automáticamente, te hace todo el tracking del vídeo en 3D y te lo exporta en un montón de formatos.
En un programa de 3D se crea un modelo de una cara lo más estándar posible (que se ajuste fácilmente a la cara de cualquiera) y se le aplica como textura una foto, también de una cara lo más estándar posible. Esto se hace mediante un mapa UV, que para quien no lo sepa, simplemente es un mapa que dice cómo se posicionará la imagen en la geometría 3D, es decir, cómo la envolverá o lo que es lo mismo, qué posición de la geometría corresponde a cada pixel de la imagen.

Esta cara es la que va en cada una de las cabezas. Y la textura estándar de la que hablábamos se sustituirá por la foto que suba el usuario. Pero claro, no todo el mundo tiene los ojos, la nariz y la boca en el mismo sitio, así que habría que modificar ese mapa UV para cada foto que se subiera. Como esto, que yo sepa, no es posible en tiempo real con Papervision, lo que hago es deformar la foto del usuario para que se ajuste al mapa UV que se ajusta al 3D, en lugar de modificar el mapa UV.
Aquí es donde entra el post anterior. Triangulación de Delaunay y deformaciones. El usuario marca dónde tiene sus facciones y sabiendo dónde las tenía el actor en la foto original deformo la foto del usuario para que se ajuste a la original, encajando así en la geometría 3D.
Finalmente queda un detalle que The Eco Dance no tenía: Nuestro querido cabezón tiene que poder cantar. Tiene que coger el sonido del micrófono o del audio pregrabado y mover la boca de acuerdo al volumen.
Esto es un problema ya que no he encontrado la forma de disparar dos animaciones diferentes en un dae (que es el archivo de 3D animado que importo con Papervision en Flash). Es decir, en un solo archivo solo puedo tener una animación (puedo tener varias, pero no simultáneas y ejecutadas arbitrariamente). Y ya tengo una animación, que es la cabeza moviéndose y rotando en el espacio 3D tal y como hace el actor en el vídeo.
La solución pasa por trackear la cara del actor a un objeto simple, un cubo por ejemplo, y luego hacer que el objeto de la cabeza, con la animación de la boca, le siga en el espacio 3D. Esto no se puede hacer reparentando la cabeza al cubo por programación, ya que debido al cambio de sistema de referencia la cabeza giraría en sentido opuesto.
Lo que se hace es lo siguiente
var ref_tracker:DisplayObject3D = tracker_dae.getChildByName("COLLADA_Scene").getChildByName("cube"); var ref_cabeza:DisplayObject3D = cabeza_dae.getChildByName("COLLADA_Scene").getChildByName("cabeza"); override protected function onRenderTick(e:Event):void { super.onRenderTick(e); [...] ref_cabeza.transform = ref_tracker.transform; }
Así en cada iteración estamos copiando las transformaciones del cubo en la cabeza respetando el sistema de referencia de cada uno. Hay que tener en cuenta que en realidad el objeto tracker_dae no se está moviendo, si no que él mismo contiene un objeto que se mueve. Lo mismo tiene que ser con la cabeza.
El cubo se mueve en el espacio 3D y la cabeza abre y cierra la boca. Esta animación está hecha mediante huesos, ya que se puede exportar fácilmente a un dae .
Y bueno… básicamente, eso es todo



7 Responses to “Navidad con Telefónica y Raphael”
Plas plas plas plas
Un post de nota y un trabajo sobresaliente
Y lo mejor de todo es que vivimos para contarlo!
El trabajo es excelente.
Así se aprende, saliendo de estos “embolaos”.
Muchas gracias
Después de casi un año y de rebotar hasta aquí he podido ver la verdadera tripa de lo que tanto os hizo sufrir, gracias por vuestra ayuda, el trabajo fue de 10!!!
Gracias Carlos. En realidad esto fue la parte “sencilla”. Lo de Javi de FMS sí que fue un infierno.