VSync — mi ez, működési elv és beállítás

Szerző: IT Sectr Megjelenés: 2026-04-01 Olvasási idő: 8 perc

VSync (Vertical Synchronization) — technológia, amely szinkronizálja a GPU minden új képkockájának megjelenítését a kijelző frissítési gyakoriságával, megszüntetve a kép szakadását. A Apple Metal Documentation szerint a VBlank-kel történő szinkronizáció kötelező a sima rendereléshez mobileszközökön. Screen tearing akkor keletkezik, amikor a képkocka a függőleges letapogatás közben frissül, és a VSync megakadályozza ezt a keveredést.

Főbb pontok

  • VSync — a GPU és a kijelző frissítési gyakoriságának szinkronizálási mechanizmusa VBlank várakozással
  • Screen tearing — látható képszakadás, amikor a képkocka a képernyő letapogatásának közepén változik
  • Kettős pufferelés — a VSync megvalósításának fő módszere front buffer és back buffer segítségével
  • Input lag — a VSync mellékhatása, növeli a késleltetést a felhasználói művelet és a megjelenítés között
  • Adaptív szinkronizáció — a VSync modern alternatívája, amely kiküszöböli annak hátrányait

Mi az a VSync

VSync (Vertical Synchronization) — hardver-szoftver mechanizmus, amely arra kényszeríti a GPU-t, hogy várjon a függőleges kioltási jelre (VBlank) az új képkocka megjelenítése előtt. VSync nélkül a GPU bármikor küldhet képkockákat, még akkor is, amikor a kijelző éppen az aktuális képkockát rendereli, ami a kép vízszintes vonal mentén történő szakadásához vezet.

Mobileszközökön a VSync a grafikus illesztőprogram és az operációs rendszer szintjén van megvalósítva. Az iOS a VBlank szinkronizációt a Metalon keresztül használja, az Android pedig a SurfaceFlingeren és BufferQueue-on keresztül. Bekapcsolt függőleges szinkronizáció esetén az alkalmazás FPS-e nem haladhatja meg a kijelző frissítési gyakoriságát — 60, 90 vagy 120 Hz-et a készülék modelljétől függően.

A függőleges szinkronizáció kifejezés a CRT monitorok működési mechanizmusából származik, ahol az elektronsugár sorról sorra rajzolta a képet felülről lefelé. A képkocka befejezése után a sugár visszatért a bal felső sarokba — ezt a pillanatot függőleges kioltásnak nevezték. A modern LCD és OLED kijelzők megtartották ezt a kifejezést, bár fizikailag másképp működnek.

Hogyan működik a függőleges szinkronizáció

GPU a back bufferbe rendereli a képkockákat, a kijelző pedig a front bufferből olvas. A VSync garantálja, hogy a pufferek cseréje (swap) csak a VBlank pillanatában történik — amikor a kijelző befejezte az aktuális képkocka megjelenítését és készen áll a következőre. Ezt a mechanizmust kettős pufferelésnek nevezik VBlank-en keresztüli szinkronizációval.

A kettős pufferelés mechanizmusa

Kettős pufferelés két puffert használ: front buffert, amely a képernyőn jelenik meg, és back buffert, amelybe a GPU az aktuális képkockát írja. Amikor a képkocka elkészült, a pufferek helyet cserélnek. Bekapcsolt VSync esetén ez a csere a legközelebbi VBlank-ig késik. A GPU tétlen marad, ha a képkocka korábban készül el, mint a VBlank, ami csökkenti a teljesítményt, de megszünteti a tearing-et.

cpp
// OpenGL — VSync bekapcsolása WGL_EXT_swap_control segítségével
HDC hdc = wglGetCurrentDC();
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT =
    reinterpret_cast<PFNWGLSWAPINTERVALEXTPROC>(
        wglGetProcAddress("wglSwapIntervalEXT"));
wglSwapIntervalEXT(1); // 1 = VSync bekapcsolva, 0 = kikapcsolva

VBlank várakozási idő

VBlank — rövid időintervallum az aktuális képkocka utolsó sora és a következő képkocka első sora között. Ebben a pillanatban a kijelző nem frissíti a pixeleket, és a pufferek cseréje artefaktumok nélkül történik. A VBlank időtartama a frissítési gyakoriságtól függ: 60 Hz-en egy 1080p-s kijelzőn a VBlank körülbelül 1.4 ms ideig tart. Ha a GPU nem tudja befejezni a renderelést a VBlank előtt, a képkocka kimarad, és a kijelző az előző képkockát mutatja még egy cikluson keresztül — ezt akadozásként (stutter) érzékeljük.

Háromszoros pufferelés megoldja a GPU tétlenségének problémáját egy harmadik puffer hozzáadásával. A GPU azonnal elkezdheti a következő képkocka renderelését, még akkor is, ha az egyik back buffer VBlank-re vár. Ez növeli az FPS-t VSync esetén, de egy plusz képkocka késleltetést ad hozzá. Mobileszközökön a háromszoros pufferelést néhány játékmotorban és a Vulkanban használják Mailbox módban.

