VSync — che cos'è, principio di funzionamento e configurazione

Autore: IT Sectr Pubblicato: 2026-04-01 Tempo di lettura: 8 min

VSync (Vertical Synchronization) è una tecnologia che sincronizza l'uscita di ogni nuovo frame della GPU con la frequenza di aggiornamento del display, eliminando lo screen tearing. Secondo Apple Metal Documentation, la sincronizzazione con VBlank è obbligatoria per un rendering fluido sui dispositivi mobili. Screen tearing si verifica quando un frame viene aggiornato durante la scansione verticale e VSync impedisce questa mescolanza.

Punti chiave

  • VSync è un meccanismo di sincronizzazione GPU-display che attende VBlank
  • Screen tearing è una divisione visibile dell'immagine quando il frame cambia a metà scansione
  • Doppio buffer è il metodo principale di implementazione di VSync con front buffer e back buffer
  • Input lag è un effetto collaterale di VSync, che aumenta il ritardo tra azione dell'utente e visualizzazione
  • Sincronizzazione adattiva è un'alternativa moderna a VSync che ne elimina gli svantaggi

Cos'è VSync

VSync (Vertical Synchronization) è un meccanismo hardware-software che costringe la GPU ad attendere il segnale di blanking verticale (VBlank) prima di visualizzare un nuovo frame. Senza VSync, la GPU può inviare frame in qualsiasi momento, anche quando il display è nel mezzo del disegno del frame corrente, causando screen tearing lungo una linea orizzontale.

Su dispositivi mobili, VSync è implementato a livello di driver grafico e sistema operativo. iOS utilizza la sincronizzazione VBlank tramite Metal, Android tramite SurfaceFlinger e BufferQueue. Con la sincronizzazione verticale attivata, gli FPS dell'applicazione non possono superare la frequenza di aggiornamento del display — 60, 90 o 120 Hz a seconda del modello del dispositivo.

Il termine sincronizzazione verticale deriva dal principio di funzionamento dei monitor CRT, dove un fascio di elettroni disegnava l'immagine riga per riga dall'alto verso il basso. Dopo aver completato un frame, il fascio tornava all'angolo superiore sinistro — questo momento era chiamato blanking verticale. I moderni display LCD e OLED hanno mantenuto questo termine, sebbene fisicamente funzionino diversamente.

Come funziona la sincronizzazione verticale

La GPU renderizza i frame nel back buffer, mentre il display legge dal front buffer. VSync garantisce che lo scambio di buffer avvenga solo durante VBlank — quando il display ha terminato di mostrare il frame corrente ed è pronto per il successivo. Questo meccanismo è chiamato doppio buffer con sincronizzazione VBlank.

Meccanismo del doppio buffer

Il doppio buffer utilizza due buffer: un front buffer visualizzato sullo schermo e un back buffer in cui la GPU scrive il frame corrente. Quando il frame è pronto, i buffer vengono scambiati. Con VSync attivato, questo scambio viene posticipato fino al VBlank più vicino. La GPU rimane inattiva se il frame è pronto prima di VBlank, riducendo le prestazioni ma eliminando lo screen tearing.

cpp
// OpenGL — attivazione VSync tramite WGL_EXT_swap_control
HDC hdc = wglGetCurrentDC();
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT =
    reinterpret_cast<PFNWGLSWAPINTERVALEXTPROC>(
        wglGetProcAddress("wglSwapIntervalEXT"));
wglSwapIntervalEXT(1); // 1 = VSync attivato, 0 = disattivato

Tempo di attesa VBlank

VBlank è un breve intervallo tra l'ultima riga del frame corrente e la prima riga del frame successivo. In questo momento, il display non aggiorna i pixel e lo scambio di buffer avviene senza artefatti. La durata di VBlank dipende dalla frequenza di aggiornamento: a 60 Hz su un display 1080p, VBlank dura circa 1,4 ms. Se la GPU non completa il rendering prima di VBlank, il frame viene saltato e il display mostra il frame precedente per un altro ciclo — questo viene percepito come stuttering.

Il triplo buffer risolve il problema di inattività della GPU aggiungendo un terzo buffer. La GPU può iniziare immediatamente a renderizzare il frame successivo anche se uno dei back buffer è in attesa di VBlank. Questo aumenta gli FPS con VSync ma aggiunge un frame extra di latenza. Sui dispositivi mobili, il triplo buffer è utilizzato in alcuni motori di gioco e in Vulkan tramite la modalità Mailbox.

