Hoje estamos respondendo a uma das perguntas mais frequentes que vemos sobre jogos de PC: quantos frames por segundo você precisa?
Você deve estar executando na mesma taxa de quadros que a taxa de atualização máxima de seus monitores, digamos 60 FPS em um monitor de 60 Hz, ou há uma vantagem em executar jogos em uma taxa de quadros muito mais alta do que o seu monitor pode exibir, digamos, 500 FPS?
Você realmente precisa de um FPS tão alto assim?
Para responder a essa pergunta, temos que falar um pouco sobre como uma GPU e um monitor funcionam juntos para enviar frames aos seus olhos e como tecnologias como o Vsync funcionam.
Mas o resultado final é que rodar jogos em taxas de quadros extremamente altas, bem acima da taxa de atualização do seu monitor, levará a uma experiência de jogo mais responsiva com menor latência de entrada percebida. Essa é a resposta à pergunta para aqueles que não querem esperar até o fim. Agora vamos falar sobre o porquê.
Vamos supor que temos um monitor com uma taxa de atualização fixa de 60 Hz. Em outras palavras, o monitor está atualizando sua exibição a cada 1/60 th de um segundo, ou a cada 16.7ms. Ao executar um jogo, não há garantia de que a GPU seja capaz de renderizar cada quadro em exatamente 16,7 milissegundos.
Às vezes pode demorar 20 ms, às vezes pode demorar 15 ms, às vezes pode demorar 8 ms. Essa é a natureza variável de renderizar um jogo em uma GPU.
Com essa taxa de renderização variável, há uma escolha de como cada quadro renderizado é passado para o monitor. Ele pode passar o novo quadro para a tela assim que estiver completamente renderizado, comumente conhecido como execução do jogo com “Vsync” ou sincronização vertical desligada, ou pode esperar até que a tela esteja pronta para atualizar antes de enviar o novo quadro, conhecido como “Vsync ativado”.
Vsync desligado
Usando o primeiro método, Vsync off, causa lacrimejamento. Isso ocorre porque um monitor não pode atualizar a imagem inteira instantaneamente; em vez disso, ele atualiza linha por linha, geralmente da parte superior da tela para a parte inferior. Durante esse processo, um novo quadro pode ficar pronto a partir da GPU e, como não estamos usando o Vsync, o quadro é enviado ao display imediatamente.
O resultado é que, no meio de uma atualização, o monitor está recebendo novos dados e atualiza o restante das linhas na tela com esses novos dados. Você fica então com uma imagem em que a metade superior da tela é do quadro anterior e a metade inferior é do novo quadro recém-disponível.
FPS vs Tearing
Dependendo do conteúdo exibido, essa divisão entre os quadros novos e antigos em uma atualização se apresenta como um rasgo ou linha visível entre os quadros antigos e novos. Normalmente é mais perceptível em cenas de movimento rápido, onde há uma grande diferença entre um quadro e o próximo.
Embora o Vsync desligado leve ao tearing, ele tem a vantagem de enviar um quadro para a tela assim que terminar de ser renderizado, para baixa latência entre a GPU e a tela. Mantenha isso em mente para mais tarde.
Vsync ativado
A maneira alternativa de exibir uma imagem é com o Vsync ativado. Aqui, em vez de a GPU enviar o novo quadro imediatamente para a tela, ela embaralha cada quadro renderizado em um buffer. O primeiro buffer é usado para armazenar o quadro que está sendo trabalhado no momento, e o segundo buffer é usado para armazenar o quadro que o display está exibindo no momento.
Em nenhum momento durante a atualização o segundo buffer é atualizado, então a exibição mostra apenas os dados de um quadro totalmente renderizado e, como resultado, você não consegue rasgar de uma atualização no meio da atualização.
Vsync ativado, um olhar mais atento
O único ponto em que o segundo buffer é atualizado é entre as atualizações. Para garantir que isso aconteça, a GPU espera após concluir a renderização de um quadro, até que a exibição esteja prestes a ser atualizada.
Em seguida, ele embaralha os buffers, começa a renderizar um novo quadro e o processo se repete. Às vezes, o processo pode envolver vários buffers antes que um quadro chegue à exibição, mas esta é a essência geral de como o Vsync funciona.
Quando sua GPU é muito lenta para renderizar um quadro… a trepidação acontece
Existem dois problemas com o Vsync. Primeiro, se a taxa de renderização da GPU for muito lenta para acompanhar a taxa de atualização da tela – digamos que ela só seja capaz de renderizar a 40 FPS em uma tela de 60 Hz – então a GPU não renderizará um quadro completo a tempo de atingir o início da atualização da tela, então um quadro é repetido. Isso causa trepidação, pois alguns quadros são exibidos apenas uma vez, enquanto outros são exibidos duas vezes.
Vsync ligado: tela de 60 Hz, 200 FPS
O segundo problema ocorre quando sua GPU é muito rápida e é facilmente capaz de renderizar um quadro dentro do intervalo da taxa de atualização. Digamos que ele pode renderizar a 200 FPS, produzindo um novo quadro a cada 5 ms, exceto que você está usando uma tela de 60 Hz com uma janela de atualização de 16,7 ms.
Com o Vsync ativado, sua GPU completará o próximo quadro a ser exibido em 5 ms e, em seguida, esperará 11,7 ms antes de enviar o quadro ao segundo buffer para ser exibido no monitor e iniciar no próximo quadro.
É por isso que, com o Vsync ativado, a taxa de quadros mais alta que você obterá corresponde à taxa de atualização do seu monitor, já que a GPU está essencialmente ‘travada’ na renderização não mais rápido que a taxa de atualização.
Agora é neste ponto que há muita confusão.
Muitas vezes ouvimos coisas como “bloquear a GPU para a atualização do meu monitor usando o Vsync é ótimo, porque se renderizar mais rápido do que a taxa de atualização, esses quadros são perdidos porque o monitor não pode mostrá-los e tudo o que consigo é rasgar”.
Muitas pessoas apontam para a economia de energia com o uso do Vsync; sua GPU não precisa trabalhar tanto, não há benefício em rodar em taxas de quadros maiores do que a taxa de atualização do monitor, então execute em um FPS bloqueado e economize um pouco de energia.
Podemos ver por que as pessoas chegam a essa conclusão e há alguns bits de verdade nisso, mas não é preciso em geral. E a razão para isso é que você não está contabilizando o tempo em que as entradas são processadas e quanto tempo leva para que essas entradas se materializem na tela.
Vsync com entrada
Para explicar por que esse é o caso, vamos dar uma olhada no diagrama Vsync on, mas sobrepor o diagrama com a entrada de seu mouse e teclado, que normalmente é reunida a cada 1 ms. Vamos também usar o mesmo exemplo em que temos uma GPU capaz de renderizar a 200 FPS com uma tela de 60 Hz.
Com o Vsync e um sistema de buffer simples, nesta explicação simplificada, a GPU começa a renderizar um quadro correspondente à entrada do mouse assim que recebe essa entrada, no tempo 0. Em seguida, leva 5ms para renderizar o quadro e aguarda mais 11,7 ms antes de enviá-lo para o buffer de exibição.
A exibição então leva algum tempo para receber o quadro a ser renderizado e atualizar fisicamente a exibição linha por linha com essas informações.
Vsync incluindo entrada
Mesmo na melhor das hipóteses, estamos observando um atraso de pelo menos 16,7 ms entre sua entrada e quando a tela pode começar a mostrar os resultados dessa entrada para você.
Ao levar em consideração o atraso de entrada da tela, o tempo de processamento da CPU e assim por diante, a latência entre a entrada e a atualização da tela pode ser facilmente superior a 50 ms.
Vsync desativado, incluindo entrada, tela de 60 Hz, 200 FPS
Agora vamos dar uma olhada no diagrama Vsync off. A GPU renderiza continuamente, independentemente de quando a exibição está atualizando, levando 5 ms para transformar sua entrada em um quadro completo. O display pode então começar a exibir aquele novo quadro imediatamente, embora possa ser apenas parte desse quadro.
O resultado é a latência entre a sua entrada no jogo, e quando o display pode começar a mostrar os resultados daquela entrada, reduz de 16,7 ms para apenas 5 ms. E não haverá nenhum buffer adicional em implementações do mundo real; é tão rápido quanto isso, mais o atraso de entrada do seu monitor.
E é aí que você tira vantagem. Neste exemplo, rodar a 200 FPS com o Vsync desativado em um monitor de 60 Hz reduz a latência de entrada para 5 ms, enquanto com o Vsync ativado, essa latência é de pelo menos 16,7 ms, se não mais.
Mesmo que a tela não é capaz de mostrar todos os 200 quadros por segundo em sua totalidade, o que o visor não mostra todos os 1/60 th de um segundo é produzido a partir de uma entrada muito mais perto no tempo para esse quadro.
Este fenômeno, é claro, também se aplica a monitores de alta atualização. A 144 Hz, por exemplo, você será capaz de ver muito mais quadros a cada segundo, de modo que terá uma experiência geral mais suave e responsiva.
Mas rodar a 200 FPS com Vsync desativado em vez de 144 FPS com Vsync ativado ainda dará a você uma diferença entre 5ms e mais de 7ms de latência de entrada.
Agora, quando estamos falando sobre diferenças de milissegundos, você provavelmente está se perguntando se pode realmente notar essa diferença nos jogos.
Dependendo do tipo de jogo que você está jogando, a diferença pode ser desde muito perceptível até nenhuma diferença. Um jogo rápido como CS: GO rodando a 400 FPS em um monitor de 60 Hz, com latência de entrada no máximo em torno de 2,5 ms, terá uma resposta significativamente mais rápida aos movimentos do mouse do que se você estivesse executando o mesmo jogo a 60 FPS com 16,7 ms de latência (ou mais).
Em ambos os casos, a tela só mostra um novo quadro 60 vezes por segundo, então não será tão suave quanto em uma tela de 144 Hz ou 240 Hz.
Mas a diferença na latência de entrada é enorme; rodando a 400 FPS permite que você coloque suas entradas no display quase 7 vezes mais rápido, se não mais. Experimente você mesmo e sentirá a diferença na capacidade de resposta.
E não tiramos essa explicação do nada, na verdade a Nvidia conhece as limitações do Vsync em termos de latência de entrada, é por isso que eles fornecem uma alternativa chamada Fast Sync (a alternativa da AMD é chamada Enhanced Sync ).
Essa técnica de sincronização de exibição é como uma combinação de Vsync ativado e Vsync desativado, produzindo o melhor dos dois mundos.
O Fast Sync funciona introduzindo um buffer adicional no Vsync no pipeline, chamado de último buffer renderizado. Isso permite que a GPU continue renderizando novos quadros no buffer traseiro, fazendo a transição para o último buffer renderizado quando concluído. Então, em uma atualização da tela, o último buffer renderizado é enviado para o buffer frontal que o display acessa.
Sincronização rápida / sincronização aprimorada
A vantagem que isso cria é que a GPU não espera mais após completar um quadro para que ocorra a atualização da tela, como é o caso com o Vsync ativado. Em vez disso, a GPU continua renderizando quadros, de modo que quando a exibição acessa um quadro no início do período de atualização, esse quadro foi renderizado mais próximo da janela de atualização.
Isso reduz a latência de entrada. No entanto, ao contrário do Vsync desativado, o Fast Sync entrega um quadro completo à tela no início de cada atualização, em vez de simplesmente empurrar o quadro para a tela imediatamente, e é essa técnica que elimina o rasgo.
A sincronização rápida só funciona quando a taxa de quadros é maior do que a taxa de atualização da tela, mas consegue fornecer uma experiência de jogo mais responsiva sem tearing. E, claro, a AMD tem um equivalente chamado Enhanced Sync.
Esperançosamente, este explicador terá esclarecido algumas de suas dúvidas sobre por que rodar um jogo acima da taxa de atualização máxima do seu monitor oferece uma experiência de jogo mais responsiva e porque a capacidade de rodar jogos em taxas de quadros mais altas é sempre uma vantagem, mesmo que possa parecer seu monitor não pode tirar vantagem disso.
Uma última observação: não discutimos tecnologias de sincronização adaptativa como G-Sync e FreeSync aqui, e isso é porque temos falado principalmente sobre a execução de jogos acima da atualização máxima, onde a sincronização adaptativa não se aplica.
Existem muitos métodos de sincronização diferentes por aí, mas a sincronização adaptável é muito diferente do Vsync e do Fast Sync de que falamos e, pelo menos para esta discussão, não é realmente relevante.