Főbb problémák VSync nélkül

Kikapcsolt VSync maximális FPS-t és minimális input lag-ot biztosít, de vizuális artefaktumok árán. Mobil játékok és sima animációjú alkalmazások esetében a VSync és annak kikapcsolása közötti választás kompromisszum a kép élessége és a vezérlés reagálóképessége között.

Képszakadás (Screen Tearing)

Screen tearing — vízszintes szakadás, ahol a képernyő felső része az előző képkockát mutatja, az alsó része pedig már a következőt. Ez akkor történik, amikor a GPU a puffereket a kijelző letapogatási ciklusának közepén cseréli. Mobileszközökön a tearing különösen észrevehető gyors görgetéskor vagy dinamikus jelenetekben magas képkockaszám mellett. OLED kijelzők azonnali válaszidejükkel kontrasztosabbá teszik a tearing-et az LCD-hez képest.

A tearing intenzitása az FPS és a frissítési gyakoriság arányától függ. 60 FPS-nél egy 60 Hz-es képernyőn a tearing egy statikus vonalként jelenik meg, 300 FPS-nél 60 Hz-en pedig többszörös hullámzó szakadásként, amelyek felülről lefelé mozognak. Minél magasabb az FPS a frissítési gyakorisághoz képest, annál több szakadás és annál észrevehetőbbek.

Beviteli késleltetés (Input Lag)

Input lag VSync esetén — a gombnyomás és az eredmény képernyőn való megjelenése közötti késleltetés. A függőleges szinkronizáció átlagosan egy képkocka késleltetést ad hozzá (16.7 ms 60 Hz-en), háromszoros pufferelés esetén pedig akár két képkockát. Az alkalmi alkalmazásoknál ez a késleltetés észrevehetetlen, de lövöldözős játékoknál, verekedős játékoknál és ritmusjátékoknál kritikus: a profik még 8 ms késleltetést is észrevesznek.

A NVIDIA (2024) kutatása szerint az átlagos input lag a CS:GO-ban 60 FPS-nél VSync nélkül 22 ms, VSync-kel pedig 39 ms. 144 FPS-nél a különbség 14 vs 18 ms-ra csökken. Mobil platformokon a VSync input lag kevésbé kritikus az érintőképernyős bevitel miatt, ahol a touchscreen hardveres késleltetése (10–30 ms) elfedi a szinkronizáció többletkésleltetését.

VSync beállítása mobilfejlesztésben

A mobilfejlesztésben a VSync-et grafikus API-kon, játékmotorokon és az operációs rendszer rendszerbeállításain keresztül kezelik. Az iOS kevesebb kontrollt biztosít, az Android többet a Vulkan és OpenGL ES segítségével. A mód kiválasztása az alkalmazás típusától függ: játék, UI vagy videó.

VSync a Unityben és az Unreal Engine-ben

Unity a QualitySettings.vSyncCount beállítást használja: 0 — kikapcsolva, 1 — VSync minden VBlank-nél, 2 — minden másodiknál (FPS feleződik). Unreal Engine-ben a VSync-et az r.VSync konzolparancs és a DefaultEngine.ini kezeli. Mobil buildekhez ajánlott a VSync kikapcsolása a Unityben és saját FPS-korlátozó használata, mivel a beépített VSync az Android SurfaceFlingerben kiszámíthatatlan késleltetéseket okozhat.

csharp
// Unity — VSync és FPS kezelése
void Awake()
{
    // 0 = VSync kikapcsolva, 1 = VSync bekapcsolva
    QualitySettings.vSyncCount = 0;
    // Saját FPS-korlátozó VSync helyett
    Application.targetFrameRate = 60;
}

VSync a Vulkanban és a Metalban

Vulkan teljes kontrollt biztosít a VkSwapchainPresentInfo és presentMode segítségével: VK_PRESENT_MODE_FIFO_KHR — klasszikus VSync, VK_PRESENT_MODE_MAILBOX_KHR — háromszoros pufferelés várakozás nélkül, VK_PRESENT_MODE_IMMEDIATE_KHR — szinkronizáció nélkül. Metal iOS-ben a VSync-et a CAMetalLayer.displaySyncEnabled segítségével kezeli. iOS 14-től kezdve az Apple a displaySyncEnabled = true alapértelmezett használatát ajánlja minden alkalmazáshoz, kivéve az arkádvezérlésű játékokat.

MódLeírásKésleltetés
FIFOKlasszikus VSync VBlank várakozással1 képkocka
MailboxHáromszoros pufferelés, régi képkockák eldobása1–2 képkocka
ImmediateSzinkronizáció nélkül, maximális FPS0 képkocka

FPS korlátozása VSync nélkül

FPS-korlátozó — alternatíva a VSync helyett, ahol az alkalmazás programozottan korlátozza a képkockasebességet, anélkül, hogy VBlank-re várna. Ez a megközelítés kiszámítható késleltetést biztosít, és nem függ a kijelző frissítési gyakoriságától. Androidon az FPS-korlátozás a Choreographer segítségével, iOS-en a CADisplayLink segítségével történik a megjelenítési idő kézi vezérlésével.

VSync és modern szinkronizációs technológiák

Hagyományos VSync alapvető hátránnyal rendelkezik: a kijelző rögzített frissítési gyakoriságához van kötve. Ha a GPU 45 FPS-t produkál egy 60 Hz-es képernyőn, a VSync nem tud 45 képkockát megjeleníteni — 30-at jelenít meg (minden második VBlank-et kihagyva) vagy 60 és 30 között váltakozik egyenlőtlen időközökkel. Ez akadozást (stutter) hoz létre, ami jobban rontja a játékélményt, mint a tearing.

Adaptive Sync (FreeSync, G-Sync, Apple ProMotion) megoldja ezt a problémát a kijelző frissítési gyakoriságának dinamikus megváltoztatásával az alkalmazás FPS-ének megfelelően. Ha az alkalmazás 47 FPS-t produkál, a kijelző 47 Hz-re vált — minden képkocka pontosan egyszer jelenik meg, szakadás és akadozás nélkül. A ProMotion iOS-ben automatikusan kiválasztja a 24 és 120 Hz közötti frekvenciát, egyensúlyozva a simaság és az energiafogyasztás között.

Mobileszközökön az Adaptive Sync szabvánnyá válik: iPad Pro (2017+) ProMotionnal, Android zászlóshajók LTPO kijelzőkkel (Samsung Galaxy S23 Ultra, Google Pixel 8 Pro) támogatják a dinamikus frissítési gyakoriságot 1 és 120 Hz között. A fejlesztő számára ez azt jelenti, hogy a VSync hagyományos értelemben rendszerkezeléssel helyettesítődik — elég beállítani a targetFrameRate-et, és az operációs rendszer maga állítja be a frissítési gyakoriságot a simaság és az akkumulátor-élettartam optimális egyensúlyához.

Gyakran ismételt kérdések

Mindig be kell kapcsolni a VSync-et mobil játékokban?

Nem. Dinamikus játékokban (lövöldözős, verekedős játékok) a VSync növeli az input lag-ot jelentős előny nélkül — a tearing mobil OLED képernyőkön kevésbé észrevehető a kijelző kis mérete miatt. Alkalmi játékoknál és UI-nál a VSync javítja a simaság érzékelését.

Hogyan befolyásolja a VSync a mobileszköz akkumulátorát?

A VSync csökkenti az energiafogyasztást, mert a GPU nem renderel felesleges képkockákat. Kikapcsolt VSync esetén a GPU maximális frekvencián működik, és minden meg nem jelenített képkocka energiát pazarol és melegíti a készüléket a felhasználó számára nyújtott előny nélkül.

Mi a különbség a VSync és az FPS-korlátozó között?

A VSync szinkronizálja a képkockák kimenetét a kijelző VBlank-jével, míg az FPS-korlátozó egyszerűen korlátozza a renderelési frekvenciát az alkalmazás kódjában. Az FPS-korlátozó nem szünteti meg a tearing-et, de kiszámítható késleltetést biztosít a képernyő frissítési gyakoriságához való kötődés nélkül.

Miért csökkenhet az FPS a felére VSync esetén?

Amikor a GPU nem tudja befejezni a képkockát a VBlank előtt, a VBlank kimarad, és a képkocka két frissítési cikluson keresztül jelenik meg. 60 Hz-en ez 30 FPS-t eredményez. A háromszoros pufferelés enyhíti ezt a hatást, lehetővé téve a GPU számára, hogy várakozás nélkül kezdje el a következő képkockát.

Támogatja az iOS és az Android az Adaptive Sync-et?

Igen. Az iOS ProMotion (iPad Pro, iPhone 13 Pro+) támogatja a 24–120 Hz dinamikus frekvenciát. Az Android LTPO paneleken keresztül támogatja az 1–120 Hz-et. A fejlesztőnek nem kell ezt kézzel kezelnie — a rendszer automatikusan kiválasztja az optimális frekvenciát.

Összefoglalás

  • VSync — a GPU és a kijelző szinkronizálási mechanizmusa, megszünteti a screen tearing-et
  • Kettős pufferelés VBlank várakozással — a függőleges szinkronizáció klasszikus megvalósítása
  • Screen tearing — a kikapcsolt VSync fő problémája, különösen magas FPS-nél észrevehető
  • Input lag — a VSync ára, egy-két képkocka késleltetést ad hozzá
  • Háromszoros pufferelés csökkenti az akadozást, de növeli az input lag-ot
  • Adaptive Sync (ProMotion, LTPO) — a VSync modern helyettesítője dinamikus frissítési gyakorisággal
  • Mobil játékokhoz használjon FPS-korlátozót VSync helyett a kiszámítható késleltetés érdekében

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is