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

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

V-Sync e fila de renderização V-Sync, render queue

ID da causa cg-vsync · Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento) · Também envolvidos Externo (Externo)

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

O input lag aumenta enquanto alguns frames já desenhados pela GPU ficam em uma fila, esperando o ciclo do monitor para serem exibidos.

Por quê O driver de vídeo acumula antecipadamente de 1 a 3 frames na fila → Efeito O comando leva esse tempo a mais para aparecer na tela → Na tela Ping baixo, mas o controle fica pesado e lento

Sintomas
Input lag, Engasgos
Fatores
Latência
Quem é afetado
Só eu
Quando
Sempre
Responsável
Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento) · Também envolvidos Externo (Externo)
O que fazer (Equipe de desenvolvimento)
Oferecer modo de baixa latência, reduzir a fila de frames, oferecer opção de limite de FPS um pouco abaixo da taxa de atualização, ativar o frame pacing no celular.
O que fazer (Externo)
Orientar os jogadores a usar monitor com taxa de atualização variável e limite de FPS um pouco abaixo da taxa de atualização, e a ativar o modo de baixa latência do driver de vídeo.
Números de referência
A 60 Hz, cada frame vale 16,7 ms. Se a CPU for mais rápida que a GPU ou que o ciclo da tela e a fila de três frames (padrão do DirectX 11) encher, somam-se 50 ms. Com V-Sync de buffer duplo, um frame que levou 17 ms espera a próxima atualização da tela (33,3 ms), e nesse meio-tempo o frame anterior aparece mais uma vez.
No gráfico
Sempre alto desde o início · Latência do input até a tela
Onde olhar
Comparar no PresentMon MsClickToPhotonLatency e MsAllInputToPhotonLatency (do input de mouse e teclado até o envio para a tela) e DisplayLatency, alternando V-Sync, modo de baixa latência e limite de FPS. MsPCLatency (do momento em que o PC recebe o input até o envio para a tela) só é registrado quando o jogo emite eventos de PC Latency
Confirma se
Com V-Sync ligado ou sem limite de FPS, essa latência aumenta em um ou dois frames (dezenas de ms) e diminui com o modo de baixa latência ou com limite de FPS um pouco abaixo da taxa de atualização. O ping não muda
Descarta se
Latência dentro do PC baixa, mas comandos ainda lentos: “Latência da tela, do dispositivo de entrada e da geração de frames”. Ping alto: aponta para a rede
Como verificar
Verificação no ambiente do jogador
Saiba mais
O V-Sync (sincronização vertical) é a configuração que só envia um frame novo no instante em que o monitor troca a imagem. O tearing some, mas os comandos atrasam pelo tempo de espera desse instante e, quando o FPS cai abaixo de 60, ele alterna entre 60 e 30 e a imagem engasga. Monitores com taxa de atualização variável trocam a imagem quando o frame fica pronto e reduzem essa espera. O mesmo acontece no celular. Se um jogo de 30 FPS não consegue entregar os frames de forma regular a uma tela de 60 Hz, a média fica em 30 FPS, mas cada frame fica na tela por tempos irregulares, como 49 ms, 16 ms e 33 ms, e a imagem engasga (exemplo da documentação para desenvolvedores Android). A biblioteca de frame pacing do Android (que regulariza o intervalo de saída dos frames), ou a opção equivalente da engine, reduz o problema.

Fontes

  1. IDXGIDevice1::SetMaximumFrameLatency Microsoft
    Número padrão de frames que o driver pode acumular na fila: 3 (de 1 a 16)
  2. Reduce latency with DXGI 1.3 swap chains Microsoft
    O Present fica bloqueado até a fila esvaziar, então, depois de desenhado, o frame espera quase um frame inteiro a mais até ser exibido; uma swap chain com espera (waitable) reduz isso
  3. Frame Pacing library Android (Google)
    Em uma tela de 60 Hz, sem frame novo, o anterior é exibido de novo; exemplo de um jogo de 30 FPS com frame times irregulares de 49 ms, 16 ms e 33 ms
  4. PresentMon Capture Application (README-CaptureApplication.md) Intel
    MsPCLatency (do momento em que o PC recebe o input até o envio para a tela), MsClickToPhotonLatency (do clique do mouse até a tela), MsAllInputToPhotonLatency (do input de teclado ou mouse até a tela), DisplayLatency (do envio do frame até a saída para o monitor)
  5. PresentMon Console Application (README-ConsoleApplication.md) Intel
    MsPCLatency só é registrado se o app emitir eventos de PC Latency (--track_pc_latency); MsAllInputToPhotonLatency considera o input de teclado e mouse

Veja também

Mesma camada: L1 Processo do jogo no cliente

Mesmo sintoma (Input lag) em outras camadas

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