VSync — o que é, princípio de funcionamento e configuração

Autor: IT Sectr Publicado: 2026-04-01 Tempo de leitura: 8 min

VSync (Vertical Synchronization) é uma tecnologia que sincroniza a saída de cada novo quadro da GPU com a taxa de atualização do display, eliminando rasgos de imagem. De acordo com Apple Metal Documentation, a sincronização com VBlank é obrigatória para renderização suave em dispositivos móveis. Screen tearing ocorre quando um quadro é atualizado durante a varredura vertical, e o VSync impede essa mistura.

Pontos principais

  • VSync é um mecanismo de sincronização GPU-display que aguarda o VBlank
  • Screen tearing é uma divisão visível da imagem quando o quadro muda no meio da varredura
  • Double buffering é o principal método de implementação do VSync com front buffer e back buffer
  • Input lag é um efeito colateral do VSync, aumentando o atraso entre a ação do usuário e a exibição
  • Sincronização adaptativa é uma alternativa moderna ao VSync que elimina suas desvantagens

O que é VSync

VSync (Vertical Synchronization) é um mecanismo hardware-software que força a GPU a aguardar o sinal de blanking vertical (VBlank) antes de exibir um novo quadro. Sem VSync, a GPU pode enviar quadros a qualquer momento, mesmo quando o display está no meio da renderização do quadro atual, causando rasgo de imagem ao longo de uma linha horizontal.

Em dispositivos móveis, o VSync é implementado no nível do driver gráfico e do sistema operacional. O iOS usa sincronização VBlank através do Metal, o Android através do SurfaceFlinger e BufferQueue. Com a sincronização vertical ativada, o FPS da aplicação não pode exceder a taxa de atualização do display — 60, 90 ou 120 Hz dependendo do modelo do dispositivo.

O termo sincronização vertical origina-se do princípio de funcionamento dos monitores CRT, onde um feixe de elétrons desenhava a imagem linha por linha de cima para baixo. Após completar um quadro, o feixe retornava ao canto superior esquerdo — este momento era chamado de blanking vertical. Os modernos displays LCD e OLED mantiveram este termo, embora fisicamente funcionem de forma diferente.

Como funciona a sincronização vertical

A GPU renderiza quadros no back buffer, enquanto o display lê do front buffer. O VSync garante que a troca de buffers ocorra apenas durante o VBlank — quando o display terminou de mostrar o quadro atual e está pronto para o próximo. Este mecanismo é chamado de double buffering com sincronização VBlank.

Mecanismo de double buffering

O double buffering usa dois buffers: um front buffer exibido na tela e um back buffer no qual a GPU escreve o quadro atual. Quando o quadro está pronto, os buffers são trocados. Com o VSync ativado, esta troca é adiada até o VBlank mais próximo. A GPU fica ociosa se o quadro estiver pronto antes do VBlank, reduzindo o desempenho mas eliminando o tearing.

cpp
// OpenGL — ativação de VSync via WGL_EXT_swap_control
HDC hdc = wglGetCurrentDC();
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT =
    reinterpret_cast<PFNWGLSWAPINTERVALEXTPROC>(
        wglGetProcAddress("wglSwapIntervalEXT"));
wglSwapIntervalEXT(1); // 1 = VSync ativado, 0 = desativado

Tempo de espera VBlank

VBlank é um curto intervalo entre a última linha do quadro atual e a primeira linha do próximo quadro. Durante este momento, o display não atualiza pixels e a troca de buffers ocorre sem artefatos. A duração do VBlank depende da taxa de atualização: a 60 Hz em um display 1080p, o VBlank dura aproximadamente 1.4 ms. Se a GPU não concluir a renderização antes do VBlank, o quadro é pulado e o display mostra o quadro anterior por mais um ciclo — isto é percebido como gaguejo.

O triple buffering resolve o problema de ociosidade da GPU adicionando um terceiro buffer. A GPU pode começar a renderizar o próximo quadro imediatamente, mesmo que um dos back buffers esteja aguardando VBlank. Isso aumenta o FPS com VSync mas adiciona um quadro extra de latência. Em dispositivos móveis, o triple buffering é usado em alguns motores de jogo e no Vulkan através do modo Mailbox.

Principais problemas sem VSync

VSync desativado fornece máximo FPS e mínimo input lag, mas ao custo de artefatos visuais. Para jogos móveis e aplicações com animação suave, a escolha entre VSync e sua desativação é um compromisso entre clareza de imagem e responsividade do controle.

Rasgo de tela (Screen Tearing)

Screen tearing é uma divisão horizontal onde a parte superior da tela mostra o quadro anterior e a parte inferior já mostra o próximo. Isso ocorre quando a GPU troca buffers durante a varredura. Em dispositivos móveis, o tearing é especialmente notável durante rolagem rápida ou em cenas dinâmicas com altas taxas de quadros. Telas OLED com sua resposta instantânea tornam o tearing mais contrastado em comparação com LCD.

A intensidade do tearing depende da relação entre FPS e taxa de atualização. A 60 FPS em um display de 60 Hz, o tearing aparece como uma única linha estática, enquanto a 300 FPS em 60 Hz aparecem múltiplos rasgos ondulados que se movem de cima para baixo. Quanto maior o FPS em relação à taxa de atualização, mais rasgos e mais visíveis eles se tornam.

Latência de entrada (Input Lag)

O input lag com VSync é o atraso entre pressionar um botão e ver o resultado na tela. A sincronização vertical adiciona em média um quadro de latência (16.7 ms a 60 Hz), e com triple buffering — até dois quadros. Para aplicações casuais, este atraso é imperceptível, mas para shooters, jogos de luta e jogos rítmicos, é crítico: profissionais notam atrasos de até 8 ms.

De acordo com pesquisa da NVIDIA (2024), o input lag médio em CS:GO a 60 FPS sem VSync é de 22 ms, e com VSync — 39 ms. A 144 FPS, a diferença se reduz para 14 vs 18 ms respectivamente. Em plataformas móveis, o input lag do VSync é menos crítico devido à entrada por toque, onde a latência de hardware da tela sensível ao toque (10–30 ms) mascara o atraso adicional da sincronização.

Configuração do VSync no desenvolvimento móvel

No desenvolvimento móvel, o VSync é controlado através de APIs gráficas, motores de jogo e configurações do sistema operacional. O iOS oferece menos controle, o Android oferece mais através do Vulkan e OpenGL ES. A escolha do modo depende do tipo de aplicação: jogos, UI ou vídeo.

VSync no Unity e Unreal Engine

Unity usa a configuração QualitySettings.vSyncCount: 0 — desativado, 1 — VSync a cada VBlank, 2 — a cada segundo VBlank (FPS reduzido à metade). No Unreal Engine, o VSync é controlado através do comando de console r.VSync e DefaultEngine.ini. Para compilações móveis, recomenda-se desativar o VSync no Unity e usar um limitador de FPS personalizado, pois o VSync embutido no Android SurfaceFlinger pode criar atrasos imprevisíveis.

csharp
// Unity — controle de VSync e FPS
void Awake()
{
    // 0 = VSync desativado, 1 = VSync ativado
    QualitySettings.vSyncCount = 0;
    // Limitador de FPS personalizado em vez de VSync
    Application.targetFrameRate = 60;
}

VSync no Vulkan e Metal

Vulkan fornece controle total através de VkSwapchainPresentInfo e presentMode: VK_PRESENT_MODE_FIFO_KHR — VSync clássico, VK_PRESENT_MODE_MAILBOX_KHR — triple buffering sem espera, VK_PRESENT_MODE_IMMEDIATE_KHR — sem sincronização. Metal no iOS controla o VSync através de CAMetalLayer.displaySyncEnabled. A partir do iOS 14, a Apple recomenda usar displaySyncEnabled = true por padrão para todas as aplicações, exceto jogos de controle arcade.

ModoDescriçãoLatência
FIFOVSync clássico com espera VBlank1 quadro
MailboxTriple buffering, descartando quadros antigos1–2 quadros
ImmediateSem sincronização, máximo FPS0 quadros

Limitação de FPS sem VSync

Um limitador de FPS é uma alternativa ao VSync onde a aplicação limita a taxa de quadros programaticamente sem aguardar o VBlank. Esta abordagem fornece latência previsível e não depende da taxa de atualização do display. No Android, a limitação de FPS é implementada através do Choreographer, no iOS — através do CADisplayLink com controle manual do tempo de saída.

VSync e tecnologias modernas de sincronização

O VSync tradicional tem uma desvantagem fundamental: está vinculado a uma taxa de atualização fixa do display. Se a GPU produzir 45 FPS em um display de 60 Hz, o VSync não pode mostrar 45 quadros — ele mostra 30 (pulando cada segundo VBlank) ou alterna entre 60 e 30 com intervalos irregulares. Isso cria gaguejo, que estraga a experiência de jogo mais do que o tearing.

Adaptive Sync (FreeSync, G-Sync, Apple ProMotion) resolve este problema alterando dinamicamente a taxa de atualização do display de acordo com o FPS da aplicação. Se a aplicação produzir 47 FPS, o display muda para 47 Hz — cada quadro é exibido exatamente uma vez, sem rasgos ou gaguejo. O ProMotion no iOS seleciona automaticamente uma frequência de 24 a 120 Hz, equilibrando suavidade e consumo de energia.

Em dispositivos móveis, o Adaptive Sync está se tornando padrão: iPad Pro (2017+) com ProMotion, flagships Android com telas LTPO (Samsung Galaxy S23 Ultra, Google Pixel 8 Pro) suportam taxa de atualização dinâmica de 1 a 120 Hz. Para o desenvolvedor, isso significa que o VSync no sentido tradicional é substituído pelo gerenciamento do sistema — basta definir targetFrameRate, e o próprio SO ajusta a taxa de atualização para o equilíbrio ideal entre suavidade e duração da bateria.

Perguntas frequentes

Devo sempre ativar o VSync em jogos móveis?

Não. Para jogos dinâmicos (shooters, jogos de luta), o VSync aumenta o input lag sem benefício significativo — o tearing em telas OLED móveis é menos perceptível devido ao pequeno tamanho do display. Para jogos casuais e interfaces de usuário, o VSync melhora a percepção de suavidade.

Como o VSync afeta a bateria do dispositivo móvel?

O VSync reduz o consumo de energia porque a GPU não renderiza quadros desnecessários. Com o VSync desativado, a GPU opera na frequência máxima, e cada quadro não exibido desperdiça energia e aquece o dispositivo sem benefício para o usuário.

Qual a diferença entre VSync e um limitador de FPS?

O VSync sincroniza a saída de quadros com o VBlank do display, enquanto um limitador de FPS simplesmente limita a frequência de renderização no código da aplicação. O limitador de FPS não elimina o tearing, mas fornece latência previsível sem estar vinculado à taxa de atualização da tela.

Por que o FPS pode cair pela metade com o VSync ativado?

Quando a GPU não conclui um quadro antes do VBlank, o VBlank é pulado e o quadro é exibido por dois ciclos de atualização. A 60 Hz, isso resulta em 30 FPS. O triple buffering mitiga este efeito permitindo que a GPU comece o próximo quadro sem esperar.

O iOS e o Android suportam Adaptive Sync?

Sim. O iOS ProMotion (iPad Pro, iPhone 13 Pro+) suporta frequência dinâmica de 24–120 Hz. O Android através de painéis LTPO suporta 1–120 Hz. O desenvolvedor não precisa gerenciar isso manualmente — o sistema seleciona a frequência ideal automaticamente.

Resumo

  • VSync é um mecanismo de sincronização GPU-display que elimina o screen tearing
  • Double buffering com espera VBlank é a implementação clássica da sincronização vertical
  • Screen tearing é o principal problema do VSync desativado, especialmente notável em FPS alto
  • Input lag é o preço do VSync, adicionando um a dois quadros de atraso
  • Triple buffering reduz o gaguejo mas aumenta o input lag
  • Adaptive Sync (ProMotion, LTPO) é um substituto moderno para o VSync com taxa dinâmica
  • Para jogos móveis, use um limitador de FPS em vez de VSync para latência previsível

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também