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

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

Registro de acerto sem compensação de lag Server-now hit validation

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

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

Se o servidor decide o acerto só pela “posição atual no servidor”, a decisão diverge do que você viu na tela.

Por quê O adversário na sua tela está na posição de cerca de 0,2 s atrás (com ping de 150 ms e interpolação de 100 ms) → Efeito O servidor decide pela posição atual, e o alvo já não está onde você mirou → Na tela Você acertou, mas conta como erro. É preciso atirar à frente de alvos em movimento

Sintomas
Ação perdida / rollback
Fatores
Latência
Quem é afetado
Só eu
Quando
Ao fazer ações específicas
Responsável
Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do cliente (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Servidor: voltar no tempo até o momento que o atacante via e decidir ali (compensação de lag), ou mudar para seleção de alvo (tab target). Cliente: ao atacar, enviar junto o momento que estava vendo (o horário do servidor em interpolação).
No gráfico
Alto só em alguns · Taxa de acerto em alvos em movimento (por faixa de ping)
Onde olhar
Registrar juntos no log de decisões do servidor o horário do ataque, a posição do alvo na tela do atacante (valor enviado pelo cliente), a posição do alvo no servidor usada na decisão e o RTT do atacante. Em build de desenvolvimento, desenhar sobre a tela do cliente a posição usada pelo servidor deixa isso visível na hora
Confirma se
Nas decisões de erro, a diferença entre as duas posições é aproximadamente velocidade do alvo × (RTT do atacante + tempo de interpolação), e quanto maior o ping, mais cai só a taxa de acerto em alvos em movimento
Descarta se
Erra até alvos parados: problema na hitbox ou na checagem de colisão. Diverge mesmo com volta no tempo: verificar se o cliente informa errado ao servidor o tempo de interpolação
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
    Sem compensação de lag, é preciso atirar à frente do alvo na medida da latência. Compensação de lag: o servidor volta no tempo o equivalente à latência mais o tempo de interpolação para decidir
  2. Peeking into VALORANT's Netcode Riot Games
    O servidor volta ao estado do jogo que o jogador via no momento do tiro para decidir o acerto, e o cliente envia junto o horário da simulação que estava vendo
  3. Source SDK 2013: player_lagcompensation.cpp Valve
    Na Source engine, tempo de volta = latência de rede + tempo de interpolação

Veja também

Mesma camada: Design de sincronização

Mesmo sintoma (Ação perdida / rollback) em outras camadas

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