Historia de un Port VR

La portabilidad en la Realidad Virtual

Hace poco tiempo empezamos un nuevo proyecto aquí en Pyrolite Games. Este proyecto fue bien recibido , ya que coincidía justo con el final de desarrollo de nuestro juego Fantasy Pets, juego de Realidad Virtual para Samsung Gear que se puede encontrar en la tienda de Oculus.

El proyecto trataba en realizar el port de un juego de Realidad Virtual disponible en  VIVE y Oculus Rift, Unforgiven VR, desarrollado por el equipo de Delirium Studios. Un juego en que tenemos duelos multijugador en el salvaje oeste. Nos pareció divertido y muy interesante dado que Samsung GearVR había sacado recientemente el nuevo controlador (mando)  que permitía hacer la adaptación de este juego a la plataforma móvil..

1_Unforgiven.jpg

Sin embargo, como ocurre en toda portabilidad, existen algunas complicaciones, dado que el control del juego y el rendimiento de las plataformas para PC es diferente a las Samsung GearVR. Destacamos los principales problemas comparando la plataforma VIVE con las GearVR:

  • Primero, VIVE es capaz de reconocer el movimiento del jugador, por lo que puedes caminar e incluso agacharte o sentarte en el suelo, sin embargo en Samsung Gear no existe desplazamiento físico como tal, tan sólo la rotación de 360º.2_VIVETracking.jpg
  • Segundo, VIVE dispone de dos mandos, con un seguimiento de la posición en el espacio, mientras que Samsung Gear sólo tiene un mando que no detecta la posición, solo la rotación al igual que el headset.3_ControllersVS.png
  • Tercero, el rendimiento en VIVE es muy diferente a Samsung GearVR, dado que el primero usa un ordenador, y no de baja gama precisamente, mientras que el segundo usa un móvil, que aunque suelen ser de gama alta, no se puede comparar con la potencia y capacidad de un ordenador.4_SmartphoneVSPC.png

Es entonces cuando en Pyrolite nos pusimos a estudiar la propuesta, nunca habíamos realizado un port de un juego, ni colaborado con otro equipo durante un desarrollo.

Por suerte ya teníamos unos cuantos juegos a nuestras espaldas, así como un juego publicado en la store de Oculus, y en todos siempre había mucho que optimizar para que cumplieran con los requisitos de la tienda de Oculus, por lo que se podría decir que somos duchos en la optimización de juegos de Realidad Virtual.

Por ello nos animamos a aceptar el desafío. El proyecto estaba lleno de retos, tanto a nivel artístico como a nivel de programación, pero eso no hizo más que motivarnos para lograr el acabado más parecido, utilizando menos recursos.

5_Delirium_logo.png

Realizar un “port” aunque pueda parecer sencillo, en VR no es moco de pavo. Hay muchas decisiones que tomar y situaciones a tener en cuenta. Por ello decidimos que lo mejor sería visitar a nuestros aliados en persona para plasmar con todo detalle cuál sería la jugada.

Lo primero fue organizarse y planear todo el trabajo que había que hacer, se escribieron varios documentos de análisis y diseño para tener a la vista la envergadura el proyecto, el cual estimamos que tendría una duracción aproximada de 2 meses.

Vamos a contar sobretodo como fue el trabajo desde la perspectiva del departamento de arte y el de programación.

Nuestra primera misión era reproducir un escenario que servía como introducción al juego, esto iba a servir como prueba/garantía de que somos capaces de realizar el trabajo, con la calidad adecuada y a tiempo, sin retrasos.

Había bastante que optimizar, dado que al ser un juego que funciona con el motor de un ordenador se puede tener una cantidad de triángulos bastante elevada comparado con las limitaciones del móvil, aunque no sólo limita exageradamente la cantidad de triángulos, también te obliga a retocar el tamaño de las texturas, hacer atlas de las mismas y “bakear” luces, dado que las luces en el juego original están en tiempo real y esto le supone demasiado esfuerzo a un móvil si quieres mantener los FPS.

Por parte del departamento de programación su principal objetivo era replicar el funcionamiento del juego, pero adaptando las mecánicas de input a la nueva plataforma. Por ejemplo, mecánicas como coger el arma y disparar.

6_GoodJob.jpg

Logramos terminar todo a tiempo, y con buenos acabados, lo que demostró que éramos capaces de sacar el proyecto adelante, así que eso hicimos :-).

En el departamento de arte nos pusimos a trabajar en el resto de los escenarios y los personajes . El proceso fue parecido a cuando construimos el escenario de introducción, salvo por algunos problemas:

  • El fondo tenía una gran carga de polígonos, al haber unas montañas de fondo, así que se sacó un nuevo cubemap, para hacer un skybox del cielo, las montañas y demás objetos que estuvieran a un distancia considerable.7_OVR_Screeshot_Wizard.png

La forma de hacerlo fue rápida ya que en Unity el plugin de Oculus te deja usar el OVR Screenshot Wizard, que te permite crear un cubemap de la escena en la que estés.

Para los no entendidos, un cubemap es un archivo que contiene una colección de 6 texturas, y cada una representa la vista a través de una de las direcciones del eje de coordenadas (+X, -X, +Y, -Y, +Z y -Z).

Sin embargo esto generó un cubemap muy pesado, y para mantener la aplicación con menos peso se recurrió a un plugin basado en esta web para sacar las imágenes del cubemap, esto nos da 6 imágenes que se usarían luego para hacer un skybox (mobile).

  • Los modelos tenían una gran carga de polígonos, en especial los personajes, por lo que se redujeron, eliminando edge loops sobre todo. Mientras que la mayoría de los objetos del entorno eran más ligeros de polígonos, el único problema era que estaban divididos, esto permite que se pueda trabajar de manera procedural, y poder construir cualquier objeto a partir de las mismas piezas, pero en móvil son objetos que muchas veces no se ven, y a la hora de optimizar es mejor tener sólo un objeto que decenas, así que se decidió hacer un merge de los objetos y tener objetos únicos.8_Character_Retopology.png

Aquí se puede ver un personaje antes y después de la retopo, se ve como la cantidad de triángulos baja considerablemente y como no se pierde tanta calidad.

  • Al observar el suelo, nos dimos cuenta que se usaba un terrain en el que se aplicaban varias texturas, se probó a meter un terrain con menos peso y pintar las texturas, pero los FPS bajaban. Así que se hizo un nuevo suelo con menos polígonos en un programa 3D, donde se aplicó un modificador Vertex Paint, para poder usar diferentes texturas según el color que se le diese a los vértices, usamos 3 colores (rojo, azul y verde) y cada textura se asigna a un color.

9_VertexPaintGorund.png

  • Las UVs no tuvimos que rehacerlas, pero si se retocaron mínimamente ya que al eliminar aristas o vértices había pequeñas deformaciones. Después, se aplicó un método para que las UVs de los objetos, que iban a tener la misma textura (un atlas), estuvieran todos bien “empacados”.

10_UVs.png

Con el UVW Xform se pueden retocar las UVs de los objetos en tamaño, para luego con el Unwrap UVW moverlos de manera exacta.

Además se creaba un segundo canal de UVs, ya que había que tener en cuenta que los objetos que iban a ser estáticos en la escena serían “bakeados”.

  • Además, al disminuir la cantidad de polígonos en los personajes, se tuvo que rehacer el skin/pesado, el cual consiste en aplicar un peso a los vértices del personaje según el hueso que nos interese, sin tocar el rig del personaje, ya que reutilizamos las animaciones. La tarea fue más o menos rápida, el Cowboy no tenía mucha complejidad y al reducir la cantidad de polígonos se hacía más fluido, sin embargo otros personajes aun reduciendo los polígonos tienen partes algo tediosas de skinear/pesar, por ejemplo la barba del Vagabundo.
  • El único problema que tuvimos a la hora de exportar el personaje y que no hiciera todas las animaciones bien fue Marvin, el personaje del tutorial, daba errores con la configuración del Avatar, y esto provocaba que a la hora de hacer algunas animaciones las hacia mal.

11_Marvin_Avatar.png

 

Así que nos pusimos manos a la obra y encontramos el error principal, que resultaba ser que había que desasignar el hueso de mandíbula en el avatar del personaje y asignarlo luego por un Avatar Mask que iba en el animator del personaje.

El avatar es un archivo que configura el mapeo entre el esqueleto que tiene el Mecanim de Unity con el esqueleto importado

  • En Unity, ya sólo nos quedaba importar los objetos/personajes que iban a construir la escena, las texturas y animaciones, y después crear materiales y asignarlo a los modelos, así como crear los dos tipos de animator que tienen los personajes (Avatar y Bot).

12_ImproveFPS.png

Además se tenía que recrear unos posters de duelo donde venía la información del jugador (con objetos TextMesh) y de su oponente, y esto daba problemas de rendimiento. Después de probar varias opciones y buscar información, se encontró una solución, que aunque hace que la CPU del móvil trabaje más, permite que no haya una caída de FPS.

Se marca esta casilla, que está en Player Settings/Other Settings/Rendering

  • Por último ya sólo quedaba hacer los lightmaps y configurarlo todo para que ocupase lo menos posible. En este caso, no hubo ningún problema grave, pero al “bakear” las luces se encontró que las sombras no quedaban del todo bien en el suelo. Esto era porque el suelo era un plano grande, y las UVs no podían guardar la información de las sombras tan bien como en otros objetos, por lo que se decidió cortar el suelo por donde estaría el jugador para que se viese mejor las sombras en esa zona. Otra opción también podría haber sido aumentar el tamaño de Lightmap, pero ya estábamos al máximo que permite en móvil.

Y esos puntos clave son los que tuvimos que repetir en todas las escenas y personajes, y hasta aquí llega la historia de nuestro primer port de un videojuego VR, aún nos quedan unos detallitos, sobre todo para que el juego vaya a 60 FPS en todas las escenas y alguna cosilla de programación, pero estamos bastante contentos del resultado.

Si queréis ser testigos podréis probar el juego en el Barcelona Games World 2017 del 5 al 8 de Octubre.

Pronto comenzaremos con nuestro próximo proyecto de VR, ¡¡la maquinaría nunca para en Pyrolite Games!!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Crea un sitio web o blog en WordPress.com

Subir ↑

A %d blogueros les gusta esto: