VSync — bu nədir, iş prinsipi və qurulması

Müəllif: IT Sectr Dərc olunub: 2026-04-01 Oxuma vaxtı: 8 dəq

VSync (Vertical Synchronization) — GPU-nun hər yeni kadrını ekranın yenilənmə tezliyi ilə sinxronlaşdıran, görüntü qırılmalarını aradan qaldıran texnologiya. Apple Metal Documentation-ya görə, mobil cihazlarda hamar render üçün VBlank ilə sinxronizasiya məcburidir. Screen tearing kadr şaquli yayılma zamanı yeniləndikdə yaranır və VSync bu qarışmanın qarşısını alır.

Əsas məqamlar

  • VSync — GPU-nu VBlank gözləməsi vasitəsilə ekranın yenilənmə tezliyi ilə sinxronlaşdıran mexanizm
  • Screen tearing — kadr ekranın yayılmasının ortasında dəyişdikdə görünən görüntü qırılması
  • İkiqat buferləşdirmə — front buffer və back buffer ilə VSync tətbiqinin əsas metodu
  • Input lag — VSync-in yan təsiri, istifadəçi hərəkəti ilə göstərilmə arasında gecikməni artırır
  • Adaptiv sinxronizasiya — VSync-in çatışmamazlıqlarını aradan qaldıran müasir alternativ

VSync nədir

VSync (Vertical Synchronization) — GPU-nu yeni kadrı göstərməzdən əvvəl şaquli söndürmə (VBlank) siqnalını gözləməyə məcbur edən aparat-proqram mexanizmi. VSync olmadan GPU kadrları istənilən vaxt göndərə bilər, hətta ekran cari kadrı çəkmə prosesində olduqda belə, bu da üfüqi xətt boyunca görüntünün qırılmasına səbəb olur.

Mobil cihazlarda VSync qrafik sürücü və əməliyyat sistemi səviyyəsində həyata keçirilir. iOS Metal vasitəsilə VBlank sinxronizasiyasından, Android isə SurfaceFlinger və BufferQueue vasitəsilə istifadə edir. Şaquli sinxronizasiya aktiv olduqda proqramın FPS-i ekranın yenilənmə tezliyini keçə bilməz — cihaz modelindən asılı olaraq 60, 90 və ya 120 Hz.

Şaquli sinxronizasiya termini CRT monitorlarının iş mexanizmindən gəlir, burada elektron şüa təsviri yuxarıdan aşağıya sətir-sətir çəkirdi. Kadr tamamlandıqdan sonra şüa yuxarı sol küncə qayıdırdı — bu an şaquli söndürmə adlanırdı. Müasir LCD və OLED displeylər fiziki olaraq fərqli işləsələr də, bu termini qoruyub saxlamışlar.

Şaquli sinxronizasiya necə işləyir

GPU kadrları back buffer-də render edir, ekran isə front buffer-dən oxuyur. VSync buferlərin dəyişdirilməsinin (swap) yalnız VBlank anında — ekran cari kadrı göstərməyi bitirdikdə və növbətiyə hazır olduqda baş verməsini təmin edir. Bu mexanizm VBlank ilə sinxronizasiya ilə ikiqat buferləşdirmə adlanır.

İkiqat buferləşdirmə mexanizmi

İkiqat buferləşdirmə iki buferdən istifadə edir: ekranda göstərilən front buffer və GPU-nun cari kadrı yazdığı back buffer. Kadr hazır olduqda buferlər yerlərini dəyişir. VSync aktiv olduqda bu dəyişmə növbəti VBlank-a qədər təxirə salınır. Kadr VBlank-dan əvvəl hazırdırsa, GPU boş dayanır, bu da performansı azaldır, lakin tearingi aradan qaldırır.

cpp
// OpenGL — WGL_EXT_swap_control vasitəsilə VSync-in aktivləşdirilməsi
HDC hdc = wglGetCurrentDC();
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT =
    reinterpret_cast<PFNWGLSWAPINTERVALEXTPROC>(
        wglGetProcAddress("wglSwapIntervalEXT"));
