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

Guia do Lag em Jogos › Design de sincronização

Eventos reproduzidos ao chegar, sem timestamp Events played on arrival (no timestamps)

ID da causa sy-no-timestamp · Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)

Abrir o card interativo, com figuras e simulações →

Se o cliente reproduz os eventos do servidor assim que chegam, sem o horário em que aconteceram, o jitter da rede passa direto para o ritmo das animações e efeitos, que fica irregular.

Por quê Eventos como “início do ataque” e “reproduzir efeito” executados assim que chegam → Efeito Cada pacote leva um tempo diferente para chegar, e o intervalo fica irregular → Na tela Animações de ataques em sequência ficam ora rápidas, ora lentas, e o timing dos padrões do boss muda a cada vez

Sintomas
Engasgos, Avanço rápido
Fatores
Jitter
Quem é afetado
Só eu
Quando
Sempre
Responsável
Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Cliente: reproduzir no horário que vem no evento (eventos agendados, buffer de interpolação). Servidor: enviar os eventos com o horário em que aconteceram (horário do servidor).
No gráfico
Picos aleatórios · Intervalo de reprodução dos eventos, intervalo de chegada dos pacotes
Onde olhar
Casar, pelo número do evento, o horário em que o evento aconteceu no log do servidor com os horários de chegada e reprodução no log do cliente e comparar os intervalos. Reproduzir o problema em build de desenvolvimento inserindo jitter (valor de jitter do tc netem, latência mínima e máxima da emulação de rede do Unreal)
Confirma se
No servidor, os eventos acontecem em intervalos regulares, mas o intervalo de reprodução segue exatamente o intervalo de chegada e fica irregular
Descarta se
Chegada regular, mas reprodução irregular: problema de frame no cliente (picos de frame time). Intervalo já irregular no servidor: estouro do tick
Como verificar
Exige logs e métricas do servidor ou do cliente do jogo

Fontes

  1. Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization (Yahn W. Bernier, GDC 2001) Valve
    Cada atualização leva o horário do servidor, e o cliente desenha a posição no horário-alvo, que é o horário atual menos o tempo de interpolação (100 ms)
  2. Snapshot Interpolation Gaffer On Games
    Desenhar cada snapshot assim que chega dá engasgos por causa do jitter; acumular por um instante no buffer de interpolação antes de desenhar deixa tudo suave
  3. NetworkTime and ticks (Netcode for GameObjects 2.5) Unity
    Exemplo em que o RPC leva o horário de envio e quem recebe reproduz o efeito no horário do servidor
  4. tc-netem(8) — Linux manual page iproute2
    Ferramenta de teste que insere atraso e jitter (delay TIME JITTER) e perda (loss random PERCENT) nos pacotes de saída para imitar uma rede real
  5. Using Network Emulation in Unreal Engine Epic Games
    Testa com latência mínima e máxima e taxa de perda de pacotes configuradas no servidor e no cliente; no console, a configuração usa comandos como NetEmulation.PktLag

Veja também

Mesma camada: Design de sincronização

Mesmo sintoma (Engasgos) em outras camadas

Ver o card interativo, com figuras e simulações