Netcode
Netcode se trata de un hiperónimo utilizado en la comunidad gamer para denominar cualquier cosa que se relacione a la gestión de redes (networking en inglés) de los juegos en línea, a menudo refiriéndose a problemas de sincronización entre clientes y servidores. Los jugadores habitualmente hacen afirmaciones sobre "netcodes malos" cuando se encuentran problemas de conexión en un juego, a pesar de que las causas de estos problemas podrían estar completamente fuera del control de su motor (algunas causas habituales: latencia alta entre el servidor y el cliente, pérdida de paquetes, congestión de la red, etc.). Incluso podrían ser causados por factores externos que no tienen nada que ver con la calidad de la red como el tiempo de renderización de los fotogramas o velocidades inconsistentes de fotogramas.[1][2] Netcode como término tiende a ser utilizado solamente en el mundo de los videojuegos, y no es reconocido por la comunidad científica de las ciencias de la computación.[3][4]
Causas potenciales de problemas de netcode
Latencia
La latencia es inevitable en los juegos en línea, y la calidad de la experiencia de los jugadores está estrictamente ligada a esta (cuanta más latencia hay entre los jugadores, mayor es el sentimiento de que el juego no es responsivo a sus entradas).[1] Hay que tener en cuenta el hecho de que la latencia de la red de los jugadores (la cual está en gran parte fuera del control de los juegos) no es el único factor en cuestión, sino también la latencia inherente a la manera en que las simulaciones de los juegos se ejecutan. Para disfrazar o disimular la latencia y para corregir problemas causados por valores altos de esta se han desarrollado varios métodos de compensación de lag.[5]
Tickrate
La medida temporal mínima de una reiteración de acciones en un juego se conoce como tick. La tasa a la cual la simulación es ejecutada en un servidor es referido a menudo como el tickrate (o tasa de actualización) de un servidor; esto es esencialmente el equivalente de los fotogramas por segundo del cliente.[6] El tickrate es limitado por el periodo de tiempo que la simulación necesita para ejecutarse, y es a menudo intencionadamente limitado todavía más para reducir la inestabilidad introducida por una tasa fluctuante (y también para reducir los costes de la CPU y de transmisión de datos). Un tickrate bajo incrementa la latencia de la sincronización entre la simulación del servidor y las de los clientes.[7] El tickrate en juegos de acción rápida como los shooters en primera persona a menudo se encuentra entre los 120 ticks por segundo (cómo es el caso de Valorant), los 60 ticks por segundo (en juegos como Counter-Strike: Global Offensive u Overwatch), los 30 ticks por segundo (como en Fortnite y en la versión de consola de Battlefield V)[8] y los 20 ticks por segundo (cómo con los polémicos casos de Call of Duty: Modern Warfare, Call of Duty: Warzone y Apex Legends).[9][10] Un tickrate bajo, naturalmente, también reduce la precisión de la simulación, de manera que podría llegar a causar problemas si se lleva a extremos, o si las simulaciones del cliente y del servidor se encuentran ejecutándose a tasas significativamente diferentes.
Debido a limitaciones en la cantidad de la anchura de banda disponible y el tiempo de la CPU dedicado a la comunicación de la red, algunos juegos priorizan ciertas comunicaciones vitales mientras se limita la frecuencia y prioridad de otros tipos de información menos importantes. Igual que con el tickrate, esto aumenta la latencia de la sincronización. Los motores de juego pueden limitar las veces por segundo que las actualizaciones (de la simulación) son enviadas a un cliente determinado y/o a objetos determinados en el mundo del juego además de reducir la precisión de algunos valores enviados a través de la red para ayudar con el uso de la anchura de banda. Esta carencia de precisión puede llegar a ser notable.[11][12]
Errores de software
Hay varios errores de sincronización de una simulación entre máquinas que suelen ser considerados como "problemas de netcode". Por ejemplo, podemos encontrar varios bugs que causen que la simulación avance y se desarrolle de manera diferente entre una máquina y otra, o que algunos objetos o elementos no se comuniquen entre ellos aunque el usuario perciba que deberían hacerlo.[2] Tradicionalmente, los juegos de estrategia en tiempo real (por ejemplo, Age of Empires) utilizaron modelos de gestión de redes peer-to-peer del tipo lock-step donde se asume que las simulaciones se ejecutan de manera exactamente igual para todos los clientes; aun así, si un cliente perdiera el paso por cualquier razón, la desincronización puede ser grave y volverse irrecuperable.[13]
Protocolos de capa de transporte y código de comunicación: PCT y PDU
El tipo de protocolo de capa de transporte (y su gestión y programación) escogido para un juego también puede causar problemas de networking.
Si un juego utiliza un protocolo de control de transmisión (PCT, TCP en inglés) habrá una latencia elevada añadida entre los jugadores. Este protocolo se basa en la conexión entre dos máquinas, en la cual estas pueden intercambiar datos y leerlas. Este tipo de conexiones son muy fiables, estables, ordenadas y fáciles de implementar, y se utilizan en prácticamente cualquier operación que hacemos por internet (tanto en la navegación de la web como en los correos electrónicos o los IRC). Estas conexiones, sin embargo, no se adecuan correctamente a las velocidades de red que los juegos de acción rápida necesitan, ya que este tipo de protocolo (los protocolos de transmisión en tiempo real) agrupa los datos automáticamente en paquetes (los cuales no se enviarán hasta alcanzar un volumen de información determinado) que se enviarán a través de la conexión establecida entre las máquinas, en vez de manera directa (sacrificando la velocidad por seguridad). Este tipo de protocolo también tiende a responder muy lentamente cuando se encuentra con la situación de que ha perdido un paquete, o que han llegado en un orden incorrecto o duplicados, lo que puede ser muy perjudicial para un juego en línea en tiempo real (hay recordar que este protocolo no se diseñó para este tipo de software).
Si el juego en cambio utiliza un protocolo de datagramas de usuario (PDU, UDP en inglés), la conexión entre las máquinas será muy rápida, ya que en vez de establecer una conexión entre ellas se enviarán y recibirán los datos directamente. Este protocolo es mucho más sencillo que el anterior, pero no goza de su fiabilidad y estabilidad y requiere la implementación de código propio para encargarse de las funciones indispensables para la comunicación entre máquinas que el PCT incluye (tales como la división de datos en paquetes, la detección automática de la pérdida de paquetes, la suma de verificación, etc.); esto aumenta la complejidad del motor, por lo que se podrían provocar problemas.[14]
Véase también
- Juegos en línea
- Género de videojuegos
- Lag (juegos digitales)
- Comparativa entre los protocolos UDP y TCP
Enlaces externos
Referencias
- ↑ a b Huynh, Martin (2019). An analysis of continuous consistency models in real time peer-to-peer fighting games.
- ↑ a b «Addressing "Netcode"; in Battlefield 4». Battlelog. Consultado el 30 de marzo de 2014.
- ↑ «List of programming and computer science terms». Labautopedia.
- ↑ «Computer programming term». Computer Hope.
- ↑ «Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization - Valve Developer Community». developer.valvesoftware.com. Consultado el 11 de diciembre de 2020.
- ↑ «Source Multiplayer Networking». Valve Developer Community. Consultado el 11 de diciembre de 2020.
- ↑ gamekult.com, ed. (29 de marzo de 2014). «Titanfall, de l'importance d'un bon tickrate». Consultado el 30 de marzo de 2014.
- ↑ «Battlefield V Server Tick Rate Revealed & Why It Matters» (en en-ZA). Consultado el 5 de diciembre de 2020.
- ↑ Davison, Ethan. «Valorant’s super-fast servers are attracting streamers and pros in droves. Here’s why.». Washington Post (en inglés estadounidense). ISSN 0190-8286.
- ↑ «How bad is Apex Legends netcode compared to Fortnite and PUBG?» (en inglés). 23 de noviembre de 2019. Consultado el 5 de diciembre de 2020.
- ↑ Valve (ed.). «Source Multiplayer Networking». Consultado el 30 de marzo de 2014.
- ↑ Epic Games (ed.). «Unreal Networking Architecture». Consultado el 7 de septiembre de 2014.
- ↑ Glenn Fiedler. «What every programmer needs to know about game networking». Consultado el 8 de septiembre de 2014.
- ↑ «UDP vs. TCP». Gaffer On Games (en inglés estadounidense). 1 de octubre de 2008. Consultado el 11 de diciembre de 2020.