Volver a Novedades

Tras bambalinas: Rendimiento

J Brian Smith

¡Saludos! Me llamo J Brian, y lidero los esfuerzos tecnológicos básicos en el equipo de Crucible. El rendimiento del juego es una de las responsabilidades de nuestro equipo.

 

En general, el rendimiento tiene que ver con la sensación del juego (si la respuesta del juego es rápida, si la fluidez del juego es correcta, etc.). Sin embargo, los problemas con el rendimiento pueden ser muy diferentes y tener varias causas. Comencemos por analizar algunos de los componentes que son centrales en el rendimiento de un juego y sobre el trabajo que realizamos desde mayo. Después de eso, hablaremos un poco sobre haremos en el juego a medida que avancemos a un futuro más brillante y con mejor rendimiento.

 


Frecuencia de fotogramas

Casi cualquier jugador sabe que una mayor frecuencia de fotogramas (FPS) es mejor para la jugabilidad.  Uno de los problemas que una baja frecuencia de fotogramas puede acarrear es que la jugabilidad se "entrecorte" (causado por una única imagen que tarda mucho más tiempo del que debería y que puede causar confusión). Nuestra meta es que, en computadoras que reúnan nuestras especificaciones de sistema recomendadas y usen los ajustes gráficos en calidad "alta" por defecto, Crucible corra a una constante de 60 FPS.El juego debe correr a una constante mínima de 30 FPS en equipos que cumplan los "requerimientos mínimos" y cuyos ajustes estén configurados en calidad "baja"; mientras que en computadoras de alta gama, Crucible debe funcionar de manera mucho más rápida. Actualmente, estamos usando la velocidad de 60 FPS para los equipos con las especificaciones recomendadas en la mayoría de cuadros; sin embargo, la velocidad caerá con frecuencia por debajo de dicha tasa por periodos de tiempo o en imágenes separadas de mala calidad.

 

Durante el desarrollo, por lo general vemos la "duración de fotogramas" en lugar de la tasa de fotogramas. Para llegar a los 60 FPS, cada cuadro debe tardar alrededor de 16,5 milisegundos o menos. Nuestro trabajo consiste en reducir el tiempo que tarda en completarse la simulación y el renderizado de un único fotograma. Hemos realizado una docena de micro-optimizaciones a la frecuencia de fotogramas. En general, hemos reducido el tiempo de fotogramas en más del 15% en computadoras que tengan las especificaciones recomendadas desde que se lanzó el juego y hemos cruzado el umbral crítico donde la mayoría de nuestros fotogramas tardaban menos de 16,5 milisegundos. La mayoría de las mejoras se pudieron lograr mediante la creación de sistemas básicos y un código de motor de juego que ejecute nuestra lógica de juego y aumente la eficiencia, o al hacer un mejor uso de los núcleos inactivos en el CPU en partes de nuestro código que solo podían usar (de forma totalmente innecesaria) solo un núcleo del CPU a la vez.

 

Desincronización

 

Cuando tu cliente (la copia del juego que se ejecuta en tu computadora) y el servidor intercambian lo que sucede en el mundo del juego de forma precisa, a eso se le llama "sincronización": ambos "aceptan" el mismo estado del mundo. Por otro lado, una desincronización es cuando, en cierto momento, el cliente y el servidor no se ponen de acuerdo sobre cuál es el estado del dicho mundo. Cuando esto ocurre, el servidor emite una corrección al cliente de juego y lo obliga a aceptar su versión del mundo del juego. En ese sentido, el servidor siempre tiene la "última palabra" en lo que respecta al estado del mundo. Sin embargo, esta corrección hace que, desde tu perspectiva, el mundo se divida de una forma nada orgánica. Tú u otro jugador podrían experimentar lo que se conoce como "banda elástica": un efecto en el que sus personajes parecen "teletransportarse" de un lugar a otro. Otros efectos indeseados incluyen el que, al usar una habilidad, esta no surta efecto o se cancele; o que otro valor de jugabilidad cambie de forma poco natural. Si la desincronización sucede en varios fotogramas al mismo tiempo, esta anomalía afecta la experiencia de juego y ocasiona problemas con el tiempo de fotogramas y en el ancho de banda.

 

La realidad con el tráfico de Internet y los modelos de sincronización con redes de poca latencia nos impiden reducir estos niveles a cero, pero podemos mejorarlos. Nos topamos con ciertas situaciones donde un solo episodio de desincronización debido a una caída en la velocidad del Internet o donde un solo error lógico puede desembocar en una cadena de docenas de desincronizaciones a la vez. Tras corregir varios de estos problemas, logramos reducir nuestra tasa de anomalías de desincronización a menos del 50% de las que ocurrieron en el lanzamiento.

 

Memoria

Cuando el consumo de recursos del juego está casi al límite de la memoria RAM o video RAM de tu computadora, el rendimiento sufre muchísimo, en especial si hay otros programas y sistemas consumiendo recursos de tu PC. En ese sentido, usar menos memoria asegura que no alcances dichos límites, mantiene el rendimiento fluido y podría eventualmente permitirnos que el juego funciona en una gama más amplia de computadoras.

 

Fijamos el objetivo de reducir en 3 GB el uso de memoria del juego desde el lanzamiento (considerando que algunos juegan Crucible en computadores con 8 GB de RAM) y, desde nuestro lanzamiento en agosto 12, hemos reducido el uso de memoria en 2,6 GB. Lo más complicado fue implementar códigos de medición y reporte mucho mejores que les dieran a los desarrolladores información detallada sobre en qué se usaba la memoria de la computadora. Armados con información precisa acerca de qué sistemas y contenido usaban determinadas partes de la memoria, optimizamos más de una docena de áreas clave del juego (tanto en su código como en el contenido) para reducir el uso de memoria sin sacrificar la calidad de la experiencia de juego. Este trabajo mejoró de forma significativa la experiencia de jugabilidad en las computadoras con menos recursos.

 

Ancho de banda

Las conexiones de Internet de la mayoría de personas fluctúa durante el curso de una partida. Cuando el juego necesita enviar o recibir más información de la que tu conexión puede soportar, parte de los datos se pierden y tu partida sufre de desincronización y muchos problemas de latencia. Reducir el ancho de banda que consume el juego reduce la frecuencia de dichos problemas.

 

Una de las optimizaciones más importantes que hicimos en este frente hasta ahora lidian con un par de sistemas clave que estaban usando mucho más ancho de banda del necesario para sincronizar su información.

 


Seguimiento del progreso

Tras haber hablado sobre los cuatro factores (fotogramas, desincronización, memoria y ancho de banda) que moldean el rendimiento de la experiencia de juego, surge la pregunta: ¿cómo podemos saber si nuestros cambios funcionan?

 

Sin la medición continua de las características de nuestro rendimiento, ¡sería muy difícil saber si estamos teniendo algún progreso! Hemos estado midiendo el rendimiento de forma muy cuidadosa a lo largo de todo el desarrollo y seguiremos afinando nuestra habilidad para entender todos los escenarios del rendimiento en cada aspecto del juego. Existen tres formas principales para analizar los cambios al rendimiento en el tiempo:

 

  • Hemos mejorado nuestra prueba de automatización, un proceso que, tras analizar y recabar (de manera automática) información detallada del juego docenas de veces por día, nos ayuda a describir el rendimiento de forma consistente y correcta. Estos datos nos permiten detectar rápidamente el momento cuando nuevos problemas surjan, así como verificar la efectividad de nuevas optimizaciones.

 

  • Complementamos la información automática mediante pruebas de rendimiento manuales. Aquí, nuestro equipo de Control de Calidad (QA) se dedica a jugar

     

    Crucible

     

    con herramientas especiales y código de grabación de rendimiento para asegurarnos de recabar datos en situaciones de juego reales que podrían haber sido omitidas por nuestra prueba automática (la cual ejecuta pruebas en las mismas condiciones en cada momento de forma predeterminada).

 

  • Por último, hacemos el seguimiento de la información de rendimiento de alto nivel de juegos del mundo real en un sitio web interno que nos ayuda a comprar la experiencia de los jugadores con nuestras expectativas internas.

 


Lo que se viene

Ya que cubrimos todo lo que contribuye a la calidad del rendimiento, el estado de cada uno de los atributos en Crucible y cómo hacemos estas mediciones, solo queda un tema por hablar hoy: ¡qué es lo que se viene! A continuación, analizamos por categorías algunos de los aspectos en los que trabajamos en este momento:

 

Frecuencia de fotogramas

En nuestras pruebas internas en las especificaciones recomendadas, aún encontramos cerca de un 10% de nuestros cuadros toman 19 ms (recuerden que estamos apuntando a 16,5 ms o menos) y 1% de nuestros cuadros toman alrededor de 23 ms. En adelante, esperamos hacer un uso mayor de los núcleos del CPU adicionales, lo cual reducirá la línea de base de nuestro tiempo de fotogramas, en especial en computadoras de mayor gama, con más núcleos de CPU. También haremos un análisis aún mayor de las situaciones cuyo resultado es de "fotogramas deficientes" para abarcar mejor sus causas específicas. Y, por último, trabajaremos en hacer un mejor balance de la carga de trabajo que necesita hacerse en cada uno de los fotogramas.

 

Nosotros eventualmente nos enfocaremos en brindar 144 FPS consistentes en las computadoras de alta gama. En el corto plazo, nos enfocaremos principalmente en obtener una tasa consistente de 60 FPS en computadoras que reúnan nuestras especificaciones recomendadas, lo que contribuirá inmediatamente a obtener un rango de FPS mayor en computadoras de gama alta.

 

Desincronización

A lo largo de los próximos meses, nos dedicaremos a reducir la tasa actual de desincronizaciones en más de la mitad. Esto los convertirá en fenómenos muy raros y tendrán un impacto notable en la mejora general del juego, en especial en situaciones de combate pesado. Estas optimizaciones serán posibles por mejorar la lógica de predicción en casos donde una predicción existente sea necesaria pero frágil (así como eliminar algunas lógicas de predicción innecesarias).

 

Memoria

Como ya se mencionó, el objetivo era reducir el uso de memoria de Crucible en 3 GB. En la actualidad, logramos reducir un 2,6 GB, lo cual es un gran avance. Con algunas mejoras más al código y al contenido (específicamente a la forma cómo cargamos la geometría dentro de la memoria), creemos que podemos completar ese objetivo el mes que viene.

 

Ancho de banda

En nuestra próxima actualización, usaremos tecnología de compresión más veloz para reducir aún más nuestro uso de ancho de banda hasta un impresionante 30% menos. Con esto, estamos seguros de que cumpliremos nuestro objetivo de usar menos de 300 kbit/seg de descarga de ancho de banda (siendo mucho menos de eso la mayor parte del tiempo).

 

Para entonces, si bien nuestro trabajo principal será optimizar el ancho de banda, también revisaremos qué tanto más podemos mejorar la carga del ancho de banda que usa el juego. En general, aunque nosotros usamos más carga que descarga, algunos jugadores tienen conexiones que tienen más restricciones en la carga en comparación a la descarga. Debido a esto, puede que optimicemos aún más dicho elemento si encontramos la oportunidad de hacerlo.

 


¡Muchas gracias por leer este artículo y por jugar Crucible! Sabemos que el rendimiento es esencial para la experiencia de un juego de disparos multijugador competitivo. Nunca estaremos completamente satisfechos, por lo que siempre buscaremos nuevas formas de mejorar el rendimiento del juego. Si consideras el rendimiento como algo vital para tu experiencia de juego y conoces algún aspecto del juego que podría mejorarse, nos encantaría saberlo. Recuerda que puedes usar nuestro canal "#bugg reports" en Discord para compartirlo.

 


V2