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

Guia do Lag em Jogos › Problemas que só afetam alguns

Perda do snapshot de referência (baseline) Lost baseline for delta compression

ID da causa pt-baseline · 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 →

No modelo em que o servidor só manda “o que mudou desde a última vez”, se a informação completa enviada uma vez no início (a referência) se perde, as mudanças seguintes não podem ser aplicadas.

Por quê O pacote com a informação completa da entidade (referência) se perde ou é descartado antes de ser processado → Efeito O cliente não tem onde aplicar as mudanças seguintes e as ignora → Na tela A entidade fica invisível ou aparece de repente muito tempo depois

Sintomas
Invisível / entidade fantasma, Teleporte
Fatores
Perda de pacotes
Quem é afetado
Só um dos clientes no mesmo PC, Só eu
Quando
Aleatoriamente, de vez em quando
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: retransmitir a referência sempre, até receber a confirmação (ACK), e montar as mudanças só a partir de referências que o cliente confirmou ter recebido. Cliente: enviar a confirmação (ACK) da referência só depois de aplicá-la de fato, pedir de novo ao servidor quando receber mudanças de uma entidade desconhecida.
No gráfico
Picos aleatórios · Mudanças recebidas de entidades desconhecidas
Onde olhar
Cruzar quantas vezes o cliente descartou mudanças recebidas sem referência, e de quais IDs de entidade, com o horário em que o servidor enviou a referência dessa entidade e o horário em que recebeu o ACK. Reproduzir em ambiente de desenvolvimento inserindo perda (loss do tc netem, taxa de perda de pacotes da emulação de rede do Unreal)
Confirma se
Para a entidade invisível, o servidor enviou a referência, não recebeu o ACK e mesmo assim continuou mandando só as mudanças, e o cliente descartou essas mudanças
Descarta se
Referência confirmada com ACK e aplicada no cliente, mas a entidade continua invisível: aponta para “Mensagem de despawn perdida (entidade fantasma)” ou “Confusão por reutilização de ID de entidade”
Como verificar
Exige logs e métricas do servidor ou do cliente do jogo

Fontes

  1. Snapshot Compression Gaffer On Games
    As mudanças só devem ser montadas a partir de uma referência (baseline) que o outro lado confirmou (ack) ter recebido, e o estado inicial é enviado separadamente
  2. Quake III Arena source: code/server/sv_snapshot.c id Software
    Faz compressão delta a partir do snapshot que o cliente confirmou e, se a referência for antiga demais, envia o snapshot completo
  3. 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
  4. 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: Problemas que só afetam alguns

Mesmo sintoma (Invisível / entidade fantasma) em outras camadas

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