Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. Intel RealSense

Mete Tu Cabeza en el Juego con Intel RealSense

This post is part of a series called Intel RealSense for Game Developers.
How to Make a 3D Model of Your Head Using Blender and a RealSense Camera
Sponsored Content

This sponsored post features a product relevant to our readers while meeting our editorial guidelines for being objective and educational.

Spanish (Español) translation by Diana Alejandra Rojas Kaiser (you can also view the original English article)

Desde 1999 he trabajado a través de mi empresa, The Game Creators, en facilitar a todo el mundo el hacer videojuegos.  El año pasado comencé a desarrollar con la cámara y el kit de desarrollo de software (SDK) Intel RealSense, los cuales te permiten capturar imágenes 3D en tiempo real. (¡De hecho gané el Reto de la aplicación de RealSense con mi Realizador de Video Virtual 3D!) Por esto era de esperarse que haya estado investigando como se puede utilizar RealSense para el desarrollo de videojuegos. En este tutorial compartiré un ejemplo: cómo hacer un escaneo facial tuyo (o de tu jugador) en tu videojuego.

¿Por qué utilizar RealSense?

Muchos personajes de videojuegos en 3D, incluyen una imagen texturizada en 2D que es utilizada como "piel" para un modelo en 3D, como podemos observar a continuación con Kila

Izquierda: Textural de Kila. Derecha: La textura 2D aplicada al modelo 3D. De la Serie Creación de Personajes del Juego: Kila 

Se puede observar distintivamente una cara en la textura. Si quieres cambiar la cara del personaje para que coincida con la tuya, puede ser tentador intentar pegar una foto plana en 2D a la textura. Sin embargo, esto no suele dar buenos resultados, tal como se muestra abajo.

Result of pasting a flat 2D photo onto an existing textureResult of pasting a flat 2D photo onto an existing textureResult of pasting a flat 2D photo onto an existing texture
El resultado de pegar una foto plana de una cara a la textura del modelo 3D existente.

Es bastante aterrador. El problema es que la textura facial no se mapea sobre la "estructura ósea" debajo del modelo.

Dentro de los dispositivos de RealSense, se encuentra un proyector infra rojo y una cámara con la que se puede capturar un mapa de proyección 3D, así como una foto 2D de lo que sea que esté apuntando. Esto significa que puedes ajustar la textura 2D y el modelo 3D de un personaje para ajustarlo a la nueva cara.

Flujo de Trabajo del Creador de Personajes del Videojuego

Supongamos que queremos permitir que nuestros jugadores se tomen algunas selfies con una cámara RealSense y luego utilizarlas para crear un avatar 3D para ellos.

En vez de intentar escanear todo su cuerpo, y luego crear un modelo 3D, una textura y un conjunto de animaciones a partir de estos, es mejor que compremos un modelo 3D de cuerpo completo de un sitio como 3DOcean...

3DOcean full human body models3DOcean full human body models3DOcean full human body models

... y después cortar la cabeza:

Esto hace mucho más sencillo el desarrollar y probar el videojuego. Lo único que varía entre los avatares de los jugadores es la cabeza.

Capturar la Similitud del Jugador

Para capturar la similitud del jugador, el creador de personajes del videojuego debe hacer diversos escaneos de su cabeza, todos controlados de manera precisa ya que el software debe unirlos de nuevo. (El Kit de Desarrollo de Software Intel RealSense ofrece una muestra que hace justo esto; puede correr inmediatamente desde los archivos binarios pre compilados.) 

Naturalmente tu querrás crear tu propio escaneo 3D que se adapte a tu proyecto, así que lo que sigue es un desglose de como esta técnica te puede funcionar.

Método 1

Puedes hacer tomas separadas del modelo poligonal (mesh) e intentar conectarlas de forma manual en una herramienta de arte improvisada o un programa pequeño. Sin embargo, el problema con el escaneo 3D en vivo, es que hay un humano al otro lado, lo que significa que se ponen nerviosos, se mueven en su asientos, se echan para atrás y mueven hacia adelante de manera sutil. Esto sin contar el sutil cabeceo, guiño o movimiento de la cabeza en sí.  Debido a la tendencia que tiene la cabeza de cambiar de posición y distancia con respecto a la cámara durante las sesiones de escaneo, esto sólo derivará en frustración cuando trates de reensamblar las tomas. 

Método 2

Si tus escaneos son precisos, puedes combinar tus modelos poligonales con el primer modelo poligonal que escaneaste y realizar ajustes si existe un vértice  La desventaja que tiene esta técnica son los retos que presenta el mantener la cabeza de tu jugador en una posición central durante el escaneo y convertir esa información 3D en coordenadas cartesianas. 

Método 3

La técnica perfecta es detectar marcadores característicos dentro del modelo poligonal escaneado, a fin de obtener una "corrección de vértices". Piensa en esto como mapear tu posición en el océano mirando a las estrellas; usando las constelaciones puedes descifrar tanto tu orientación relativa como tu posición.  Esto es especialmente útil cuando produces un segundo modelo poligonal: puedes aplicar el mismo algoritmo para detectar los marcadores, encontrar el mismo patrón y regresar a la orientación relativa, posición y cambio de escala del primer modelo poligonal. Una vez que tienes esta compensación (offset), agregar un segundo modelo poligonal al primero es un simple cálculo para ajustar al espacio (world transform) y agregar la información de los vértices extras al modelo poligonal original. Este proceso se repite hasta que no haya más modelos poligonales que desees presentar y procedes al último paso.

Puntos Clave

  • No recomendaría implementar estas técnicas hasta que entiendas de forma práctica la codificación geométrica 3D, ya que manipular información de vértices orientada a variables puede ser complicado. 
  • Si la técnica que escogiste involucra muchas capas de información de vértices sobre un mismo objeto, muy posiblemente tengas un exceso y sobreposición de vértices. Estos deben ser removidos y debes producir una nueva lista triangular para sellar el objeto. 
  • Guardar la información de color del escaneo facial en el componente difuso de los datos del vértices es útil a fin de evitar el uso de textura, y tiene otras ventajas al momento de optimizar el modelo poligonal final.
  • No olvides procesar los datos brutos de profundidad a fin de remover interferencias tales como valores de profundidad perdidos que no son consistentes con la información de los pixeles de profundidad del ambiente. Si no haces esto, todo tu trabajo para crear una buen modelo poligonal 3D facial será en vano. 

Definitivamente esta es la Parte más difícil, pero no imposible. Recuerda que hay un demo funcional en los archivos del kit de desarrollo de software que puedes utilizar como base para correr esto en el motor de tu videojuego

Utilizar la Similitud en el Videojuego

Supongamos que tienes un buen modelo 3D (y la textura correspondiente) facial del jugador:

A single 3D scan of the front of someones head taken with RealSenseA single 3D scan of the front of someones head taken with RealSenseA single 3D scan of the front of someones head taken with RealSense
Una foto policial futurística.

Ahora podemos pegarla al modelo del cuerpo del personaje. 

A face without a headA face without a headA face without a head

Ciertamente el resultado todavía es bastante feo, pero todavía no hemos acabado. Podemos tomar una solución de las muchas páginas de la biblia para desarrolladores de videojuegos; una que pueda pasar más por una buena función, que por un siniestro atajo. 

Todo lo que hacemos es cubrir los huecos con una peluca y un sombrero:

Gap in head covered up by wig and hatGap in head covered up by wig and hatGap in head covered up by wig and hat

Ok, lo acepto, podríamos simplemente pegar una cara 3D en el frente de una cabeza 3D que ya esté modelada, pero esto es mucho más divertido. Si el Equipo Fortress 2 es de fiar, los jugadores disfrutan tener la opción de personalizar las cabezas de sus avatares con diversos accesorios; ¡estamos matando dos pájaros de un tiro! 

Si realmente quieres evitar agregar sombreros y pelucas a los personajes del videojuego, deberás hacer que el jugador se sujete el cabello o le ponga gel y lo peine para atrás antes de hacer los escaneos.  Entre más plano esté el cabello, será mejor para escanear, El cabello suelto interfiere con la profundidad de la cámara y produce reflejos dispersos que no se escanean bien. 

Es más Fácil Hacer Esto en Dev Time

Si bien obtener el parecido del jugador al momento de ejecutar el juego es posible, es un lugar difícil por el cual empezar. Si no lo has hecho antes, te recomiendo que primero intentes algo técnicamente más simple: meter tu propia similitud (o la del actor) en el videojuego. 

Esto es más sencillo por tres razones:

  1. Hay mucho más margen de error y espacio para corregir. Si tu controlas todo el proceso, puedes ajustar manualmente cualquier color o modelo poligonal que no salga bien, y retocar el resultado final hasta que esté bien. No dependes de que tu código funcione perfectamente a la primera en cada cara. 
  2. Puedes usar software existente (como Blender), en vez de tener que incorporar todo el proceso a la interface de usuario (UI) y código de tu videojuego. 
  3. Ya que es tu juego, lo más seguro es que tengas más paciencia que tus jugadores, por lo que podrás tomar (y retomar) más fotos y esperar más tiempo a los resultados que lo que razonablemente le puedes pedir a un jugador.

Y con base en este último punto, puedes tomarte el tiempo para escanear tu cabeza completa, no sólo tu cara.  De hecho, ya hemos hecho esto en tutoriales anteriores. Retomemos desde donde lo dejamos y repacemos como llevar este modelo a Unity 5

Meter Tu Cabeza en Unity

Después de seguir el tutorial anterior, debes tener un modelo facial FBX junto con el mapa de la textura UV correspondiente.

Abre la Unidad, y crea un nuevo proyecto y escena.

A new Unity project and sceneA new Unity project and sceneA new Unity project and scene

Haz click en Valores (Assets) > Importar nuevo valor. Selecciona el modelo FBX que exportaste de Blender, 

Cuando Unity importa el objeto, es posible (incluso probable) que no importe su textura, en cuyo caso verás una versión gris/blanca de tu modelo poligonal:

Untextured mesh in UnityUntextured mesh in UnityUntextured mesh in Unity

Está bien, a continuación añadiremos el mapa de textura. 

Selecciona el folder de Materiales, después haz click derecho y selecciona Importar Valor. Selecciona el archivo PNG que guardaste en Blender e impórtalo. 

Ahora verás un mapa de textura junto con un material gris/blanquecino con el mismo nombre que tu modelo poligonal. Haz click derecho en el material gris/blanquecino (en forma de pelota) y bórralo.

Two materials in UnityTwo materials in UnityTwo materials in Unity

Regresa a tu carpeta de Valores y haz click derecho en el modelo poligonal que importaste. Selecciona Reimportar

Reimporting a mesh with a different material in UnityReimporting a mesh with a different material in UnityReimporting a mesh with a different material in Unity

Después de que se reimporte, creará el material propiamente y le dará textura a tu modelo poligonal. 

3D scanned head in Unity3D scanned head in Unity3D scanned head in Unity

Si el modelo se ve rosa en la vista previa del objeto, simplemente selecciona otro objeto (como la cámara) y selecciona de nuevo tu modelo poligonal para que se actualice. 

3D scanned and textured head model in Unity3D scanned and textured head model in Unity3D scanned and textured head model in Unity

Ahora estás listo para meter tu cabeza en el videojuego. Arrastra tu objeto a la escena. (Puedes hacerlo más grade y jugar con la perspectiva de la cámara para que se vea). 

Cuando presiones Correr, deberás ver tu objeto correr de forma adecuada:

Si quieres ajustar la textura para hacerla más o menos brillante o metálica, primero ve a la carpeta de Materiales y selecciona la versión redonda de tu textura, En el panel de Inspector, puedes ajustar las diapositivas de Metálico y Suavidad para obtener la apariencia adecuada. 

Unity Inspector panel - material propertiesUnity Inspector panel - material propertiesUnity Inspector panel - material properties

Conclusión

Puede parecer una cantidad desmesurada de trabajo sólo para tener las partes frontales de una cabeza en una escena virtual, pero las técnicas que has aprendido en este artículo pueden ser aplicadas al momento de escanear y pegar cualquier cosa que quieras. 

Tu habilidad de escanear tu esencia dentro de la computadora y continuar tu viaje en un paisaje virtual comienza aquí, con el escaneo de una sola cara. ¿Cómo cambiarán los videojuegos y las actitudes conforme sus protagonistas comiencen a parecerse más a gente real que puedas conocer en tu vida? Cuando le pones una cara a alguien, se vuelven reales y será interesante ver como los videojuegos y los jugadores cambian a raíz de esto. 

El programa Intel® Software Innovator apoya a desarrolladores independientes innovadores que muestran habilidades para crear y presentan proyectos de vanguardia. Los innovadores aprovechan a los oradores y los demos en los eventos de la industrial y las reuniones de desarrolladores.

Intel® Developer Zone ofrece herramientas e información práctica para el desarrollo de aplicaciones multiplataforma, información de la plataforma y tecnología, códigos muestra y conocimientos de colegas que ayudan a los desarrolladores a innovar y tener éxito. Únete a nuestras comunidades Internet of Things, Android*Intel® RealSense™ Technology, Modern CodeGame Dev y Windows* para bajar herramientas, acceso a kits de desarrollo, compartir ideas como desarrolladores que piensan como tu y participara en hackatones, concursos, espectáculos itinerantes y eventos locales 

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.