VSync — τι είναι, αρχή λειτουργίας και ρύθμιση

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-04-01 Χρόνος ανάγνωσης: 8 λεπ

VSync (Vertical Synchronization) — τεχνολογία που συγχρονίζει την έξοδο κάθε νέου καρέ GPU με τον ρυθμό ανανέωσης της οθόνης, εξαλείφοντας το σκίσιμο της εικόνας. Σύμφωνα με το Apple Metal Documentation, ο συγχρονισμός με VBlank είναι υποχρεωτικός για ομαλή απόδοση σε κινητές συσκευές. Screen tearing προκύπτει όταν το καρέ ενημερώνεται κατά τη διάρκεια της κατακόρυφης σάρωσης και το VSync αποτρέπει αυτή την ανάμειξη.

Κύρια σημεία

  • VSync — μηχανισμός συγχρονισμού GPU με τον ρυθμό ανανέωσης οθόνης μέσω αναμονής VBlank
  • Screen tearing — ορατό σκίσιμο εικόνας όταν το καρέ αλλάζει στη μέση της σάρωσης οθόνης
  • Διπλή προσωρινή αποθήκευση — κύρια μέθοδος υλοποίησης VSync με front buffer και back buffer
  • Input lag — παρενέργεια του VSync, αυξάνει την καθυστέρηση μεταξύ ενέργειας χρήστη και εμφάνισης
  • Προσαρμοστικός συγχρονισμός — σύγχρονη εναλλακτική του VSync, εξαλείφοντας τα μειονεκτήματά του

Τι είναι το VSync

VSync (Vertical Synchronization) — μηχανισμός υλικού-λογισμικού που αναγκάζει την GPU να περιμένει το σήμα κατακόρυφης απόσβεσης (VBlank) πριν εμφανίσει ένα νέο καρέ. Χωρίς VSync, η GPU μπορεί να στέλνει καρέ οποιαδήποτε στιγμή, ακόμα και όταν η οθόνη βρίσκεται σε διαδικασία απόδοσης του τρέχοντος καρέ, οδηγώντας σε σκίσιμο εικόνας κατά μήκος μιας οριζόντιας γραμμής.

Σε κινητές συσκευές, το VSync υλοποιείται σε επίπεδο προγράμματος οδήγησης γραφικών και λειτουργικού συστήματος. Το iOS χρησιμοποιεί συγχρονισμό VBlank μέσω Metal, το Android μέσω SurfaceFlinger και BufferQueue. Με ενεργοποιημένο τον κατακόρυφο συγχρονισμό, το FPS της εφαρμογής δεν μπορεί να υπερβεί τον ρυθμό ανανέωσης της οθόνης — 60, 90 ή 120 Hz ανάλογα με το μοντέλο συσκευής.

Ο όρος κατακόρυφος συγχρονισμός προέρχεται από τον μηχανισμό λειτουργίας των οθονών CRT, όπου η δέσμη ηλεκτρονίων σχεδίαζε την εικόνα γραμμή προς γραμμή από πάνω προς τα κάτω. Μετά την ολοκλήρωση του καρέ, η δέσμη επέστρεφε στην επάνω αριστερή γωνία — αυτή η στιγμή ονομαζόταν κατακόρυφη απόσβεση. Οι σύγχρονες οθόνες LCD και OLED διατήρησαν αυτόν τον όρο, αν και φυσικά λειτουργούν διαφορετικά.

Πώς λειτουργεί ο κατακόρυφος συγχρονισμός

GPU αποδίδει καρέ στο back buffer, ενώ η οθόνη διαβάζει από το front buffer. Το VSync εγγυάται ότι η εναλλαγή buffer (swap) γίνεται μόνο τη στιγμή VBlank — όταν η οθόνη έχει ολοκληρώσει την εμφάνιση του τρέχοντος καρέ και είναι έτοιμη για το επόμενο. Αυτός ο μηχανισμός ονομάζεται διπλή προσωρινή αποθήκευση με συγχρονισμό μέσω VBlank.

Μηχανισμός διπλής προσωρινής αποθήκευσης

Διπλή προσωρινή αποθήκευση χρησιμοποιεί δύο buffer: front buffer, που εμφανίζεται στην οθόνη, και back buffer, όπου η GPU γράφει το τρέχον καρέ. Όταν το καρέ είναι έτοιμο, οι buffer ανταλλάσσουν θέσεις. Με ενεργοποιημένο VSync, αυτή η εναλλαγή καθυστερεί μέχρι το πλησιέστερο VBlank. Η GPU παραμένει ανενεργή αν το καρέ είναι έτοιμο πριν από το VBlank, μειώνοντας την απόδοση αλλά εξαλείφοντας το tearing.

