Por Corneliu Vasiliu, Maksym Rodionov, y Olexander Puchka, Ubisoft
Assassin’s Creed* Rogue es el juego que Ubisoft acaba de lanzar al mercado. Lo crearon originalmente para consolas y fue portado a PC en marzo de 2015. La historia del juego gira en torno a de una “pieza faltante” entre varias Órdenes de Asesinos y tiene lugar a mediados del siglo XVIII. Al igual que Black Flag, contiene mucha exploración naval y terrestre. El protagonista es Shay Patrick Cormac, que da la espalda a la Orden de los Asesinos para seguir su propio camino.
Desde el comienzo, el equipo de desarrolladores decidió que el juego fuera compatible con una amplia variedad de plataformas de hardware, para que los fans del juego pudieran disfrutar de otra increíble aventura en el universo que tanto aprecian. Lograr que este nuevo juego tan visual pudiera utilizarse en todas las plataformas presentó nuevas dificultades al equipo encargado de la representación gráfica.
Uno de los objetivos principales fue lograr 30 fps firmes a 720p en PC equipadas con Intel® HD Graphics 4000. Los procesadores gráficos de tercera generación de Intel® se encuentran entre los más usados de la actualidad. Poder ejecutar los juegos más nuevos y exigentes en estas máquinas finas y livianas es magnífico, pero para ello es necesario hacer concesiones y optimizaciones considerables, de manera que los jugadores puedan tener 30 fps firmes.
“Los jugadores de Assassin’s Creed usan una gran variedad de hardware adaptado a sus necesidades: algunos tienen equipos enormes de escritorio, mientras que otros tienen máquinas portátiles ligeras.
No vamos a decidir nosotros el tipo de manejo de energía de los usuarios en sus equipos portátiles o Ultrabooks, por eso no ofreceremos compatibilidad oficial con estos equipos. Fue una decisión que debimos tomar para garantizar que los usuarios no tuvieran sorpresas desagradables.
Lo que sí queríamos era darles la posibilidad de disfrutar del juego”, explicó Corneliu Vasiliu, el productor de Assassin’s Creed Rogue para PC.
Un comienzo complejo
En primer lugar, las pruebas mostraron que la velocidad de fotogramas era de entre 8 y 12, y el equipo empezó a buscar dónde hacer optimizaciones. Después de los experimentos iniciales y de trabajar en colaboración con ingenieros de Intel, resultó claro que no alcanzaría con optimizar: habría que eliminar por completo algunos pipelines de representación gráfica y algunos efectos posteriores. Para decidir qué eliminar, consideramos el costo y la influencia visual respecto de las expectativas de los propietarios de hardware.
Utilizamos Intel® Graphics Frame Analyzer, que forma parte del kit de herramientas Intel® GPA, y detectamos los efectos y las características que más afectaban el rendimiento.
Las características que habilitamos son el tamaño de las texturas (incluso la reducción de las texturas por un factor de 4 casi no mejoró el rendimiento) y el filtrado anisotrópico.
Características y efectos que más afectan el rendimiento:
- Cantidad de llamadas a dibujo (hasta 3000 llamadas por fotograma)
- Mallas de subpíxeles (20.000 polígonos produjeron 10 píxeles)
- Complejidad de los sombreadores de píxeles (la operación de relleno de pantalla completa simple puede tardar hasta 500 microsegundos)
Figura 1.Assassin's Creed* Rogue configurado con la máxima calidad
Figura 2.El color y los detalles se reducen con la configuración media
Figura 3.En la calidad baja, se nota que hay menos color, profundidad y detalles
Simplificación de sombras
La primera etapa de pipelines de representación gráfica fue la generación de sombras en cascada. Debido a las restricciones que impone el motor del juego, no pudimos reducir la cantidad de cascadas, por eso nos quedó solo una opción: dar a los usuarios la posibilidad de desactivar las sombras por completo. Aunque en las pruebas descubrimos que esta solución traía algunos problemas: el nivel de diseño cambiaba sustancialmente con esta opción de optimización.
Figura 4. Falta de detalle con las sombras desactivadas
Figura 5. Diseño original con las sombras activadas
Al tener en cuenta los cambios en el nivel de detalle, tuvimos que forzar la aparición de sombras en niveles que traían problemas incluso con la calidad más baja. Utilizamos la técnica de mapas de sombra única en cascada con un filtro de tolerancia de rendimiento para habilitarlos.
Figura 6. Al usar mapas de sombra simple, comienzan a aparecer los detalles con la calidad de gráficos más baja
Detalles de la malla del océano
La segunda optimización más importante fue ajustar el nivel de detalle de la malla del océano.
La única cuestión delicada en esta parte fue mantener la proporción de los triángulos para evitar que se observaran temblores en la lejanía.
Figura 7. El océano visto como malla de alta calidad
Figura 8. El océano visto como malla de calidad media
Figura 9.Vista del océano como malla de baja calidad
Optimización de mallas complejas
La tercera optimización fue simplificar los cálculos de vértices para las grandes mallas “falsas” (objetos distantes agrupados en una malla). En el juego no se usaron mapas normales, sino cálculos complejos de inversión de matriz espacial tangencial. Por ello, creamos nuevas permutaciones de sombreadores que dejaban de lado los mapas normales y simplificaban los cálculos de objetos distantes.
Partículas
Para las configuraciones más bajas, redujimos la cantidad de partículas sin que se perdiera la uniformidad de aspecto del juego ni la sensación general de las escenas.
Si reducíamos demasiado, íbamos a arruinar el diseño del nivel o del efecto, y si nos quedábamos cortos con la reducción, no íbamos a lograr mejoras de rendimiento.
Optimizaciones comunes
Algunas técnicas y efectos de representación se simplificaron en las configuraciones de menor exigencia gráfica:
- Los cálculos para la iluminación del ambiente no toman en cuenta la irradiación, la oclusión ambiental del mundo ni las sombras de las nubes.
- No hay calcos.
- No hay refracciones.
- Los reflejos del espacio de pantalla están desactivados.
- Algunos efectos posteriores utilizaban acceso por píxel de alta calidad en la reducción de escala, y filtrado gaussiano. La versión de baja calidad utiliza menos accesos.
- Algunos materiales utilizaban prueba alfa incluso cuando no tenían canal alfa. La nueva permutación resolvió esto.
- Se eliminaron dos rellenos de pantalla completa.
Problemas con los que nos enfrentamos
Todas estas optimizaciones causaron algunos inconvenientes:
- Agregar opciones de nivel de calidad aumentó la cantidad de permutaciones de sombreadores (de 24 a 192), así que compilarlas sobre la marcha produjo temblores y errores durante la transmisión por secuencias en segundo plano. Tuvimos que usar todas estas versiones de sombreadores optimizadas solo para la pasada por GBuffer (redujo la cantidad de sombreadores de 192 a 52).
- No pudimos lograr 30 fps firmes en Intel HD Graphics 4000 porque parte del contenido del juego era demasiado complejo y no se lo podía simplificar (afectaba la historia). Pero, de todas maneras, el juego funciona en esta clase de hardware.
- Descubrimos lo estricto del comportamiento de la función sincos de HLSL en Intel HD 4000; el argumento de la función se debe normalizar alrededor del intervalo [-pi; pi] para que no produzca resultados incorrectos.
Con la vista en el futuro
La tercera generación de procesadores Intel Core se lanzó en 2012. En los últimos dos años, Intel sacó al mercado dos nuevas generaciones de procesadores Core con procesadores de gráficos mejorados, incluidos los nuevos Iris™ y Iris™ Pro, que pueden incrementar en un factor de más de 2,4 el rendimiento en Intel HD Graphics 4000 y aumentar la eficiencia energética, ideal para que los usuarios puedan jugar más tiempo en equipos portátiles con batería.
La mejora del rendimiento ayuda a los desarrolladores de juegos a habilitar niveles de calidad gráfica más elevados y resoluciones superiores. El equipo de Assassin’s Creed Rogue trabajó con una resolución de 1366 x 786 en mente para la calidad media en Intel® HD 4600 e Iris Graphics; para Iris Pro, la resolución se puede aumentar a 1600 x 900.
Configuración del sistema de prueba
Procesador Intel® Core™ i5, CPU 3570 K, 4 GB RAM, 1600 MHz, Intel® HD Graphics 4000, Windows* 8.1 de 64 bits.
Conclusión
Todas estas reducciones fueron justificadas porque no afectaron a los usuarios con hardware muy potente y nos dieron la posibilidad de que el juego funcionara en casi todos los aparatos compatibles con DirectX* 11. La base instalada dicta las reglas :)
Vínculos de consulta
http://assassinscreed.ubi.com/en-GB/purchase/assassins-creed-rogue.aspx
Otros vínculos
https://www.youtube.com/watch?v=EwgSYaerlok
Acerca de los autores
Corneliu Vasiliu - productor júnior de Ubisoft Kiev
Corneliu lleva seis años en Ubisoft y ha trabajado en la marca Assassin desde el comienzo: Assassin's Creed II, Assassin's Creed Brotherhood, Assassin's Creed Revelations, Assassin's Creed III, Assassin's Creed Black Flag, y después de alcanzar el puesto de productor, se encargó de portar Assassin's Creed Rogue a PC.
Maksym Rodionov, programador 3D sénior de Ubisoft Kiev
Maksym se incorporó a Ubisoft en 2014 y trabaja en el área de optimizaciones y apoyo de pipelines de representación gráfica. Tiene más de 12 años de experiencia en este ramo, en diferentes puestos, y es un apasionado del desarrollo de juegos y el snooker.
Olexander Puchka, ingeniero de gráficos de Ubisoft Kiev
Olexander se sumó a Ubisoft Kiev en 2014. AC Rogue fue el primer juego que tuvo como proyecto y su primera experiencia de representación gráfica. Antes solo tenía experiencia en desarrollo de GPGPU, por lo que este es un campo de estudio nuevo y estimulante para él. Además de programar, le gustan los juegos para PC y acelerar diferentes dispositivos de PC.
El equipo de Assassin’s Creed Rogue para PC en Kiev está compuesto por profesionales de gran experiencia, todos ellos jugadores de alma. Entendemos qué les gusta y qué les desagrada a los usuarios, y en nuestras actividades de producción, la satisfacción del usuario final es siempre nuestra prioridad máxima.