VSync — apa itu, prinsip kerja dan pengaturan

Penulis: IT Sectr Diterbitkan: 2026-04-01 Waktu membaca: 8 mnt

VSync (Vertical Synchronization) — teknologi yang menyinkronkan output setiap frame GPU baru dengan refresh rate layar, menghilangkan robekan gambar. Menurut Apple Metal Documentation, sinkronisasi dengan VBlank wajib untuk rendering yang mulus pada perangkat mobile. Screen tearing terjadi ketika frame diperbarui selama scan vertikal, dan VSync mencegah pencampuran ini.

Poin Utama

  • VSync — mekanisme sinkronisasi GPU dengan refresh rate layar melalui penantian VBlank
  • Screen tearing — robekan gambar yang terlihat ketika frame berubah di tengah scan layar
  • Buffering ganda — metode utama implementasi VSync dengan front buffer dan back buffer
  • Input lag — efek samping VSync, meningkatkan penundaan antara aksi pengguna dan tampilan
  • Sinkronisasi adaptif — alternatif modern untuk VSync, menghilangkan kekurangannya

Apa itu VSync

VSync (Vertical Synchronization) — mekanisme perangkat keras-perangkat lunak yang memaksa GPU untuk menunggu sinyal pemadaman vertikal (VBlank) sebelum menampilkan frame baru. Tanpa VSync, GPU dapat mengirim frame kapan saja, bahkan ketika layar sedang merender frame saat ini, yang menyebabkan robekan gambar di sepanjang garis horizontal.

Pada perangkat mobile, VSync diimplementasikan pada level driver grafis dan sistem operasi. iOS menggunakan sinkronisasi VBlank melalui Metal, Android melalui SurfaceFlinger dan BufferQueue. Dengan sinkronisasi vertikal diaktifkan, FPS aplikasi tidak dapat melebihi refresh rate layar — 60, 90 atau 120 Hz tergantung model perangkat.

Istilah sinkronisasi vertikal berasal dari mekanisme kerja monitor CRT, di mana sinar elektron menggambar gambar baris demi baris dari atas ke bawah. Setelah frame selesai, sinar kembali ke sudut kiri atas — momen ini disebut pemadaman vertikal. Layar LCD dan OLED modern mempertahankan istilah ini, meskipun secara fisik bekerja berbeda.

Bagaimana cara kerja sinkronisasi vertikal

GPU merender frame di back buffer, sementara layar membaca dari front buffer. VSync menjamin bahwa pertukaran buffer (swap) hanya terjadi pada saat VBlank — ketika layar telah selesai menampilkan frame saat ini dan siap untuk frame berikutnya. Mekanisme ini disebut buffering ganda dengan sinkronisasi melalui VBlank.

Mekanisme buffering ganda

Buffering ganda menggunakan dua buffer: front buffer, ditampilkan di layar, dan back buffer, tempat GPU menulis frame saat ini. Ketika frame siap, buffer bertukar tempat. Dengan VSync aktif, pertukaran ini ditunda hingga VBlank terdekat. GPU tetap diam jika frame siap sebelum VBlank, yang mengurangi kinerja tetapi menghilangkan tearing.

cpp
// OpenGL — mengaktifkan VSync melalui WGL_EXT_swap_control
HDC hdc = wglGetCurrentDC();
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT =
    reinterpret_cast<PFNWGLSWAPINTERVALEXTPROC>(
        wglGetProcAddress("wglSwapIntervalEXT"));
wglSwapIntervalEXT(1); // 1 = VSync aktif, 0 = nonaktif

Waktu tunggu VBlank

VBlank — interval waktu singkat antara baris terakhir frame saat ini dan baris pertama frame berikutnya. Pada saat ini, layar tidak memperbarui piksel, dan pertukaran buffer terjadi tanpa artefak. Durasi VBlank tergantung pada refresh rate: pada 60 Hz di layar 1080p, VBlank berlangsung sekitar 1.4 ms. Jika GPU tidak menyelesaikan rendering sebelum VBlank, frame dilewati, dan layar menampilkan frame sebelumnya untuk satu siklus lagi — ini dirasakan sebagai kegagapan (stutter).

Buffering tiga kali lipat memecahkan masalah diamnya GPU dengan menambahkan buffer ketiga. GPU dapat memulai rendering frame berikutnya segera, bahkan jika salah satu back buffer sedang menunggu VBlank. Ini meningkatkan FPS dengan VSync, tetapi menambah satu frame penundaan ekstra. Pada perangkat mobile, buffering tiga kali lipat digunakan di beberapa mesin game dan di Vulkan melalui mode Mailbox.

Masalah utama tanpa VSync

VSync dimatikan memberikan FPS maksimum dan input lag minimum, tetapi dengan mengorbankan artefak visual. Untuk game mobile dan aplikasi dengan animasi halus, pilihan antara VSync dan mematikannya adalah kompromi antara ketajaman gambar dan responsivitas kontrol.

Robekan Gambar (Screen Tearing)

Screen tearing — robekan horizontal di mana bagian atas layar menampilkan frame sebelumnya, dan bagian bawah sudah menampilkan frame berikutnya. Ini terjadi ketika GPU mengganti buffer di tengah siklus scan layar. Pada perangkat mobile, tearing sangat terlihat saat scrolling cepat atau di adegan dinamis dengan frame rate tinggi. Layar OLED dengan respons instannya membuat tearing lebih kontras dibandingkan dengan LCD.

Intensitas tearing tergantung pada rasio FPS terhadap refresh rate. Pada 60 FPS di layar 60 Hz, tearing muncul sebagai satu garis statis, dan pada 300 FPS di 60 Hz — sebagai beberapa robekan bergelombang yang bergerak dari atas ke bawah. Semakin tinggi FPS relatif terhadap refresh rate, semakin banyak robekan dan semakin terlihat.

Keterlambatan Input (Input Lag)

Input lag pada VSync — penundaan antara menekan tombol dan menampilkan hasil di layar. Sinkronisasi vertikal menambah rata-rata satu frame penundaan (16.7 ms pada 60 Hz), dan dengan buffering tiga kali lipat — hingga dua frame. Untuk aplikasi kasual, penundaan ini tidak terlihat, tetapi untuk penembak, game pertarungan, dan game ritme, ini kritis: profesional merasakan keterlambatan bahkan 8 ms.

Menurut penelitian NVIDIA (2024), rata-rata input lag di CS:GO pada 60 FPS tanpa VSync adalah 22 ms, dan dengan VSync — 39 ms. Pada 144 FPS perbedaan berkurang menjadi 14 vs 18 ms masing-masing. Pada platform mobile, input lag VSync kurang kritis karena input sentuh, di mana penundaan perangkat keras layar sentuh (10–30 ms) menutupi penundaan sinkronisasi tambahan.

Pengaturan VSync dalam pengembangan mobile

Dalam pengembangan mobile, VSync dikelola melalui API grafis, mesin game, dan pengaturan sistem OS. iOS memberikan kontrol lebih sedikit, Android lebih banyak melalui Vulkan dan OpenGL ES. Pemilihan mode tergantung pada jenis aplikasi: game, UI, atau video.

VSync di Unity dan Unreal Engine

Unity menggunakan pengaturan QualitySettings.vSyncCount: 0 — dimatikan, 1 — VSync setiap VBlank, 2 — setiap kedua (FPS berkurang setengah). Di Unreal Engine, VSync dikelola melalui perintah konsol r.VSync dan DefaultEngine.ini. Untuk build mobile, disarankan mematikan VSync di Unity dan menggunakan pembatas FPS sendiri, karena VSync bawaan di Android SurfaceFlinger dapat menciptakan penundaan yang tidak terduga.

csharp
// Unity — manajemen VSync dan FPS
void Awake()
{
    // 0 = VSync nonaktif, 1 = VSync aktif
    QualitySettings.vSyncCount = 0;
    // Pembatas FPS sendiri alih-alih VSync
    Application.targetFrameRate = 60;
}

VSync di Vulkan dan Metal

Vulkan memberikan kontrol penuh melalui VkSwapchainPresentInfo dan presentMode: VK_PRESENT_MODE_FIFO_KHR — VSync klasik, VK_PRESENT_MODE_MAILBOX_KHR — buffering tiga kali lipat tanpa menunggu, VK_PRESENT_MODE_IMMEDIATE_KHR — tanpa sinkronisasi. Metal di iOS mengelola VSync melalui CAMetalLayer.displaySyncEnabled. Mulai iOS 14, Apple merekomendasikan penggunaan displaySyncEnabled = true secara default untuk semua aplikasi kecuali game dengan kontrol arkade.

ModeDeskripsiPenundaan
FIFOVSync klasik dengan penantian VBlank1 frame
MailboxBuffering tiga kali lipat, membuang frame lama1–2 frame
ImmediateTanpa sinkronisasi, FPS maksimum0 frame

Pembatasan FPS tanpa VSync

Pembatas FPS — alternatif untuk VSync di mana aplikasi membatasi frame rate secara terprogram, tanpa menunggu VBlank. Pendekatan ini memberikan penundaan yang dapat diprediksi dan tidak tergantung pada refresh rate layar. Di Android, pembatasan FPS diimplementasikan melalui Choreographer, di iOS — melalui CADisplayLink dengan kontrol waktu output manual.

VSync dan teknologi sinkronisasi modern

VSync tradisional memiliki kelemahan mendasar: ia terikat pada refresh rate tetap layar. Jika GPU menghasilkan 45 FPS di layar 60 Hz, VSync tidak dapat menampilkan 45 frame — ia menampilkan 30 (melewatkan setiap VBlank kedua) atau bergantian antara 60 dan 30 dengan interval yang tidak merata. Ini menciptakan kegagapan (stutter), yang merusak pengalaman bermain game lebih dari tearing.

Adaptive Sync (FreeSync, G-Sync, Apple ProMotion) memecahkan masalah ini dengan secara dinamis mengubah refresh rate layar sesuai dengan FPS aplikasi. Jika aplikasi menghasilkan 47 FPS, layar beralih ke 47 Hz — setiap frame ditampilkan tepat satu kali, tanpa robekan dan kegagapan. ProMotion di iOS secara otomatis memilih frekuensi 24 hingga 120 Hz, menyeimbangkan kehalusan dan konsumsi daya.

Pada perangkat mobile, Adaptive Sync menjadi standar: iPad Pro (2017+) dengan ProMotion, flagship Android dengan layar LTPO (Samsung Galaxy S23 Ultra, Google Pixel 8 Pro) mendukung refresh rate dinamis dari 1 hingga 120 Hz. Bagi pengembang, ini berarti VSync dalam arti tradisional digantikan oleh manajemen sistem — cukup atur targetFrameRate, dan OS akan menyesuaikan refresh rate untuk keseimbangan optimal antara kehalusan dan masa pakai baterai.

Pertanyaan yang sering diajukan

Apakah selalu perlu mengaktifkan VSync di game mobile?

Tidak. Di game dinamis (penembak, game pertarungan) VSync meningkatkan input lag tanpa manfaat signifikan — tearing di layar OLED mobile kurang terlihat karena ukuran layar yang kecil. Untuk game kasual dan UI, VSync meningkatkan persepsi kehalusan.

Bagaimana pengaruh VSync terhadap baterai perangkat mobile?

VSync mengurangi konsumsi daya, karena GPU tidak merender frame yang tidak perlu. Dengan VSync dimatikan, GPU bekerja pada frekuensi maksimum, dan setiap frame yang tidak ditampilkan membuang energi dan memanaskan perangkat tanpa manfaat bagi pengguna.

Apa perbedaan antara VSync dan pembatas FPS?

VSync menyinkronkan output frame dengan VBlank layar, sedangkan pembatas FPS hanya membatasi frekuensi rendering dalam kode aplikasi. Pembatas FPS tidak menghilangkan tearing, tetapi memberikan penundaan yang dapat diprediksi tanpa keterikatan pada refresh rate layar.

Mengapa FPS bisa turun setengah dengan VSync?

Ketika GPU tidak dapat menyelesaikan frame sebelum VBlank, VBlank dilewati, dan frame ditampilkan selama dua siklus refresh. Pada 60 Hz ini menghasilkan 30 FPS. Buffering tiga kali lipat mengurangi efek ini, memungkinkan GPU memulai frame berikutnya tanpa menunggu.

Apakah iOS dan Android mendukung Adaptive Sync?

Ya. iOS ProMotion (iPad Pro, iPhone 13 Pro+) mendukung frekuensi dinamis 24–120 Hz. Android melalui panel LTPO mendukung 1–120 Hz. Pengembang tidak perlu mengelola ini secara manual — sistem memilih frekuensi optimal secara otomatis.

Kesimpulan

  • VSync — mekanisme sinkronisasi GPU dengan layar, menghilangkan screen tearing
  • Buffering ganda dengan penantian VBlank — implementasi klasik sinkronisasi vertikal
  • Screen tearing — masalah utama VSync dimatikan, terutama terlihat pada FPS tinggi
  • Input lag — harga untuk VSync, menambah satu-dua frame penundaan
  • Buffering tiga kali lipat mengurangi kegagapan, tetapi meningkatkan input lag
  • Adaptive Sync (ProMotion, LTPO) — pengganti modern VSync dengan refresh rate dinamis
  • Untuk game mobile, gunakan pembatas FPS daripada VSync untuk penundaan yang dapat diprediksi

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga