En el post de hoy, nuestro desarrollador #FuturoDave nos contará uno de sus proyectos de innovación tecnológica, que realmente le hizo crecer tanto personalmente como profesionalmente en Schrödinger.
Futuro Dave
Este es un trabajo del que la verdad me siento orgulloso. Cuando me encargaron un aspecto tan intrincado del proyecto me emocione porque agradecí la confianza que estaban depositando en mi y el reto que esto suponía. Lo acepte y me puse manos a la obra.
El plan era el siguiente: Aprender a usar el Sdk de Google Maps para Unity, entender como funciona para poder modificarlo y realizar los cambios para usar maps integrado en una app, como si fuera la app externa de Google que todos conocemos y usamos. Luego venia la segunda parte que incluía a Vuforia. Tenia que conseguir conectar de alguna forma la realidad, con ese Google maps modificado, y así mostrar una ruta AR en tiempo real que se sincronizase con tu posición y te permitiera usar Vuforia como si fuera Google Street View con un camino a seguir.
Aprendí a usar el Sdk de Google y Vuforia y a plantear la escena en Unity. Seguidamente, volví funcional en PC un google maps en la que tenía una ficha representando al usuario que se colocaría en función de su GPS gracias al Sdk de Google, con unos marcadores que señalaban objetivos que se generaban mediante un JSON y más adelante mediante datos extraídos de un servidor. Use el pathfinding, para generar una ruta hacia el marcador elegido por el jugador y modifique el código, para que esa ruta se actualizara en base a la posición del usuario y su objetivo.
Teniendo esa base, trabajé en el apartado visual, porque el mundo generado en 3D por el Sdk distaba muchísimo de asemejarse al oficial de Google y mediante posicionamiento de cámara y shaders, conseguí volver ese mapa 3D en uno que pareciera 2D y sus colores fueran los apropiados. Tras esto, decidí trasladar las mecánicas de PC a móvil, dado que el testeo sin localización GPS se volvió imposible. Aquí procedí a mezclar Google con Vuforia. Cree una cámara AR y unos targets para escanear en la zona de los marcadores. Dichos targets mostrarían un video que, mediante un shader que manipula el alpha de los videos webm, permite crear transparencias en Android sin gastar muchos recursos dando como resultado, un video de un personaje saliendo del target hacia el espectador explicándonos el juego.
Investigué sobre las cámaras en Unity e hice que el usuario pudiera elegir qué cámara observar y en caso de ser la de AR, que tuviera como guía la cámara del mapa en una esquina como un mini mapa. Después programé el comportamiento de los objetivos para que reaccionaran al jugador por cercanía activando su cámara. Con esto, la escena estaba terminada y funcional a excepción de la ruta en AR. Para ello, coloqué la cámara de AR en la posición del personaje en Google Maps haciendo culling a todas las capas que no fueran la suya propia y la del camino, y así solo renderizaría la realidad y el camino. Con ello, ya tenia sincronizados ambas cosas solapando la realidad con el camino. Por último, sincronicé ambos usando el giroscopio del móvil para que tuviera en cuenta la orientación e inclinación del móvil haciendo que siempre estén sincronizados.
Una vez acabé con la escena, me encontré con un error que me dificultaría bastante el camino en AR. Las cámaras AR de Vuforia no toleran movimientos. Si lo haces, se rompen y dejan de renderizar lo que ve la cámara del móvil, así que no podía ni usar el giroscopio ni ponerla en el personaje. Finalmente, llegué a la conclusión de que necesitaba otra cámara. Coloqué una tercera cámara y con lo que aprendí estudiando sobre ellas, sabia que se podían solapar. La tercera cámara, la cámara del camino, renderizaría el camino solapándose con la cámara AR, que permanecería estática en la escena y ahora además si podían ser sincronizadas.
Con esto pude dar por concluida la tarea y añadirlo al proyecto. Acabé satisfecho y con mucho más conocimiento que cuando empecé. En Schrödinger trabajamos fuera de nuestro ecosistema y gracias a la oportunidad que se me dio, pude innovar dentro de mi área profesionalmente.