O documento discute técnicas para reduzir a latência em jogos online, incluindo terminal burro, interpolação no cliente, predição no cliente, dead reckoning e rewind do servidor. A chave é sincronizar o estado entre cliente e servidor usando interpolação, predição e simulação para que os jogadores vejam os eventos o mais próximo possível do tempo real, apesar da latência na rede.
Instruções para utilizar a ferramenta de anotações de emoções em Tweets, desenvolvida como parte do trabalho de doutorado em Ciência da Computação de Fernando Vieira da Silva
A presentation about my PhD thesis current status I've presented at the WTD (Workshop on PhD and MSc thesis, and scientific initiation) at the Institute of Computing of the University of Campinas, Brazil.
Identifying Emotions in Tweets for Brazilian Stock Market Prediction (WTD Pre...Fernando Vieira da Silva
A presentation about my PhD thesis current status I've presented at the WTD (Workshop on PhD and MSc thesis, and scientific initiation) at the Institute of Computing of the University of Campinas, Brazil.
Apresentação com o material da palestra com dicas de otimização em linguagem C, que apresentei no 11° Encontro C/C++ Brasil e na 22° Semana da Engenharia da Facens.
Instruções para utilizar a ferramenta de anotações de emoções em Tweets, desenvolvida como parte do trabalho de doutorado em Ciência da Computação de Fernando Vieira da Silva
A presentation about my PhD thesis current status I've presented at the WTD (Workshop on PhD and MSc thesis, and scientific initiation) at the Institute of Computing of the University of Campinas, Brazil.
Identifying Emotions in Tweets for Brazilian Stock Market Prediction (WTD Pre...Fernando Vieira da Silva
A presentation about my PhD thesis current status I've presented at the WTD (Workshop on PhD and MSc thesis, and scientific initiation) at the Institute of Computing of the University of Campinas, Brazil.
Apresentação com o material da palestra com dicas de otimização em linguagem C, que apresentei no 11° Encontro C/C++ Brasil e na 22° Semana da Engenharia da Facens.
2. Terminal Burro
● A verdadeira simulação está
no servidor, e sempre ½ RTT
à frente
● Quake e outros jogos da
época enviavam informações
para o servidor, que
processava e retornava o
resultado, que era exibido
● Essa técnica conhecida
como terminal burro é um
algoritmo conservador, mas
a latência pode ser
perceptível
3. Interpolação no Cliente
● Não altera a posição do
personagem
automaticamente quando
recebe do servidor
● Ajusta (aka. Interpola) para
a posição atual do servidor
usando um filtro de
percepção local
● Interpolation Period deve
ser maior que o packet
period, para que o novo
estado chegue assim que a
interpolação terminar
4. Interpolação no Cliente
● Latência é de aprox. ½ RTT
+ Interpolation Period
● Logo: para reduzir latência,
IP deve ser o mínimo possível
● Logo: IP deve ser igual a
PP
● O servidor pode avisar o PP
ao cliente, ou o cliente pode
calcular usando o RTT.
● Também é um algoritmo
conservador
5. Predição no Cliente
● Servidor está sempre ½ RTT à frente do cliente
● Para exibir um estado mais atual, o cliente precisa trocar a interporlação
pela extrapolação (aka. previsão)
● Cliente pode sempre simular outro ½ RTT e exibir o resultado
6. Predição no Cliente
● Primeiro o cliente precisa calcular o RTT
● Obs: os relógios do cliente e servidor não estão necessariamente
sincronizados
● O cliente envia o pacote e conta o tempo até a resposta
7. Dead Reckoning
● Se o cliente tem uma cópia do código do servidor, pode simular o
comportamento de objetos determinísticos (ex: balas, inimigos, etc)
● Mas há um tipo de objeto totalmente não-determinístico: jogadores
humanos
8. Dead Reckoning
● O que fazer?
● Tentar adivinhar o que vai acontecer, e corrigir se estiver errado
● Esse processo é chamado de Dead Reckoning
● Trata-se de um algoritmo otimista
● Exemplo: RTT = 100ms. Aos 184ms, o cliente recebe a informação que o
servidor está em Pos (134,0) e Vel (0,1), refaz a simulação e descobre a Pos
(134, 50) e Vel(0,1)
9. O que fazer se a simulação errar?
● Atualização instantânea: apenas alterar a posição do objeto (o jogador
pode perceber o objeto “saltando”)
● Interpolação: ajustar a posição do jogador “suavemente” aos poucos
● Ajuste de estados de segunda ordem: Se a velocidade do objeto se
alterar, por exemplo, pode-se alterar a aceleração aos poucos até atingir a
velocidade desejada.
10. Previsão de Movimento de Client, e
Replay
● Dead Reckoning não resolve para o jogador local…
● Após pressionar um botão, ainda precisa enviar os dados para o servidor,
que processa e retorna, para então concretizar o movimento...
11. Previsão de Movimento de Client, e
Replay
● Solução: O client simula os movimentos do jogador local sem esperar o
retorno do servidor
● Quando o servidor recebe, também simula e atualiza o estado do cliente
12. Previsão de Movimento de Client, e
Replay
● Solução: O client simula os movimentos do jogador local sem esperar o
retorno do servidor
● Quando o servidor recebe, também simula e atualiza o estado do cliente
Se outro jogador colidir com o jogador local e o servidor
retornar uma posição diferente
Como o cliente pode ajustar a posição do jogador local
quando receber essa nova informação do servidor?
13. Previsão de Movimento de Client, e
Replay
● Problema: Se o servidor retornar uma nova posição para o jogador local,
INTERPOLAÇÃO NO CLIENTE NÃO FUNCIONA! (pareceria que o jogador
“perdeu o controle” de seu personagem)
● Também não dá para ignorar a resposta do Servidor…
● Solução: Ao receber a posição do servidor (que estará ½ RTT atrasada), o
cliente usa as informações REAIS do jogador local no último ½ RTT e obtem
a nova posição do jogador.
14. Truques para esconder latência
● Problema: Quando um jogador atira/usa algum poder, espera-se ver o
resultado imediatamente
● Solução: Jogos usam animações antes do golpe, que duram 1 RTT.
● Enquando a animação é exibida, a informação é enviada para o servidor,
que retorna a resposta
● Dead Reckoning avança o projétil ½ RTT à frente, e parece não haver
latência.
15. Server rewind
● Problema: Os truques para esconder latência não resolvem para armas de
longo alcance e instant-hit (ex: sniper)
● Solução Valve Source Engine: Fazer com que o servidor VOLTE ao
estado em que estava quando o jogador mirou e atirou (½ RTT atrás)
● Efeito colateral: o oponente pode ser atingido, mesmo que pense que está
protegido, se o atirador tiver muito lag
16. Ajustes para Server rewind
● Use interpolação no cliente, sem dead reckoning para jogadores
remotos: O servidor precisa saber o que o cliente está vendo, então o client
não pode fazer previsões
● Use previsão de movimento de client e replay: Apesar de não poder
prever o jogador remoto, deve-se manter para o jogador local, para evitar
percepção de latência
● Registre a visão do cliente em cada pacote enviado para o servidor:
Envie o ID dos frames que estão sendo interpolados e o percentual de
interpolação, para que o servidor saiba exatamente o que está sendo visto
pelo cliente
● No servidor, armazene os estados dos objetos relevantes dos últimos
frames: Quando um pacote chega do cliente, é necessário alterar os objetos
relevantes para os estados anteriores (momento que o cliente atirou),
usando interpolação