한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Libro blanco del lag en juegos › Diseño del netcode

Discrepancias de pathfinding en la sincronización de comandos Command sync with divergent pathing

ID de la causa sy-path-mismatch · Responsable principal Desarrollo de servidor (Equipo de desarrollo) · También Desarrollo de cliente (Equipo de desarrollo)

Abrir la ficha interactiva con gráficos y simulaciones →

Si solo se intercambia “ve aquí” y cada lado calcula la ruta por su cuenta, basta una pequeña diferencia de cálculo para que un personaje o un monstruo tome otra ruta y después vuelva arrastrado a su sitio.

Por qué En el movimiento por clic o la persecución de monstruos, solo se envía el destino y el cliente calcula la ruta por separado → Efecto Por diferencias en los datos del terreno, colisiones con otros personajes o un orden de cálculo distinto, se mueve por una ruta distinta a la del servidor → En pantalla Un monstruo atraviesa una pared y de golpe aparece en otro sitio, tu personaje cambia de dirección tras el clic como si se deslizara

Síntomas
Teletransporte, Rubber banding
Factores
Latencia
A quién afecta
Una zona o un canal, Solo yo
Cuándo
Al moverse o cambiar de zona
Responsable
Responsable principal Desarrollo de servidor (Equipo de desarrollo) · También Desarrollo de cliente (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Servidor: enviar también los puntos intermedios de la ruta (waypoints), sincronizar la posición periódicamente. Cliente: corregir los desajustes de forma suave, usar los mismos datos de terreno que el servidor.
En el gráfico
Picos aleatorios · Correcciones de posición por entidad (número y distancia)
Dónde mirar
Registrar para cada entidad la diferencia entre la posición enviada por el servidor y la calculada por el cliente, y marcar en el mapa las coordenadas donde hubo correcciones. Resumir con checksums las rutas o posiciones de los dos lados y compararlas periódicamente permite encontrar el momento en que empezaron a divergir
Se confirma si
Las correcciones se concentran en ciertos terrenos (umbrales, pasillos estrechos, pendientes) o en zonas concurridas, y se repiten en el mismo sitio incluso para jugadores con métricas de red normales
Se descarta si
Si las correcciones ocurren en cualquier sitio y solo cuando se disparan la pérdida o el jitter, es un problema de conexión. Si un monstruo salta a la vez en las pantallas de varios jugadores, revisar “Un cliente lento controla al monstruo”
Se verifica con
Requiere logs y métricas del servidor o el cliente del juego
Para saber más
Este modelo es una de las razones por las que los juegos de movimiento por clic y de selección de objetivo (tab target) son poco sensibles al ping. Pero no hay garantía de que los dos lados obtengan el mismo resultado, así que hace falta sí o sí un mecanismo que sincronice la posición de vez en cuando. Los cálculos en coma flotante pueden dar resultados ligeramente distintos según el tipo de CPU, el compilador y sus opciones de optimización (incluida la diferencia entre builds de depuración y de release). En arquitecturas como el lockstep o el rollback, que solo intercambian inputs y suponen que los dos lados calculan exactamente lo mismo, estas pequeñas diferencias se acumulan y pueden provocar una desincronización (desync) en la que el estado del juego de las dos pantallas se separa.

Fuentes

  1. Deterministic Lockstep Gaffer On Games
    Aunque sea determinista en la misma máquina, el resultado en coma flotante puede variar si cambian el compilador, el SO o la CPU
  2. State Synchronization Gaffer On Games
    Si se envía el estado junto con los inputs, se pueden sincronizar los dos lados sin un determinismo perfecto
  3. Peeking into VALORANT's Netcode Riot Games
    Con pérdida de paquetes o cuando dos personajes intentan ir al mismo sitio, las simulaciones del servidor y del cliente divergen y hace falta corregir
  4. 1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond Game Developer
    Diferencias minúsculas crecen con el tiempo y las rutas de los aldeanos se desvían poco a poco. Se comparan con checksums el mundo, las entidades y la búsqueda de rutas para detectar la desincronización (out-of-sync)
  5. Floating Point Determinism Gaffer On Games
    El mismo código de coma flotante puede dar resultados distintos según el compilador, la arquitectura de CPU o las builds de depuración y de release. Caso en que CPU de AMD e Intel dieron valores ligeramente distintos en funciones trascendentes
  6. /fp (Specify floating-point behavior) Microsoft
    /fp:fast puede reordenar o combinar operaciones de coma flotante y dar resultados distintos de otras opciones /fp, y una operación combinada con FMA también puede diferir de multiplicar y sumar por separado

Ver también

Misma capa: Diseño del netcode

Causas de otras capas con el mismo síntoma (Teletransporte)

Ver la ficha interactiva con gráficos y simulaciones