Principali problemi senza VSync

VSync disattivato fornisce FPS massimi e input lag minimo, ma a costo di artefatti visivi. Per i giochi mobili e le applicazioni con animazioni fluide, la scelta tra VSync e la sua disattivazione è un compromesso tra nitidezza dell'immagine e reattività dei comandi.

Screen Tearing

Screen tearing è una divisione orizzontale in cui la parte superiore dello schermo mostra il frame precedente e la parte inferiore mostra già il frame successivo. Ciò si verifica quando la GPU scambia i buffer a metà della scansione. Sui dispositivi mobili, lo screen tearing è particolarmente evidente durante lo scorrimento rapido o in scene dinamiche con frequenze di frame elevate. I display OLED con la loro risposta istantanea rendono lo screen tearing più contrastato rispetto agli LCD.

L'intensità dello screen tearing dipende dal rapporto tra FPS e frequenza di aggiornamento. A 60 FPS su un display a 60 Hz, lo screen tearing appare come una singola linea statica, mentre a 300 FPS su 60 Hz appare come multiple lacerazioni ondulate che si muovono dall'alto verso il basso. Più alto è l'FPS rispetto alla frequenza di aggiornamento, più lacerazioni e più sono evidenti.

Input Lag

L'input lag con VSync è il ritardo tra la pressione di un pulsante e la visualizzazione del risultato sullo schermo. La sincronizzazione verticale aggiunge in media un frame di latenza (16,7 ms a 60 Hz) e con il triplo buffer — fino a due frame. Per le applicazioni casual, questo ritardo è impercettibile, ma per sparatutto, giochi di combattimento e giochi ritmici è critico: i professionisti notano ritardi anche di 8 ms.

Secondo una ricerca di NVIDIA (2024), l'input lag medio in CS:GO a 60 FPS senza VSync è di 22 ms e con VSync — 39 ms. A 144 FPS, la differenza si riduce a 14 contro 18 ms rispettivamente. Sulle piattaforme mobili, l'input lag di VSync è meno critico a causa dell'input tattile, dove la latenza hardware del touchscreen (10–30 ms) maschera il ritardo aggiuntivo di sincronizzazione.

Configurazione di VSync nello sviluppo mobile

Nello sviluppo mobile, VSync è controllato tramite API grafiche, motori di gioco e impostazioni di sistema del OS. iOS offre meno controllo, Android ne offre di più tramite Vulkan e OpenGL ES. La scelta della modalità dipende dal tipo di applicazione: giochi, UI o video.

VSync in Unity e Unreal Engine

Unity utilizza l'impostazione QualitySettings.vSyncCount: 0 — disattivato, 1 — VSync a ogni VBlank, 2 — a ogni secondo VBlank (FPS dimezzati). In Unreal Engine, VSync è controllato tramite il comando console r.VSync e DefaultEngine.ini. Per le build mobili, si consiglia di disattivare VSync in Unity e utilizzare un limitatore di FPS personalizzato, poiché il VSync integrato in Android SurfaceFlinger può creare ritardi imprevedibili.

csharp
// Unity — controllo VSync e FPS
void Awake()
{
    // 0 = VSync disattivato, 1 = VSync attivato
    QualitySettings.vSyncCount = 0;
    // Limitatore FPS personalizzato invece di VSync
    Application.targetFrameRate = 60;
}

VSync in Vulkan e Metal

Vulkan fornisce il controllo completo tramite VkSwapchainPresentInfo e presentMode: VK_PRESENT_MODE_FIFO_KHR — VSync classico, VK_PRESENT_MODE_MAILBOX_KHR — triplo buffer senza attesa, VK_PRESENT_MODE_IMMEDIATE_KHR — senza sincronizzazione. Metal in iOS controlla VSync tramite CAMetalLayer.displaySyncEnabled. A partire da iOS 14, Apple raccomanda di utilizzare displaySyncEnabled = true per impostazione predefinita per tutte le applicazioni tranne i giochi arcade.

ModalitàDescrizioneLatenza
FIFOVSync classico con attesa VBlank1 frame
MailboxTriplo buffer, scarto dei frame vecchi1–2 frame
ImmediateSenza sincronizzazione, FPS massimi0 frame

Limitazione FPS senza VSync

Un limitatore di FPS è un'alternativa a VSync in cui l'applicazione limita la frequenza dei frame a livello di codice senza attendere VBlank. Questo approccio fornisce una latenza prevedibile e non dipende dalla frequenza di aggiornamento del display. Su Android, la limitazione FPS è implementata tramite Choreographer, su iOS — tramite CADisplayLink con controllo manuale del timing di uscita.

VSync e tecnologie moderne di sincronizzazione

Il VSync tradizionale ha un inconveniente fondamentale: è legato a una frequenza di aggiornamento fissa del display. Se la GPU produce 45 FPS su un display a 60 Hz, VSync non può mostrare 45 frame — mostra 30 (saltando ogni secondo VBlank) o alterna tra 60 e 30 con intervalli irregolari. Questo crea stuttering, che rovina l'esperienza di gioco più dello screen tearing.

Adaptive Sync (FreeSync, G-Sync, Apple ProMotion) risolve questo problema modificando dinamicamente la frequenza di aggiornamento del display in base agli FPS dell'applicazione. Se l'applicazione produce 47 FPS, il display passa a 47 Hz — ogni frame viene mostrato esattamente una volta, senza lacerazioni o stuttering. ProMotion su iOS seleziona automaticamente una frequenza da 24 a 120 Hz, bilanciando fluidità e consumo energetico.

Sui dispositivi mobili, Adaptive Sync sta diventando lo standard: iPad Pro (2017+) con ProMotion, i flagship Android con display LTPO (Samsung Galaxy S23 Ultra, Google Pixel 8 Pro) supportano frequenze di aggiornamento dinamiche da 1 a 120 Hz. Per lo sviluppatore, ciò significa che VSync nel senso tradizionale è sostituito dalla gestione di sistema — basta impostare targetFrameRate e il sistema operativo stesso regola la frequenza di aggiornamento per il miglior equilibrio tra fluidità e durata della batteria.

Domande frequenti

Bisogna sempre attivare VSync nei giochi mobili?

No. Per i giochi dinamici (sparatutto, giochi di combattimento), VSync aumenta l'input lag senza un beneficio significativo — lo screen tearing sugli schermi OLED mobili è meno evidente a causa delle dimensioni ridotte del display. Per i giochi casual e le UI, VSync migliora la percezione della fluidità.

In che modo VSync influisce sulla batteria del dispositivo mobile?

VSync riduce il consumo energetico perché la GPU non renderizza frame non necessari. Con VSync disattivato, la GPU opera alla frequenza massima e ogni frame non visualizzato spreca energia e riscalda il dispositivo senza beneficio per l'utente.

Qual è la differenza tra VSync e un limitatore di FPS?

VSync sincronizza l'uscita dei frame con il VBlank del display, mentre un limitatore di FPS si limita a limitare la frequenza di rendering nel codice dell'applicazione. Il limitatore di FPS non elimina lo screen tearing ma fornisce una latenza prevedibile senza essere legato alla frequenza di aggiornamento dello schermo.

Perché gli FPS possono dimezzarsi con VSync attivato?

Quando la GPU non completa un frame prima di VBlank, il VBlank viene saltato e il frame viene mostrato per due cicli di aggiornamento. A 60 Hz, questo produce 30 FPS. Il triplo buffer attenua questo effetto consentendo alla GPU di iniziare il frame successivo senza attendere.

iOS e Android supportano Adaptive Sync?

. iOS ProMotion (iPad Pro, iPhone 13 Pro+) supporta frequenze dinamiche 24–120 Hz. Android tramite pannelli LTPO supporta 1–120 Hz. Lo sviluppatore non deve gestirlo manualmente — il sistema seleziona automaticamente la frequenza ottimale.

Riepilogo

  • VSync è un meccanismo di sincronizzazione GPU-display che elimina lo screen tearing
  • Doppio buffer con attesa VBlank è l'implementazione classica della sincronizzazione verticale
  • Screen tearing è il problema principale di VSync disattivato, particolarmente evidente a FPS elevati
  • Input lag è il prezzo di VSync, che aggiunge da uno a due frame di ritardo
  • Triplo buffer riduce lo stuttering ma aumenta l'input lag
  • Adaptive Sync (ProMotion, LTPO) è un sostituto moderno di VSync con frequenza dinamica
  • Per i giochi mobili, utilizza un limitatore di FPS invece di VSync per una latenza prevedibile

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche