VSync — ano ito, prinsipyo ng paggana at pagsasaayos

May-akda: IT Sectr Nai-publish: 2026-04-01 Oras ng pagbabasa: 8 min

VSync (Vertical Synchronization) — teknolohiya na nag-sync ng output ng bawat bagong GPU frame sa refresh rate ng display, inaalis ang pagkapunit ng imahe. Ayon sa Apple Metal Documentation, ang synchronization sa VBlank ay kinakailangan para sa maayos na rendering sa mga mobile device. Screen tearing ay nangyayari kapag ang frame ay na-update sa panahon ng vertical scan, at ang VSync ay pumipigil sa paghahalo na ito.

Mga Pangunahing Punto

  • VSync — mekanismo ng pag-sync ng GPU sa refresh rate ng display sa pamamagitan ng paghihintay ng VBlank
  • Screen tearing — nakikitang pagkapunit ng imahe kapag nagbago ang frame sa gitna ng scan ng screen
  • Double buffering — pangunahing paraan ng pagpapatupad ng VSync na may front buffer at back buffer
  • Input lag — side effect ng VSync, nagpapataas ng pagkaantala sa pagitan ng aksyon ng user at display
  • Adaptive synchronization — modernong alternatibo sa VSync, inaalis ang mga kakulangan nito

Ano ang VSync

VSync (Vertical Synchronization) — mekanismo ng hardware-software na pumipilit sa GPU na maghintay para sa signal ng vertical blanking (VBlank) bago magpakita ng bagong frame. Kung walang VSync, maaaring magpadala ang GPU ng mga frame anumang oras, kahit na ang display ay nasa proseso ng pag-render ng kasalukuyang frame, na humahantong sa pagkapunit ng imahe sa kahabaan ng isang pahalang na linya.

Sa mga mobile device, ang VSync ay ipinatupad sa antas ng graphics driver at operating system. Ang iOS ay gumagamit ng VBlank synchronization sa pamamagitan ng Metal, Android — sa pamamagitan ng SurfaceFlinger at BufferQueue. Kapag naka-on ang vertical synchronization, ang FPS ng application ay hindi maaaring lumampas sa refresh rate ng display — 60, 90 o 120 Hz depende sa modelo ng device.

Ang terminong vertical synchronization ay nagmula sa mekanismo ng paggana ng mga CRT monitor, kung saan ang electron beam ay gumuhit ng imahe linya sa linya mula sa itaas hanggang sa ibaba. Matapos makumpleto ang frame, ang beam ay bumalik sa kaliwang sulok sa itaas — ang sandaling ito ay tinawag na vertical blanking. Ang mga modernong LCD at OLED display ay nagpanatili ng terminong ito, kahit na pisikal na gumagana ang mga ito nang iba.

Paano gumagana ang vertical synchronization

GPU nagre-render ng mga frame sa back buffer, habang ang display ay nagbabasa mula sa front buffer. Ginagarantiyahan ng VSync na ang pagpapalit ng mga buffer (swap) ay nangyayari lamang sa sandali ng VBlank — kapag natapos na ng display ang pagpapakita ng kasalukuyang frame at handa na para sa susunod. Ang mekanismong ito ay tinatawag na double buffering na may synchronization sa pamamagitan ng VBlank.

Mekanismo ng double buffering

Double buffering ay gumagamit ng dalawang buffer: front buffer, na ipinapakita sa screen, at back buffer, kung saan isinusulat ng GPU ang kasalukuyang frame. Kapag handa na ang frame, nagpapalitan ng lugar ang mga buffer. Sa naka-on na VSync, ang pagpapalit na ito ay naantala hanggang sa pinakamalapit na VBlank. Ang GPU ay nananatiling idle kung ang frame ay handa bago ang VBlank, na nagbabawas ng performance ngunit inaalis ang tearing.

cpp
// OpenGL — pag-on ng VSync sa pamamagitan ng WGL_EXT_swap_control
HDC hdc = wglGetCurrentDC();
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT =
    reinterpret_cast<PFNWGLSWAPINTERVALEXTPROC>(
        wglGetProcAddress("wglSwapIntervalEXT"));
wglSwapIntervalEXT(1); // 1 = VSync naka-on, 0 = naka-off

Oras ng paghihintay ng VBlank

VBlank — isang maikling agwat ng oras sa pagitan ng huling linya ng kasalukuyang frame at unang linya ng susunod na frame. Sa sandaling ito, ang display ay hindi nag-a-update ng mga pixel, at ang pagpapalit ng buffer ay nangyayari nang walang mga artifact. Ang tagal ng VBlank ay depende sa refresh rate: sa 60 Hz sa isang 1080p display, ang VBlank ay tumatagal ng humigit-kumulang 1.4 ms. Kung hindi matapos ng GPU ang rendering bago ang VBlank, ang frame ay nilalaktawan, at ang display ay nagpapakita ng nakaraang frame para sa isa pang cycle — ito ay nararamdaman bilang stutter.

Triple buffering ay nilulutas ang problema ng idle GPU sa pamamagitan ng pagdaragdag ng ikatlong buffer. Maaaring simulan agad ng GPU ang pag-render ng susunod na frame, kahit na ang isa sa mga back buffer ay naghihintay ng VBlank. Pinapataas nito ang FPS sa VSync, ngunit nagdaragdag ng dagdag na frame ng pagkaantala. Sa mga mobile device, ang triple buffering ay ginagamit sa ilang game engine at sa Vulkan sa pamamagitan ng Mailbox mode.

Mga pangunahing problema nang walang VSync

Naka-off na VSync ay nagbibigay ng maximum na FPS at minimum na input lag, ngunit sa halaga ng visual artifacts. Para sa mga mobile game at application na may maayos na animation, ang pagpili sa pagitan ng VSync at pag-off nito ay isang kompromiso sa pagitan ng sharpness ng imahe at responsiveness ng kontrol.

Pagkapunit ng Imahe (Screen Tearing)

Screen tearing — isang pahalang na pagkapunit kung saan ang itaas na bahagi ng screen ay nagpapakita ng nakaraang frame, at ang ibabang bahagi ay nagpapakita na ng susunod. Ito ay nangyayari kapag ang GPU ay nagpapalit ng mga buffer sa gitna ng scan cycle ng display. Sa mga mobile device, ang tearing ay lalong kapansin-pansin sa mabilis na pag-scroll o sa mga dynamic na eksena na may mataas na frame rate. OLED display na may agarang pagtugon ay ginagawang mas contrasty ang tearing kumpara sa LCD.

Ang intensity ng tearing ay depende sa ratio ng FPS sa refresh rate. Sa 60 FPS sa isang 60 Hz na screen, ang tearing ay lumalabas bilang isang static na linya, at sa 300 FPS sa 60 Hz — bilang maraming alon na pagkapunit na gumagalaw mula sa itaas pababa. Kung mas mataas ang FPS kumpara sa refresh rate, mas maraming pagkapunit at mas kapansin-pansin ang mga ito.

Pagkaantala ng Input (Input Lag)

Input lag sa VSync — pagkaantala sa pagitan ng pagpindot ng button at pagpapakita ng resulta sa screen. Ang vertical synchronization ay nagdaragdag ng average na isang frame ng pagkaantala (16.7 ms sa 60 Hz), at sa triple buffering — hanggang dalawang frame. Para sa mga casual application, ang pagkaantala na ito ay hindi napapansin, ngunit para sa mga shooter, fighting game at rhythm game ito ay kritikal: napapansin ng mga propesyonal kahit na 8 ms na pagkaantala.

Ayon sa pananaliksik ng NVIDIA (2024), ang average na input lag sa CS:GO sa 60 FPS nang walang VSync ay 22 ms, at may VSync — 39 ms. Sa 144 FPS ang pagkakaiba ay bumababa sa 14 vs 18 ms ayon sa pagkakabanggit. Sa mga mobile platform, ang input lag ng VSync ay hindi gaanong kritikal dahil sa touch input, kung saan ang hardware delay ng touchscreen (10–30 ms) ay tinatakpan ang karagdagang pagkaantala ng synchronization.

Pagsasaayos ng VSync sa mobile development

Sa mobile development, ang VSync ay pinamamahalaan sa pamamagitan ng graphics API, game engine, at system setting ng OS. Ang iOS ay nagbibigay ng mas kaunting kontrol, Android — mas marami sa pamamagitan ng Vulkan at OpenGL ES. Ang pagpili ng mode ay depende sa uri ng application: game, UI o video.

VSync sa Unity at Unreal Engine

Unity ay gumagamit ng setting na QualitySettings.vSyncCount: 0 — naka-off, 1 — VSync sa bawat VBlank, 2 — sa bawat segundo (FPS nababawas ng kalahati). Sa Unreal Engine, ang VSync ay pinamamahalaan sa pamamagitan ng console command na r.VSync at DefaultEngine.ini. Para sa mobile builds, inirerekomenda na i-off ang VSync sa Unity at gumamit ng sariling FPS limiter, dahil ang built-in na VSync sa Android SurfaceFlinger ay maaaring lumikha ng hindi mahulaan na mga pagkaantala.

csharp
// Unity — pamamahala ng VSync at FPS
void Awake()
{
    // 0 = VSync naka-off, 1 = VSync naka-on
    QualitySettings.vSyncCount = 0;
    // Sariling FPS limiter sa halip na VSync
    Application.targetFrameRate = 60;
}

VSync sa Vulkan at Metal

Vulkan ay nagbibigay ng buong kontrol sa pamamagitan ng VkSwapchainPresentInfo at presentMode: VK_PRESENT_MODE_FIFO_KHR — klasikong VSync, VK_PRESENT_MODE_MAILBOX_KHR — triple buffering nang walang paghihintay, VK_PRESENT_MODE_IMMEDIATE_KHR — walang synchronization. Metal sa iOS ay namamahala ng VSync sa pamamagitan ng CAMetalLayer.displaySyncEnabled. Mula noong iOS 14, inirerekomenda ng Apple ang paggamit ng displaySyncEnabled = true bilang default para sa lahat ng application maliban sa mga game na may arcade control.

ModePaglalarawanPagkaantala
FIFOKlasikong VSync na may paghihintay ng VBlank1 frame
MailboxTriple buffering, pagtatapon ng lumang frame1–2 frame
ImmediateWalang synchronization, maximum FPS0 frame

Paglimita ng FPS nang walang VSync

FPS limiter — alternatibo sa VSync kung saan ang application ay naglilimita ng frame rate nang programmatically, nang hindi naghihintay ng VBlank. Ang pamamaraang ito ay nagbibigay ng predictable na pagkaantala at hindi nakadepende sa refresh rate ng display. Sa Android, ang paglimita ng FPS ay ipinatupad sa pamamagitan ng Choreographer, sa iOS — sa pamamagitan ng CADisplayLink na may manual na kontrol ng oras ng output.

VSync at modernong teknolohiya ng synchronization

Tradisyonal na VSync ay may pangunahing kahinaan: ito ay nakatali sa fixed refresh rate ng display. Kung ang GPU ay gumagawa ng 45 FPS sa isang 60 Hz na screen, hindi maaaring magpakita ang VSync ng 45 frame — nagpapakita ito ng 30 (nilalaktawan ang bawat pangalawang VBlank) o nag-aalternate sa pagitan ng 60 at 30 na may hindi pantay na agwat. Lumilikha ito ng stutter, na sumisira sa karanasan sa paglalaro nang higit pa sa tearing.

Adaptive Sync (FreeSync, G-Sync, Apple ProMotion) ay nilulutas ang problemang ito sa pamamagitan ng dinamikong pagbabago ng refresh rate ng display ayon sa FPS ng application. Kung ang application ay gumagawa ng 47 FPS, ang display ay lumilipat sa 47 Hz — bawat frame ay ipinapakita nang eksaktong isang beses, walang pagkapunit at stutter. Ang ProMotion sa iOS ay awtomatikong pumipili ng frequency mula 24 hanggang 120 Hz, binabalanse ang smoothness at consumo ng kuryente.

Sa mga mobile device, ang Adaptive Sync ay nagiging pamantayan: iPad Pro (2017+) na may ProMotion, Android flagship na may LTPO display (Samsung Galaxy S23 Ultra, Google Pixel 8 Pro) ay sumusuporta sa dynamic refresh rate mula 1 hanggang 120 Hz. Para sa developer, nangangahulugan ito na ang VSync sa tradisyonal na kahulugan ay pinalitan ng system management — sapat na upang itakda ang targetFrameRate, at ang OS mismo ang mag-aadjust ng refresh rate para sa optimal na balanse ng smoothness at buhay ng baterya.

Mga Madalas Itanong

Kailangan bang palaging i-on ang VSync sa mga mobile game?

Hindi. Sa mga dynamic na game (shooter, fighting game) pinapataas ng VSync ang input lag nang walang makabuluhang benepisyo — ang tearing sa mobile OLED screen ay hindi gaanong kapansin-pansin dahil sa maliit na sukat ng display. Para sa casual game at UI, pinapabuti ng VSync ang persepsyon ng smoothness.

Paano nakakaapekto ang VSync sa baterya ng mobile device?

Binabawasan ng VSync ang consumo ng kuryente, dahil hindi nagre-render ang GPU ng mga hindi kinakailangang frame. Sa naka-off na VSync, ang GPU ay gumagana sa maximum frequency, at bawat hindi naipapakitang frame ay kumokonsumo ng enerhiya at nagpapainit ng device nang walang benepisyo para sa user.

Ano ang pagkakaiba sa pagitan ng VSync at FPS limiter?

Ang VSync ay nag-sync ng output ng frame sa VBlank ng display, habang ang FPS limiter ay naglilimita lamang ng rendering frequency sa code ng application. Hindi inaalis ng FPS limiter ang tearing, ngunit nagbibigay ng predictable na pagkaantala nang walang pagtatali sa refresh rate ng screen.

Bakit maaaring bumaba ng kalahati ang FPS sa VSync?

Kapag hindi matapos ng GPU ang frame bago ang VBlank, ang VBlank ay nilalaktawan, at ang frame ay ipinapakita sa loob ng dalawang refresh cycle. Sa 60 Hz ito ay nagbibigay ng 30 FPS. Ang triple buffering ay nagpapagaan ng epektong ito, pinapayagan ang GPU na simulan ang susunod na frame nang hindi naghihintay.

Sinusuportahan ba ng iOS at Android ang Adaptive Sync?

Oo. Ang iOS ProMotion (iPad Pro, iPhone 13 Pro+) ay sumusuporta sa dynamic frequency 24–120 Hz. Ang Android sa pamamagitan ng LTPO panels ay sumusuporta sa 1–120 Hz. Hindi kailangang manual na pamahalaan ito ng developer — awtomatikong pinipili ng system ang optimal na frequency.

Buod

  • VSync — mekanismo ng pag-sync ng GPU sa display, inaalis ang screen tearing
  • Double buffering na may paghihintay ng VBlank — klasikong implementasyon ng vertical synchronization
  • Screen tearing — pangunahing problema ng naka-off na VSync, lalo na kapansin-pansin sa mataas na FPS
  • Input lag — presyo para sa VSync, nagdaragdag ng isa-dalawang frame ng pagkaantala
  • Triple buffering nagbabawas ng stutter, ngunit pinapataas ang input lag
  • Adaptive Sync (ProMotion, LTPO) — modernong kapalit ng VSync na may dynamic refresh rate
  • Para sa mobile game, gumamit ng FPS limiter sa halip na VSync para sa predictable na pagkaantala

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din