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

Guia do Lag em Jogos › L1 Processo do jogo no cliente

Buffer de interpolação ausente ou curto demais Missing/short interpolation buffer

ID da causa cg-no-buffer · 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 desenha os pacotes do servidor assim que chegam, o jitter (variação no intervalo de chegada dos pacotes) aparece direto na tela.

Por quê A posição recebida é desenhada na hora, ou o buffer é menor que o jitter → Efeito A imagem para quando um pacote chega atrasado e pula quando vários chegam juntos → Na tela Os outros personagens se movem engasgando: para, anda, para

Sintomas
Engasgos
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: ter um buffer de interpolação e ajustar o tamanho dele automaticamente conforme o estado da conexão. Servidor: aplicar compensação de lag (voltar no tempo para decidir o acerto), para que o registro de acerto funcione mesmo quando o jogador atira em uma imagem atrasada pelo tamanho do buffer.
Números de referência
Em geral, o buffer fica em cerca de 2 vezes o intervalo de envio de pacotes do servidor (100 ms se o cliente recebe 20 pacotes por segundo).
No gráfico
Sempre alto desde o início · Intervalo de chegada dos pacotes, vezes em que o buffer de interpolação esvaziou
Onde olhar
Registrar no cliente a distribuição dos intervalos de chegada dos pacotes do servidor e o número de frames em que a interpolação parou ou passou para extrapolação por falta do próximo snapshot
Confirma se
A variação no intervalo de chegada passa com frequência do tamanho do buffer de interpolação e, a cada vez, o buffer esvazia e os outros personagens dão um engasgo. Aumentar o buffer reduz o problema
Descarta se
Engasgos mesmo com buffer suficiente: verificar se o próprio intervalo de envio do servidor está irregular (atraso no tick)
Como verificar
Exige logs e métricas do servidor ou do cliente do jogo
Saiba mais
Um buffer maior deixa o movimento mais suave, mas faz você ver o adversário no passado na mesma proporção. Por isso, junto com ele se usa a compensação de lag: para decidir um ataque, o servidor volta no tempo até o “passado que aquele jogador estava vendo” e confere o acerto.

Fontes

  1. Interpolation and extrapolation (Netcode for Entities 6.5) Unity
    Interpolação com buffer: desenhar com atraso proposital para esperar os pacotes atrasados; quanto maior o buffer, mais preciso, mas a latência cresce na mesma medida
  2. Struct ClientTickRate (Netcode for Entities 6.5) Unity
    Valor padrão do buffer de interpolação: InterpolationTimeNetTicks = 2 (o equivalente a 2 envios do servidor)
  3. Physics (Netcode for Entities 6.5) Unity
    Compensação de lag: o servidor reconstrói o mundo de colisão que o cliente via naquele tick e decide se houve acerto

Veja também

Mesma camada: L1 Processo do jogo no cliente

Mesmo sintoma (Engasgos) em outras camadas

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