cpp
// OpenGL — ενεργοποίηση VSync μέσω WGL_EXT_swap_control
HDC hdc = wglGetCurrentDC();
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT =
    reinterpret_cast<PFNWGLSWAPINTERVALEXTPROC>(
        wglGetProcAddress("wglSwapIntervalEXT"));
wglSwapIntervalEXT(1); // 1 = VSync ενεργοποιημένο, 0 = απενεργοποιημένο

Χρόνος αναμονής VBlank

VBlank — ένα σύντομο χρονικό διάστημα μεταξύ της τελευταίας γραμμής του τρέχοντος καρέ και της πρώτης γραμμής του επόμενου. Αυτή τη στιγμή, η οθόνη δεν ενημερώνει pixels και η εναλλαγή buffer γίνεται χωρίς τεχνουργήματα. Η διάρκεια του VBlank εξαρτάται από τον ρυθμό ανανέωσης: στα 60 Hz σε οθόνη 1080p, το VBlank διαρκεί περίπου 1.4 ms. Αν η GPU δεν προλάβει να ολοκληρώσει την απόδοση πριν από το VBlank, το καρέ παραλείπεται και η οθόνη εμφανίζει το προηγούμενο καρέ για έναν ακόμα κύκλο — αυτό γίνεται αντιληπτό ως τραύλισμα (stutter).

Τριπλή προσωρινή αποθήκευση λύνει το πρόβλημα αδράνειας της GPU προσθέτοντας έναν τρίτο buffer. Η GPU μπορεί να ξεκινήσει αμέσως την απόδοση του επόμενου καρέ, ακόμα κι αν ένας από τους back buffer περιμένει VBlank. Αυτό αυξάνει το FPS με VSync, αλλά προσθέτει ένα επιπλέον καρέ καθυστέρησης. Σε κινητές συσκευές, η τριπλή προσωρινή αποθήκευση χρησιμοποιείται σε ορισμένες μηχανές παιχνιδιών και στο Vulkan μέσω λειτουργίας Mailbox.

Κύρια προβλήματα χωρίς VSync

Απενεργοποιημένο VSync δίνει μέγιστο FPS και ελάχιστο input lag, αλλά με κόστος οπτικών τεχνουργημάτων. Για κινητά παιχνίδια και εφαρμογές με ομαλή κίνηση, η επιλογή μεταξύ VSync και απενεργοποίησής του είναι ένας συμβιβασμός μεταξύ ευκρίνειας εικόνας και ανταπόκρισης ελέγχου.

Σκίσιμο εικόνας (Screen Tearing)

Screen tearing — οριζόντιο σκίσιμο όπου το πάνω μέρος της οθόνης δείχνει το προηγούμενο καρέ και το κάτω μέρος ήδη το επόμενο. Αυτό συμβαίνει όταν η GPU αλλάζει buffer στη μέση του κύκλου σάρωσης οθόνης. Σε κινητές συσκευές, το tearing είναι ιδιαίτερα αισθητό κατά τη γρήγορη κύλιση ή σε δυναμικές σκηνές με υψηλό ρυθμό καρέ. Οθόνες OLED με την άμεση απόκρισή τους κάνουν το tearing πιο έντονο σε σύγκριση με LCD.

Η ένταση του tearing εξαρτάται από την αναλογία FPS προς ρυθμό ανανέωσης. Στα 60 FPS σε οθόνη 60 Hz, το tearing εμφανίζεται ως μία στατική γραμμή, ενώ στα 300 FPS στα 60 Hz — ως πολλαπλά κυματοειδή σκισίματα που κινούνται από πάνω προς τα κάτω. Όσο υψηλότερο είναι το FPS σε σχέση με τον ρυθμό ανανέωσης, τόσο περισσότερα σκισίματα και τόσο πιο ορατά είναι.

Καθυστέρηση εισόδου (Input Lag)

Input lag στο VSync — η καθυστέρηση μεταξύ του πατήματος ενός κουμπιού και της εμφάνισης του αποτελέσματος στην οθόνη. Ο κατακόρυφος συγχρονισμός προσθέτει κατά μέσο όρο ένα καρέ καθυστέρησης (16.7 ms στα 60 Hz), και με τριπλή προσωρινή αποθήκευση — έως δύο καρέ. Για περιστασιακές εφαρμογές, αυτή η καθυστέρηση είναι απαρατήρητη, αλλά για shooter, παιχνίδια μάχης και ρυθμού είναι κρίσιμη: οι επαγγελματίες αντιλαμβάνονται ακόμα και 8 ms καθυστέρηση.

Σύμφωνα με έρευνα της NVIDIA (2024), το μέσο input lag στο CS:GO στα 60 FPS χωρίς VSync είναι 22 ms, και με VSync — 39 ms. Στα 144 FPS η διαφορά μειώνεται σε 14 vs 18 ms αντίστοιχα. Σε κινητές πλατφόρμες, το input lag του VSync είναι λιγότερο κρίσιμο λόγω της αφής, όπου η καθυστέρηση υλικού της οθόνης αφής (10–30 ms) καλύπτει την πρόσθετη καθυστέρηση συγχρονισμού.

Ρύθμιση VSync στην ανάπτυξη κινητών

Στην ανάπτυξη κινητών, το VSync διαχειρίζεται μέσω γραφικών API, μηχανών παιχνιδιών και ρυθμίσεων συστήματος OS. Το iOS παρέχει λιγότερο έλεγχο, το Android περισσότερο μέσω Vulkan και OpenGL ES. Η επιλογή λειτουργίας εξαρτάται από τον τύπο εφαρμογής: παιχνίδια, UI ή βίντεο.

VSync στο Unity και Unreal Engine

Unity χρησιμοποιεί τη ρύθμιση QualitySettings.vSyncCount: 0 — απενεργοποιημένο, 1 — VSync σε κάθε VBlank, 2 — σε κάθε δεύτερο (FPS μειώνεται στο μισό). Στο Unreal Engine, το VSync διαχειρίζεται μέσω της εντολής κονσόλας r.VSync και DefaultEngine.ini. Για κινητές εκδόσεις, συνιστάται η απενεργοποίηση του VSync στο Unity και η χρήση δικού σας περιοριστή FPS, καθώς το ενσωματωμένο VSync στο Android SurfaceFlinger μπορεί να δημιουργήσει απρόβλεπτες καθυστερήσεις.

csharp
// Unity — διαχείριση VSync και FPS
void Awake()
{
    // 0 = VSync απενεργοποιημένο, 1 = VSync ενεργοποιημένο
    QualitySettings.vSyncCount = 0;
    // Δικός σας περιοριστής FPS αντί για VSync
    Application.targetFrameRate = 60;
}

VSync στο Vulkan και Metal

Vulkan δίνει πλήρη έλεγχο μέσω VkSwapchainPresentInfo και presentMode: VK_PRESENT_MODE_FIFO_KHR — κλασικό VSync, VK_PRESENT_MODE_MAILBOX_KHR — τριπλή προσωρινή αποθήκευση χωρίς αναμονή, VK_PRESENT_MODE_IMMEDIATE_KHR — χωρίς συγχρονισμό. Metal στο iOS διαχειρίζεται το VSync μέσω CAMetalLayer.displaySyncEnabled. Από το iOS 14, η Apple συνιστά τη χρήση displaySyncEnabled = true από προεπιλογή για όλες τις εφαρμογές εκτός από παιχνίδια με χειριστήρια arcade.

ΛειτουργίαΠεριγραφήΚαθυστέρηση
FIFOΚλασικό VSync με αναμονή VBlank1 καρέ
MailboxΤριπλή προσωρινή αποθήκευση, απόρριψη παλαιών καρέ1–2 καρέ
ImmediateΧωρίς συγχρονισμό, μέγιστο FPS0 καρέ

Περιορισμός FPS χωρίς VSync

Περιοριστής FPS — εναλλακτική του VSync όπου η εφαρμογή περιορίζει τον ρυθμό καρέ προγραμματιστικά, χωρίς αναμονή VBlank. Αυτή η προσέγγιση παρέχει προβλέψιμη καθυστέρηση και δεν εξαρτάται από τον ρυθμό ανανέωσης οθόνης. Στο Android, ο περιορισμός FPS υλοποιείται μέσω Choreographer, στο iOS — μέσω CADisplayLink με χειροκίνητο έλεγχο χρόνου εξόδου.

VSync και σύγχρονες τεχνολογίες συγχρονισμού

Παραδοσιακό VSync έχει ένα θεμελιώδες μειονέκτημα: είναι δεμένο με σταθερό ρυθμό ανανέωσης οθόνης. Αν η GPU παράγει 45 FPS σε οθόνη 60 Hz, το VSync δεν μπορεί να εμφανίσει 45 καρέ — εμφανίζει 30 (παραλείποντας κάθε δεύτερο VBlank) ή εναλλάσσεται μεταξύ 60 και 30 με άνισα διαστήματα. Αυτό δημιουργεί τραύλισμα (stutter), που χαλάει την εμπειρία παιχνιδιού περισσότερο από το tearing.

Adaptive Sync (FreeSync, G-Sync, Apple ProMotion) λύνει αυτό το πρόβλημα αλλάζοντας δυναμικά τον ρυθμό ανανέωσης οθόνης σύμφωνα με το FPS της εφαρμογής. Αν η εφαρμογή παράγει 47 FPS, η οθόνη αλλάζει στα 47 Hz — κάθε καρέ εμφανίζεται ακριβώς μία φορά, χωρίς σκισίματα και τραύλισμα. Το ProMotion στο iOS επιλέγει αυτόματα συχνότητα από 24 έως 120 Hz, εξισορροπώντας την ομαλότητα και την κατανάλωση ενέργειας.

Σε κινητές συσκευές, το Adaptive Sync γίνεται πρότυπο: iPad Pro (2017+) με ProMotion, κορυφαία Android με οθόνες LTPO (Samsung Galaxy S23 Ultra, Google Pixel 8 Pro) υποστηρίζουν δυναμικό ρυθμό ανανέωσης από 1 έως 120 Hz. Για τον προγραμματιστή, αυτό σημαίνει ότι το VSync με την παραδοσιακή έννοια αντικαθίσταται από διαχείριση συστήματος — αρκεί να ορίσετε targetFrameRate και το OS θα προσαρμόσει μόνο του τον ρυθμό ανανέωσης για βέλτιστη ισορροπία ομαλότητας και διάρκειας μπαταρίας.

Συχνές ερωτήσεις

Πρέπει πάντα να ενεργοποιώ το VSync σε κινητά παιχνίδια;

Όχι. Σε δυναμικά παιχνίδια (shooter, παιχνίδια μάχης) το VSync αυξάνει το input lag χωρίς σημαντικό όφελος — το tearing σε κινητές οθόνες OLED είναι λιγότερο αισθητό λόγω του μικρού μεγέθους οθόνης. Για περιστασιακά παιχνίδια και UI, το VSync βελτιώνει την αντίληψη ομαλότητας.

Πώς επηρεάζει το VSync την μπαταρία κινητής συσκευής;

Το VSync μειώνει την κατανάλωση ενέργειας, επειδή η GPU δεν αποδίδει περιττά καρέ. Με απενεργοποιημένο VSync, η GPU λειτουργεί στη μέγιστη συχνότητα και κάθε μη εμφανιζόμενο καρέ σπαταλά ενέργεια και θερμαίνει τη συσκευή χωρίς όφελος για τον χρήστη.

Ποια είναι η διαφορά μεταξύ VSync και περιοριστή FPS;

Το VSync συγχρονίζει την έξοδο καρέ με το VBlank της οθόνης, ενώ ο περιοριστής FPS απλά περιορίζει τη συχνότητα απόδοσης στον κώδικα εφαρμογής. Ο περιοριστής FPS δεν εξαλείφει το tearing, αλλά παρέχει προβλέψιμη καθυστέρηση χωρίς σύνδεση με τον ρυθμό ανανέωσης οθόνης.

Γιατί το FPS μπορεί να μειωθεί στο μισό με VSync;

Όταν η GPU δεν προλαβαίνει να ολοκληρώσει το καρέ πριν από το VBlank, το VBlank παραλείπεται και το καρέ εμφανίζεται για δύο κύκλους ανανέωσης. Στα 60 Hz αυτό δίνει 30 FPS. Η τριπλή προσωρινή αποθήκευση μετριάζει αυτό το φαινόμενο, επιτρέποντας στην GPU να ξεκινήσει το επόμενο καρέ χωρίς αναμονή.

Υποστηρίζουν iOS και Android το Adaptive Sync;

Ναι. Το iOS ProMotion (iPad Pro, iPhone 13 Pro+) υποστηρίζει δυναμική συχνότητα 24–120 Hz. Το Android μέσω πάνελ LTPO υποστηρίζει 1–120 Hz. Ο προγραμματιστής δεν χρειάζεται να το διαχειρίζεται χειροκίνητα — το σύστημα επιλέγει αυτόματα τη βέλτιστη συχνότητα.

Σύνοψη

  • VSync — μηχανισμός συγχρονισμού GPU με οθόνη, εξαλείφει το screen tearing
  • Διπλή προσωρινή αποθήκευση με αναμονή VBlank — κλασική υλοποίηση κατακόρυφου συγχρονισμού
  • Screen tearing — κύριο πρόβλημα απενεργοποιημένου VSync, ιδιαίτερα ορατό σε υψηλό FPS
  • Input lag — το τίμημα του VSync, προσθέτει ένα-δύο καρέ καθυστέρησης
  • Τριπλή προσωρινή αποθήκευση μειώνει το τραύλισμα, αλλά αυξάνει το input lag
  • Adaptive Sync (ProMotion, LTPO) — σύγχρονη αντικατάσταση VSync με δυναμικό ρυθμό ανανέωσης
  • Για κινητά παιχνίδια, χρησιμοποιήστε περιοριστή FPS αντί για VSync για προβλέψιμη καθυστέρηση

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης