Si se compara a todos con todos para saber quién puede ver a quién, cuando el número de jugadores se multiplica por 10, el cálculo se multiplica por 100.
Por qué Se compara la distancia entre todos los personajes, o, aun dividiendo el mapa en una cuadrícula, cientos de jugadores se juntan cerca de una misma celda → Efecto Con 100 jugadores, unas 10,000 comparaciones; con 1,000, alrededor de 1 millón → En pantalla En lugares abarrotados, como un world boss o un asedio, el tick se dispara: cámara lenta y tirones
Responsable principal Desarrollo de servidor (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Dividir el mapa en cuadrículas o sectores y comparar solo lo cercano, actualizar con menos frecuencia lo que está lejos, poner un tope a los jugadores que ve cada uno.
Cifras de referencia
Si cada par de jugadores cuesta 0.1 µs (una diezmillonésima de segundo) entre la comparación de distancia y la actualización de las listas de visibles y no visibles, con 1,000 jugadores (cerca de 1 millón de pares) un tick tarda 100 ms. Es el doble del presupuesto de 20 ticks (50 ms).
En el gráfico
Sube con la carga · Tiempo de tick del servidor, jugadores reunidos en un mismo lugar
Dónde mirar
Jugadores y tiempo de tick por zona y canal en el mismo gráfico, y el tiempo del tick dedicado al cálculo de visibilidad, medido aparte. Si no se mide aparte, peso de CPU por función del proceso del juego con perf top -p
Se confirma si
Cuando se duplican los jugadores reunidos en un lugar, el tiempo de tick casi se cuadruplica, y las funciones de visibilidad y distancia se llevan la mayor parte del tiempo de CPU
Se descarta si
Si el tiempo de tick crece en proporción a los jugadores o pesan mucho las funciones de envío y serialización, apunta a “Explosión de broadcast” o a “Costo de serialización y compresión”
Se verifica con
Requiere logs y métricas del servidor o el cliente del juego
Fuentes
Comparing Interest Management Algorithms for Massively Multiplayer GamesACM Artículo de NetGames 2006 (versión pública de los autores). Medir la distancia de todos los pares no escala al aumentar los jugadores; con una cuadrícula de celdas cuadradas, solo se revisan las 9 celdas de alrededor
Replication Graph in Unreal EngineEpic Games El método básico, que evalúa todas las conexiones para cada actor, es un cuello de botella de CPU en el servidor con muchos jugadores y actores; los MMORPG y juegos similares dividen el mundo en una cuadrícula y reutilizan las listas de cada celda
perf-top(1) — Linux manual pageperf Muestra en tiempo real el peso de uso de CPU por función (símbolo) de un proceso (-p) o hilo (-t) en ejecución