VSync — bu nima, ishlash prinsipi va sozlash

Muallif: IT Sectr Nashr etilgan: 2026-04-01 O'qish vaqti: 8 daq

VSync (Vertical Synchronization) — GPU ning har bir yangi kadrini displeyning yangilanish chastotasi bilan sinxronlashtiruvchi, tasvir yirtilishlarini bartaraf qiluvchi texnologiya. Apple Metal Documentation ma'lumotlariga ko'ra, mobil qurilmalarda silliq renderlash uchun VBlank bilan sinxronizatsiya majburiydir. Screen tearing kadr vertikal skanerlash vaqtida yangilanganda yuzaga keladi va VSync bu aralashishni oldini oladi.

Asosiy fikrlar

  • VSync — GPU ni VBlank kutish orqali displeyning yangilanish chastotasi bilan sinxronlashtiruvchi mexanizm
  • Screen tearing — kadr ekran skanerlash o'rtasida o'zgarganda tasvirning ko'rinadigan yirtilishi
  • Ikki marta buferlash — front buffer va back buffer bilan VSync amalga oshirishning asosiy usuli
  • Input lag — VSync ning yon ta'siri, foydalanuvchi harakati va ko'rsatish o'rtasidagi kechikishni oshiradi
  • Adaptiv sinxronizatsiya — VSync ning kamchiliklarini bartaraf qiluvchi zamonaviy alternativ

VSync nima

VSync (Vertical Synchronization) — GPU ni yangi kadrni ko'rsatishdan oldin vertikal so'nish (VBlank) signalini kutishga majbur qiluvchi apparat-dastur mexanizmi. VSyncsiz GPU kadrlarni istalgan vaqtda yuborishi mumkin, hatto displey joriy kadrni chizish jarayonida bo'lsa ham, bu gorizontal chiziq bo'ylab tasvir yirtilishiga olib keladi.

Mobil qurilmalarda VSync grafik drayver va operatsion tizim darajasida amalga oshirilgan. iOS Metal orqali VBlank sinxronizatsiyasidan, Android esa SurfaceFlinger va BufferQueue orqali foydalanadi. Vertikal sinxronizatsiya yoqilganda, ilovaning FPS displeyning yangilanish chastotasidan oshib keta olmaydi — qurilma modeliga qarab 60, 90 yoki 120 Hz.

Vertikal sinxronizatsiya atamasi CRT monitorlarning ishlash mexanizmidan kelib chiqqan, bu yerda elektron nur tasvirni yuqoridan pastga qator-qator chizgan. Kadr tugagandan so'ng, nur yuqori chap burchakka qaytgan — bu moment vertikal so'nish deb atalgan. Zamonaviy LCD va OLED displeylar jismonan boshqacha ishlasa-da, bu atamani saqlab qolgan.

Vertikal sinxronizatsiya qanday ishlaydi

GPU kadrlarni back bufferda renderlaydi, displey esa front bufferdan o'qiydi. VSync buferlarni almashtirish (swap) faqat VBlank momentida — displey joriy kadrni ko'rsatishni tugatib, keyingisiga tayyor bo'lganda amalga oshishini kafolatlaydi. Bu mexanizm VBlank orqali sinxronizatsiya bilan ikki marta buferlash deb ataladi.

Ikki marta buferlash mexanizmi

Ikki marta buferlash ikkita buferdan foydalanadi: ekranda ko'rsatiladigan front buffer va GPU joriy kadrni yozadigan back buffer. Kadr tayyor bo'lganda, buferlar o'rnini almashtiradi. VSync yoqilgan holda, bu almashtirish eng yaqin VBlankgacha kechiktiriladi. Agar kadr VBlankdan oldin tayyor bo'lsa, GPU bo'sh turadi, bu ishlashni pasaytiradi, lekin tearingni yo'q qiladi.

cpp
// OpenGL — WGL_EXT_swap_control orqali VSync ni yoqish
HDC hdc = wglGetCurrentDC();
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT =
    reinterpret_cast<PFNWGLSWAPINTERVALEXTPROC>(
        wglGetProcAddress("wglSwapIntervalEXT"));
wglSwapIntervalEXT(1); // 1 = VSync yoqilgan, 0 = o'chirilgan

VBlank kutish vaqti

VBlank — joriy kadrning oxirgi qatori va keyingi kadrning birinchi qatori o'rtasidagi qisqa vaqt oralig'i. Bu vaqtda displey piksellarni yangilamaydi va buferlarni almashtirish artefaktlarsiz amalga oshadi. VBlank davomiyligi yangilanish chastotasiga bog'liq: 1080p displeyda 60 Hz da VBlank taxminan 1.4 ms davom etadi. Agar GPU VBlankdan oldin renderni tugatolmasa, kadr o'tkazib yuboriladi va displey oldingi kadrni yana bir sikl ko'rsatadi — bu stutter (qotish) sifatida qabul qilinadi.

Uch marta buferlash uchinchi bufer qo'shib, GPU bo'sh qolish muammosini hal qiladi. GPU back bufferlardan biri VBlank kutayotgan bo'lsa ham, keyingi kadrni darhol renderlashni boshlashi mumkin. Bu VSync bilan FPSni oshiradi, lekin qo'shimcha bir kadr kechikish qo'shadi. Mobil qurilmalarda uch marta buferlash ba'zi o'yin dvigatellarida va Vulkanda Mailbox rejimi orqali qo'llaniladi.

VSyncsiz asosiy muammolar

O'chirilgan VSync maksimal FPS va minimal input lag beradi, ammo vizual artefaktlar evaziga. Mobil o'yinlar va silliq animatsiyali ilovalar uchun VSync va uni o'chirish o'rtasidagi tanlov tasvir ravshanligi va boshqaruvning sezgirligi o'rtasidagi kelishuvdir.

Tasvir yirtilishi (Screen Tearing)

Screen tearing — ekranning yuqori qismi oldingi kadrni, pastki qismi esa keyingi kadrni ko'rsatadigan gorizontal yirtilish. Bu GPU buferlarni ekran skanerlash siklining o'rtasida almashtirganda sodir bo'ladi. Mobil qurilmalarda tearing tez skrollash yoki yuqori kadr chastotasi bilan dinamik sahnalarda ayniqsa seziladi. OLED displeylar o'zining zudlik bilan javob berishi bilan tearingni LCD bilan solishtirganda yanada kontrastli qiladi.

Tearing intensivligi FPS va yangilanish chastotasi nisbatiga bog'liq. 60 Hz ekranda 60 FPS da tearing bitta statik chiziq sifatida namoyon bo'ladi, 60 Hz da 300 FPS da esa yuqoridan pastga harakatlanuvchi ko'plab to'lqinsimon yirtilishlar sifatida. Yangilanish chastotasiga nisbatan FPS qanchalik yuqori bo'lsa, yirtilishlar shunchalik ko'p va ular shunchalik sezilarli.

Kirish kechikishi (Input Lag)

Input lag VSync da — tugmani bosish va natijani ekranda ko'rsatish o'rtasidagi kechikish. Vertikal sinxronizatsiya o'rtacha bitta kadr kechikish qo'shadi (60 Hz da 16.7 ms), uch marta buferlashda esa ikki kadrgacha. Oddiy ilovalar uchun bu kechikish sezilmaydi, ammo otishma, jang va ritm o'yinlari uchun tanqidiy ahamiyatga ega: professionallar hatto 8 ms kechikishni ham sezadilar.

NVIDIA (2024) tadqiqotiga ko'ra, CS:GO da 60 FPS da VSyncsiz o'rtacha input lag 22 ms, VSync bilan esa 39 ms ni tashkil etadi. 144 FPS da farq mos ravishda 14 va 18 ms gacha kamayadi. Mobil platformalarda VSync input lag kamroq tanqidiy, chunki sensorli kiritish tufayli touchscreen ning apparat kechikishi (10–30 ms) sinxronizatsiyaning qo'shimcha kechikishini yashiradi.

Mobil ishlanmada VSync sozlash

Mobil ishlanmada VSync grafik API'lar, o'yin dvigatellari va OS tizim sozlamalari orqali boshqariladi. iOS kamroq nazorat beradi, Android esa Vulkan va OpenGL ES orqali ko'proq. Rejim tanlovi ilova turiga bog'liq: o'yinlar, UI yoki video.

Unity va Unreal Engine da VSync

Unity QualitySettings.vSyncCount sozlamasidan foydalanadi: 0 — o'chirilgan, 1 — har bir VBlankda VSync, 2 — har ikkinchisida (FPS ikki barobar kamayadi). Unreal Engine da VSync r.VSync konsol buyrug'i va DefaultEngine.ini orqali boshqariladi. Mobil yig'ishlar uchun Unity da VSyncni o'chirish va o'z FPS cheklovchisidan foydalanish tavsiya etiladi, chunki Android SurfaceFlinger dagi o'rnatilgan VSync kutilmagan kechikishlarni yaratishi mumkin.

csharp
// Unity — VSync va FPS boshqaruvi
void Awake()
{
    // 0 = VSync o'chirilgan, 1 = VSync yoqilgan
    QualitySettings.vSyncCount = 0;
    // VSync o'rniga o'z FPS cheklovchisi
    Application.targetFrameRate = 60;
}

Vulkan va Metal da VSync

Vulkan VkSwapchainPresentInfo va presentMode orqali to'liq nazorat beradi: VK_PRESENT_MODE_FIFO_KHR — klassik VSync, VK_PRESENT_MODE_MAILBOX_KHR — kutishsiz uch marta buferlash, VK_PRESENT_MODE_IMMEDIATE_KHR — sinxronizatsiyasiz. iOS da Metal VSyncni CAMetalLayer.displaySyncEnabled orqali boshqaradi. iOS 14 dan boshlab, Apple arkada boshqaruvli o'yinlardan tashqari barcha ilovalar uchun standart sifatida displaySyncEnabled = true dan foydalanishni tavsiya qiladi.

RejimTavsifKechikish
FIFOVBlank kutish bilan klassik VSync1 kadr
MailboxUch marta buferlash, eski kadrlarni tashlash1–2 kadr
ImmediateSinxronizatsiyasiz, maksimal FPS0 kadr

VSyncsiz FPS ni cheklash

FPS cheklovchisi — VSync ga alternativ bo'lib, bunda ilova VBlankni kutmasdan kadr chastotasini dasturiy ravishda cheklaydi. Bu yondashuv bashorat qilinadigan kechikish beradi va displeyning yangilanish chastotasiga bog'liq emas. Android da FPS cheklash Choreographer orqali, iOS da esa chiqish vaqtini qo'lda boshqarish bilan CADisplayLink orqali amalga oshiriladi.

VSync va zamonaviy sinxronizatsiya texnologiyalari

An'anaviy VSync fundamental kamchilikka ega: u displeyning sobit yangilanish chastotasiga bog'liq. Agar GPU 60 Hz ekranda 45 FPS bersa, VSync 45 kadrni ko'rsata olmaydi — yo 30 ni ko'rsatadi (har ikkinchi VBlankni o'tkazib) yoki 60 va 30 o'rtasida notekis intervallar bilan almashadi. Bu stutter (qotish) yaratadi, bu o'yin tajribasini tearingdan ko'ra ko'proq buzadi.

Adaptive Sync (FreeSync, G-Sync, Apple ProMotion) bu muammoni displeyning yangilanish chastotasini ilova FPSiga mos ravishda dinamik o'zgartirish orqali hal qiladi. Ilova 47 FPS bersa, displey 47 Hz ga o'tadi — har bir kadr bir marta, yirtilish va qotishlarsiz ko'rsatiladi. iOS da ProMotion silliqlik va energiya sarfi o'rtasida muvozanat yaratib, avtomatik ravishda 24 dan 120 Hz gacha chastotani tanlaydi.

Mobil qurilmalarda Adaptive Sync standartga aylanmoqda: ProMotion bilan iPad Pro (2017+), LTPO displeyli Android flagmanlari (Samsung Galaxy S23 Ultra, Google Pixel 8 Pro) 1 dan 120 Hz gacha dinamik yangilanish chastotasini qo'llab-quvvatlaydi. Dasturchi uchun bu an'anaviy ma'noda VSync tizim boshqaruvi bilan almashtirilishini anglatadi — targetFrameRate ni o'rnatish kifoya, OS esa silliqlik va batareya quvvatining optimal muvozanati uchun yangilanish chastotasini o'zi sozlaydi.

Tez-tez so'raladigan savollar

Mobil o'yinlarda har doim VSync ni yoqish kerakmi?

Yo'q. Dinamik o'yinlarda (otishma, jang o'yinlari) VSync input lag ni sezilarli foyda bermasdan oshiradi — mobil OLED ekranlarda tearing displeyning kichik o'lchami tufayli kamroq seziladi. Oddiy o'yinlar va UI uchun VSync silliqlik hissini yaxshilaydi.

VSync mobil qurilma batareyasiga qanday ta'sir qiladi?

VSync energiya sarfini kamaytiradi, chunki GPU keraksiz kadrlarni renderlamaydi. VSync o'chirilganda GPU maksimal chastotada ishlaydi va har bir ko'rsatilmagan kadr energiya sarflaydi va qurilmani foydalanuvchiga foyda bermasdan isitadi.

VSync va FPS cheklovchisi o'rtasida qanday farq bor?

VSync kadr chiqishini displeyning VBlank bilan sinxronlashtiradi, FPS cheklovchisi esa oddiygina ilova kodida render chastotasini cheklaydi. FPS cheklovchisi tearingni bartaraf qilmaydi, lekin ekran chastotasiga bog'liq bo'lmagan bashorat qilinadigan kechikish beradi.

Nega VSync da FPS ikki barobar kamayishi mumkin?

GPU VBlankdan oldin kadrni tugatolmaganda, VBlank o'tkazib yuboriladi va kadr ikki yangilanish sikli davomida ko'rsatiladi. 60 Hz da bu 30 FPS beradi. Uch marta buferlash bu effektni yumshatadi, GPU ga kutishsiz keyingi kadrni boshlash imkonini beradi.

iOS va Android Adaptive Sync ni qo'llab-quvvatlaydimi?

Ha. iOS ProMotion (iPad Pro, iPhone 13 Pro+) 24–120 Hz dinamik chastotani qo'llab-quvvatlaydi. Android LTPO panellari orqali 1–120 Hz ni qo'llab-quvvatlaydi. Dasturchi buni qo'lda boshqarishi shart emas — tizim optimal chastotani avtomatik tanlaydi.

Xulosa

  • VSync — GPU ni displey bilan sinxronlashtiruvchi, screen tearingni bartaraf qiluvchi mexanizm
  • Ikki marta buferlash VBlank kutish bilan — vertikal sinxronizatsiyaning klassik amalga oshirilishi
  • Screen tearing — o'chirilgan VSync ning asosiy muammosi, ayniqsa yuqori FPS da seziladi
  • Input lag — VSync ning narxi, bir-ikki kadr kechikish qo'shadi
  • Uch marta buferlash stutterni kamaytiradi, lekin input lag ni oshiradi
  • Adaptive Sync (ProMotion, LTPO) — dinamik chastota bilan VSync ning zamonaviy o'rnini bosuvchisi
  • Mobil o'yinlar uchun bashorat qilinadigan kechikish uchun VSync o'rniga FPS cheklovchisi dan foydalaning

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing