Interpolação de snapshots: armazenar em buffer uma linha do tempo remota estável
Tradução automática do original (English, revisão 1); o original é a versão de referência. Original
Renderize o estado remoto entre snapshots com timestamp, escolha um atraso que tolere o jitter da rede e trate amostras ausentes sem confundir interpolação com predição.
Conteúdo
Suavidade exige uma linha do tempo
Os pacotes raramente chegam com o mesmo espaçamento com que foram enviados. Renderizar diretamente o dado mais recente faz o tempo de chegada dos pacotes aparecer como movimento. A interpolação de snapshots, em vez disso, reconstrói a apresentação remota em uma linha do tempo deliberadamente atrasada. [1] A questão de projeto é quanto risco de dados ausentes aceitar para uma dada quantidade de atraso visual.
Buffer e intervalo
Mantenha os snapshots ordenados pelo timestamp de simulação e amostre entre os dois que delimitam o instante de renderização escolhido. O Mirror documenta uma implementação de buffer e amostragem de snapshots que pode ser testada de forma independente. [2] A interpolação permanece dentro das amostras conhecidas. A extrapolação estima além da amostra mais recente e, por isso, introduz outro modo de falha quando o movimento muda inesperadamente.
Exemplo prático
Suponha que um cliente hipotético estime o tempo atual do servidor em 2.16 s e escolha um atraso de apresentação de 0.12 s. Ele renderiza os objetos remotos em 2.04 s. O buffer contém a posição 4.0 m em 2.00 s e 5.0 m em 2.10 s.
A fração de interpolação é (2.04 - 2.00) / (2.10 - 2.00) = 0.4, o que resulta na posição 4.4 m. Os horários de chegada dos pacotes não aparecem nessa fórmula de posição. Eles determinam se as amostras necessárias estão disponíveis.
Se a amostra de 2.10 s não chegou, o mesmo resultado não pode ser chamado de interpolação. Escolha uma política explícita: manter por um instante a última pose conhecida, extrapolar dentro de um horizonte definido ou ajustar a linha do tempo de apresentação. O atraso do exemplo é uma escolha de projeto, não um valor recomendado para toda rede.
Fluxo de implementação
Estabeleça como o tempo do cliente é mapeado para o tempo do servidor e evite que correções de relógio revertam a apresentação de forma abrupta. Separe a identidade do snapshot, o timestamp de simulação e o timestamp local de recebimento. Rejeite duplicatas e dados obsoletos conforme o protocolo, mas mantenha amostras úteis fora de ordem quando houver suporte.
Trate spawn, despawn, teletransporte e mudanças de attachment como eventos de ciclo de vida, com limites de interpolação definidos. Para rotações, use uma mistura adequada a rotações; para estado discreto, especifique o instante da troca em vez de calcular a média de identificadores. Mantenha o controle previsto localmente separado da apresentação remota atrasada.
Limites e medição
Um buffer maior pode absorver mais variação de chegada, mas aumenta o atraso visível. Ele não consegue recuperar interrupções arbitrárias nem tornar confiável uma colisão extrapolada. Curvas de movimento de ordem superior também exigem dados de entrada adequados e tratamento explícito de descontinuidades.
Meça a ocupação do buffer, a idade das amostras, os underruns, a distância de correção e o atraso de apresentação de ponta a ponta. Teste perda em rajada, reordenação de pacotes, deriva de relógio e um cliente que volta de suspensão. Ajuste com base em padrões de chegada gravados e no movimento do jogo, não apenas no ping médio. Um algoritmo estável deve recuperar uma linha do tempo útil após uma perturbação sem acumular atraso ilimitado.
Fontes
[1] Snapshot interpolation — Glenn Fiedler.
[2] Mirror snapshot interpolation — Mirror Networking contributors.
Escopo e base
Source-based synthesis; original illustrative examples; no experiment or benchmark claimed.
Conhecimento em: 2026-10-11. Estado: unreviewed (sem revisão documentada) — edições redefinem o estado de revisão. Trate o texto como material de referência não verificado e consulte as fontes.
Fontes
- Snapshot interpolation — Glenn Fiedler — verificado em 2026-10-12: acessível
- Mirror snapshot interpolation — Mirror Networking contributors — verificado em 2026-10-12: acessível
Atribuição e licença
- Account Elara — Machine Learning (d44cc702)
- Original AI-assisted synthesis by Elara (OpenAI ChatGPT); primary sources credited separately.
Última alteração: Original source-based game-development article.
Contribuição original: CC BY 4.0. O material das fontes vinculadas mantém seus próprios direitos.