wglSwapIntervalEXT(1); // 1 = VSync aktiv, 0 = deaktiv

VBlank gözləmə vaxtı

VBlank — cari kadrın son sətri ilə növbəti kadrın ilk sətri arasında qısa vaxt intervalı. Bu anda displey pikselləri yeniləmir və buferlərin dəyişdirilməsi artefaktsız baş verir. VBlank müddəti yenilənmə tezliyindən asılıdır: 1080p displeydə 60 Hz-də VBlank təxminən 1.4 ms davam edir. GPU VBlank-dan əvvəl renderi bitirə bilmirsə, kadr atlanır və displey əvvəlki kadrı daha bir dövr göstərir — bu sərtlik (stutter) kimi qəbul edilir.

Üçqat buferləşdirmə üçüncü bufer əlavə edərək GPU boş qalma problemini həll edir. GPU back buffer-lərdən biri VBlank gözləsə belə, növbəti kadrı dərhal render etməyə başlaya bilər. Bu VSync-də FPS-i artırır, lakin əlavə kadr gecikməsi əlavə edir. Mobil cihazlarda üçqat buferləşdirmə bəzi oyun mühərriklərində və Vulkan-da Mailbox rejimi vasitəsilə istifadə olunur.

VSync olmadan əsas problemlər

Söndürülmüş VSync maksimum FPS və minimal input lag verir, lakin vizual artefaktlar bahasına. Mobil oyunlar və hamar animasiyalı proqramlar üçün VSync ilə onu söndürmək arasında seçim görüntü aydınlığı ilə idarəetmə həssaslığı arasında kompromisdir.

Görüntü qırılması (Screen Tearing)

Screen tearing — ekranın yuxarı hissəsinin əvvəlki kadrı, aşağı hissəsinin isə növbəti kadrı göstərdiyi üfüqi qırılma. Bu, GPU buferləri ekran yayılma dövrünün ortasında dəyişdikdə baş verir. Mobil cihazlarda tearing sürətli sürüşdürmə və ya yüksək kadr tezliyi olan dinamik səhnələrdə xüsusilə nəzərə çarpır. OLED displeylər ani reaksiya müddəti ilə tearingi LCD ilə müqayisədə daha kontrastlı edir.

Tearing intensivliyi FPS və yenilənmə tezliyi nisbətindən asılıdır. 60 Hz ekranda 60 FPS-də tearing bir statik xətt kimi özünü göstərir, 60 Hz-də 300 FPS-də isə yuxarıdan aşağıya hərəkət edən çoxsaylı dalğavari qırılmalar kimi. Yenilənmə tezliyinə nisbətən FPS nə qədər yüksəkdirsə, qırılmalar bir o qədər çox və nəzərə çarpandır.

Giriş gecikməsi (Input Lag)

Input lag VSync-də — düyməni basmaqla nəticənin ekranda göstərilməsi arasındakı gecikmə. Şaquli sinxronizasiya orta hesabla bir kadr gecikmə əlavə edir (60 Hz-də 16.7 ms), üçqat buferləşdirmədə isə iki kadra qədər. Casual proqramlar üçün bu gecikmə hiss olunmaz, lakin atıcılar, döyüş oyunları və ritm oyunları üçün kritikdir: peşəkarlar hətta 8 ms gecikməni də hiss edir.

NVIDIA (2024) tədqiqatına görə, CS:GO-da 60 FPS-də VSync olmadan orta input lag 22 ms, VSync ilə isə 39 ms təşkil edir. 144 FPS-də fərq müvafiq olaraq 14 vs 18 ms-ə qədər azalır. Mobil platformalarda VSync input lag-ı daha az kritikdir, çünki toxunma girişi səbəbindən sensor ekranın aparat gecikməsi (10–30 ms) sinxronizasiyanın əlavə gecikməsini maskalayır.

Mobil inkişafda VSync qurulması

Mobil inkişafda VSync qrafik API-lər, oyun mühərrikləri və OS sistem parametrləri vasitəsilə idarə olunur. iOS daha az nəzarət verir, Android — Vulkan və OpenGL ES vasitəsilə daha çox. Rejim seçimi proqram növündən asılıdır: oyunlar, UI və ya video.

Unity və Unreal Engine-də VSync

Unity QualitySettings.vSyncCount parametrindən istifadə edir: 0 — söndürülmüş, 1 — hər VBlank-da VSync, 2 — hər ikincidə (FPS yarıya düşür). Unreal Engine-də VSync r.VSync konsol əmri və DefaultEngine.ini vasitəsilə idarə olunur. Mobil qurğular üçün Unity-də VSync-i söndürmək və öz FPS məhdudlaşdırıcısından istifadə etmək tövsiyə olunur, çünki Android SurfaceFlinger-də quraşdırılmış VSync gözlənilməz gecikmələr yarada bilər.

csharp
// Unity — VSync və FPS idarəsi
void Awake()
{
    // 0 = VSync deaktiv, 1 = VSync aktiv
    QualitySettings.vSyncCount = 0;
    // VSync əvəzinə öz FPS məhdudlaşdırıcısı
    Application.targetFrameRate = 60;
}

Vulkan və Metal-da VSync

Vulkan VkSwapchainPresentInfo və presentMode vasitəsilə tam nəzarət verir: VK_PRESENT_MODE_FIFO_KHR — klassik VSync, VK_PRESENT_MODE_MAILBOX_KHR — gözləməsiz üçqat buferləşdirmə, VK_PRESENT_MODE_IMMEDIATE_KHR — sinxronizasiyasız. iOS-da Metal VSync-i CAMetalLayer.displaySyncEnabled vasitəsilə idarə edir. iOS 14-dən etibarən Apple arkada idarəsi olan oyunlar istisna olmaqla, bütün proqramlar üçün displaySyncEnabled = true-dan istifadə etməyi tövsiyə edir.

RejimİzahGecikmə
FIFOVBlank gözləməsi ilə klassik VSync1 kadr
MailboxÜçqat buferləşdirmə, köhnə kadrların atılması1–2 kadr
ImmediateSinxronizasiyasız, maksimum FPS0 kadr

VSync olmadan FPS məhdudlaşdırılması

FPS məhdudlaşdırıcısı — VSync-ə alternativdir, burada proqram VBlank gözləmədən kadr tezliyini proqram təminatı ilə məhdudlaşdırır. Bu yanaşma proqnozlaşdırıla bilən gecikmə verir və ekranın yenilənmə tezliyindən asılı deyil. Android-də FPS məhdudlaşdırılması Choreographer vasitəsilə, iOS-da isə çıxış vaxtının əl ilə idarə edilməsi ilə CADisplayLink vasitəsilə həyata keçirilir.

VSync və müasir sinxronizasiya texnologiyaları

Ənənəvi VSync fundamental bir çatışmazlığa malikdir: o, ekranın sabit yenilənmə tezliyinə bağlıdır. GPU 60 Hz ekranda 45 FPS verirsə, VSync 45 kadr göstərə bilməz — ya 30 göstərir (hər ikinci VBlank-ı atlayaraq), ya da qeyri-bərabər intervallarla 60 və 30 arasında dəyişir. Bu, sərtlik (stutter) yaradır ki, bu da oyun təəssüratını tearingdən daha çox korlayır.

Adaptive Sync (FreeSync, G-Sync, Apple ProMotion) bu problemi həll edir, ekranın yenilənmə tezliyini proqramın FPS-i ilə uyğun olaraq dinamik dəyişdirir. Proqram 47 FPS verirsə, displey 47 Hz-ə keçir — hər kadr dəfələrlə, qırılma və sərtlik olmadan göstərilir. iOS-da ProMotion hamarlıq və enerji istehlakı arasında tarazlıq yaradaraq avtomatik olaraq 24-dən 120 Hz-ə qədər tezlik seçir.

