Saltar al contenido principal

Xuan Yuan Sword VII

Porting a la Switch de un videojuego RPG

Uno de los proyectos que en los que participé durante mi estancia en Catness Game Studios fue el porting a Nintendo Switch del videojuego Xuan Yuan Sword VII. El proyecto ya estaba empezado cuando entré, y mis principales tareas en el mismo consistían en adaptar el juego visualmente para la consola sin comprometer en la medida de lo posible el rendimiento.

El proyecto presentaba cierta dificultad por la escala del mismo, al ser un videojuego de mundo abierto con gráficos complejos, con zonas con bastante densidad de elementos, tanto visuales como lógicos. Además, operábamos con un equipo limitado de dos personas y el hardware objetivo de la primera Nintendo Switch presentaba restricciones significativas en potencia de GPU y presupuesto de CPU. Estas limitaciones obligaron a tomar decisiones muy cuidadosas en cuanto a calidad visual y complejidad de las escenas para alcanzar un rendimiento estable.

Escena introductoria del juego en su versión de Nintendo Switch.

Para poder llevar a cabo el porting de una manera que mantuviese un framerate aceptable (entre 24 y 30FPS) tuvimos que llevar a cabo cientos de ajustes. Además, no disponíamos de acceso a muchos de los assets originales fuera del motor, por lo que nuestra capacidad de modificación de ciertas cosas, como las telas, era francamente limitada.

Resolución dinámica

Para poder realizar el porting, debido a lo complejo del proyecto, se aplicó un reescalado de resolución dinámica que permitía amortiguar el impacto de la enorme variabilidad de complejidad en las escenas en el framerate. De esta manera podríamos tener resoluciones nativas en momentos de menos carga de GPU y reducir la resolución cuando fuese necesario.

Render final

Funcionamiento básico de la resolución dinámica.

Poligonaje

El juego tenía zonas con una enorme cantidad de polígonos. Esto no sería un gran problema en plataformas más potentes y con un hardware más moderno, pero en un hardware tan primitivo como era la Switch suponía un grave problema. Había zonas con varios millones de polígonos, lo que sumado a un sistema de luz direccional dinámico hacía que la escena tardase en renderizar entre 60 y 80 milisegundos (12-16FPS). Por eso, tuvimos que ajustar los LODs de toda la geometría del juego. Además, convenía también reducir la distancia a la cual se aplicaban las sombras, especialmente en zonas de alta vegetación, lo que nos obligó a estudiar manualmente cuál era la distancia de sombreado apropiada en la mayor parte del mapa que mantuviese un balance entre calidad visual y rendimiento.

Render final

Zona con alta cantidad de vegetación.

Combate

Uno de los principales desafíos que tenía el port del juego era el combate. Este usaba componentes y funcionalidades altamente complejas, que suponían un tremendo estrés para la CPU de la consola cuando te enfrentabas a muchos enemigos a la vez. Para automatizar este trabajo, diseñé y programé un sistema que permitía reducir el coste de actualización de los personajes en pantalla. Este sistema además podía ser usado en otros proyectos con un tiempo de implementación de unos pocos minutos. Detallo este sistema en Significance Manager.

Render final

Escena del combate con uno de los primeros bosses del juego.

Gameplay del juego corriendo en una Switch a 1080p.