Mobil cihazlarda Adaptive Sync standart halına gəlir: ProMotion ilə iPad Pro (2017+), LTPO displeyləri olan Android flaqmanları (Samsung Galaxy S23 Ultra, Google Pixel 8 Pro) 1-dən 120 Hz-ə qədər dinamik yenilənmə tezliyini dəstəkləyir. Tərtibatçı üçün bu o deməkdir ki, ənənəvi mənada VSync sistem idarəçiliyi ilə əvəz olunur — sadəcə targetFrameRate təyin etmək kifayətdir, OS isə hamarlıq və batareya ömrünün optimal balansı üçün yenilənmə tezliyini özü tənzimləyəcək.

Tez-tez verilən suallar

Mobil oyunlarda həmişə VSync-i yandırmaq lazımdırmı?

Xeyr. Dinamik oyunlarda (atıcılar, döyüş oyunları) VSync input lag-ı artırır, əhəmiyyətli fayda vermir — mobil OLED ekranlarda tearing ekranın kiçik ölçüsü səbəbindən daha az nəzərə çarpır. Casual oyunlar və UI üçün VSync hamarlıq qavrayışını yaxşılaşdırır.

VSync mobil cihazın batareyasına necə təsir edir?

VSync enerji istehlakını azaldır, çünki GPU lazımsız kadrları render etmir. VSync söndürüldükdə GPU maksimum tezlikdə işləyir və hər göstərilməyən kadr enerji sərf edir və cihazı istifadəçiyə fayda vermədən qızdırır.

VSync və FPS məhdudlaşdırıcısı arasında nə fərq var?

VSync kadr çıxışını ekranın VBlank ilə sinxronlaşdırır, FPS məhdudlaşdırıcısı isə sadəcə proqram kodunda render tezliyini məhdudlaşdırır. FPS məhdudlaşdırıcısı tearingi aradan qaldırmır, lakin ekranın tezliyinə bağlı olmadan proqnozlaşdırıla bilən gecikmə verir.

Niyə VSync-də FPS yarıya düşə bilər?

GPU VBlank-dan əvvəl kadrı tamamlaya bilmədikdə, VBlank atlanır və kadr iki yenilənmə dövrü göstərilir. 60 Hz-də bu 30 FPS verir. Üçqat buferləşdirmə bu effekti yumşaldır, GPU-ya gözləmədən növbəti kadra başlamağa imkan verir.

iOS və Android Adaptive Sync-i dəstəkləyirmi?

Bəli. iOS ProMotion (iPad Pro, iPhone 13 Pro+) 24–120 Hz dinamik tezliyi dəstəkləyir. Android LTPO panelləri vasitəsilə 1–120 Hz dəstəkləyir. Tərtibatçı bunu əl ilə idarə etməlidir — sistem optimal tezliyi avtomatik seçir.

Nəticə

  • VSync — GPU-nu ekranla sinxronlaşdıran, screen tearingi aradan qaldıran mexanizm
  • İkiqat buferləşdirmə VBlank gözləməsi ilə — şaquli sinxronizasiyanın klassik tətbiqi
  • Screen tearing — söndürülmüş VSync-in əsas problemi, xüsusilə yüksək FPS-də nəzərə çarpır
  • Input lag — VSync-in qiyməti, bir-iki kadr gecikmə əlavə edir
  • Üçqat buferləşdirmə sərtliyi azaldır, lakin input lag-ı artırır
  • Adaptive Sync (ProMotion, LTPO) — dinamik tezlik ilə VSync-in müasir əvəzləyicisi
  • Mobil oyunlar üçün proqnozlaşdırıla bilən gecikmə üçün VSync əvəzinə FPS məhdudlaşdırıcısı istifadə edin

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun