VSync (वर्टिकल सिंक्रोनाइज़ेशन) — एक तकनीक जो GPU के प्रत्येक नए फ्रेम के आउटपुट को डिस्प्ले रिफ़्रेश रेट के साथ सिंक्रोनाइज़ करती है, जिससे इमेज टियरिंग समाप्त होती है। Apple Metal दस्तावेज़ीकरण के अनुसार, मोबाइल उपकरणों पर स्मूथ रेंडरिंग के लिए VBlank के साथ सिंक्रोनाइज़ेशन अनिवार्य है। स्क्रीन टियरिंग तब होती है जब फ्रेम वर्टिकल रीफ़्रेश के दौरान अपडेट होता है, और VSync इस मिक्सिंग को रोकता है।
मुख्य बिंदु
VSync (वर्टिकल सिंक्रोनाइज़ेशन) — एक हार्डवेयर-सॉफ़्टवेयर प्रक्रिया है जो GPU को नया फ्रेम आउटपुट करने से पहले वर्टिकल ब्लैंकिंग सिग्नल (VBlank) की प्रतीक्षा करने के लिए मजबूर करती है। VSync के बिना, GPU किसी भी समय फ्रेम भेज सकता है, तब भी जब डिस्प्ले वर्तमान फ्रेम को ड्रा कर रहा हो, जिससे क्षैतिज रेखा के साथ इमेज टियरिंग होती है।
मोबाइल उपकरणों पर, VSync ग्राफ़िक्स ड्राइवर और ऑपरेटिंग सिस्टम स्तर पर कार्यान्वित किया जाता है। iOS Metal के माध्यम से VBlank सिंक्रोनाइज़ेशन का उपयोग करता है, Android SurfaceFlinger और BufferQueue के माध्यम से। वर्टिकल सिंक्रोनाइज़ेशन चालू होने पर, एप्लिकेशन का FPS डिस्प्ले रिफ़्रेश रेट — डिवाइस मॉडल के अनुसार 60, 90 या 120 हर्ट्ज़ से अधिक नहीं हो सकता।
वर्टिकल सिंक्रोनाइज़ेशन शब्द CRT मॉनिटर के कार्य सिद्धांत से आया है, जहाँ एक इलेक्ट्रॉन बीम ऊपर से नीचे तक लाइन दर लाइन इमेज बनाता था। फ्रेम पूरा होने के बाद, बीम ऊपरी बाएँ कोने पर लौटता था — इस क्षण को वर्टिकल ब्लैंकिंग कहा जाता था। आधुनिक LCD और OLED डिस्प्ले ने इस शब्द को बनाए रखा है, हालाँकि वे भौतिक रूप से अलग तरह से काम करते हैं।
GPU बैक बफ़र में फ्रेम रेंडर करता है, जबकि डिस्प्ले फ्रंट बफ़र से पढ़ता है। VSync सुनिश्चित करता है कि बफ़र स्वैप केवल VBlank के क्षण में हो — जब डिस्प्ले ने वर्तमान फ्रेम दिखाना समाप्त कर लिया है और अगले के लिए तैयार है। इस प्रक्रिया को VBlank सिंक्रोनाइज़ेशन के साथ डबल बफ़रिंग कहा जाता है।
डबल बफ़रिंग दो बफ़र का उपयोग करती है: फ्रंट बफ़र स्क्रीन पर प्रदर्शित होता है, और बैक बफ़र जिसमें GPU वर्तमान फ्रेम लिखता है। जब फ्रेम तैयार होता है, बफ़र आपस में बदल जाते हैं। VSync चालू होने पर, यह स्वैप निकटतम VBlank तक स्थगित कर दिया जाता है। यदि फ्रेम VBlank से पहले तैयार है तो GPU निष्क्रिय रहता है, जिससे प्रदर्शन कम होता है लेकिन टियरिंग समाप्त होती है।
// OpenGL — WGL_EXT_swap_control के माध्यम से VSync चालू करना
HDC hdc = wglGetCurrentDC();
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT =
reinterpret_cast<PFNWGLSWAPINTERVALEXTPROC>(
wglGetProcAddress("wglSwapIntervalEXT"));
wglSwapIntervalEXT(1); // 1 = VSync चालू, 0 = बंद
VBlank — वर्तमान फ्रेम की अंतिम पंक्ति और अगले फ्रेम की पहली पंक्ति के बीच एक छोटा अंतराल। इस क्षण के दौरान, डिस्प्ले पिक्सेल अपडेट नहीं करता है, और बफ़र स्वैप बिना कलाकृतियों के होता है। VBlank की अवधि रिफ़्रेश रेट पर निर्भर करती है: 1080p डिस्प्ले पर 60 हर्ट्ज़ पर, VBlank लगभग 1.4 ms रहता है। यदि GPU VBlank से पहले रेंडरिंग पूरी नहीं कर पाता है, तो फ्रेम छोड़ दिया जाता है और डिस्प्ले पिछले फ्रेम को एक और चक्र दिखाता है — इसे स्टटर के रूप में महसूस किया जाता है।
ट्रिपल बफ़रिंग तीसरा बफ़र जोड़कर GPU निष्क्रियता की समस्या को हल करती है। GPU अगले फ्रेम को तुरंत रेंडर करना शुरू कर सकता है, भले ही बैक बफ़र में से एक VBlank की प्रतीक्षा कर रहा हो। यह VSync के साथ FPS बढ़ाता है लेकिन एक अतिरिक्त फ्रेम विलंब जोड़ता है। मोबाइल उपकरणों पर, ट्रिपल बफ़रिंग कुछ गेम इंजन और Mailbox मोड के माध्यम से Vulkan में उपयोग की जाती है।
VSync बंद होने पर अधिकतम FPS और न्यूनतम इनपुट लैग मिलता है, लेकिन दृश्य कलाकृतियों की कीमत पर। मोबाइल गेम और स्मूथ एनिमेशन वाले एप्लिकेशन के लिए, VSync और इसे बंद करने के बीच चुनाव इमेज स्पष्टता और नियंत्रण प्रतिक्रिया के बीच समझौता है।
स्क्रीन टियरिंग — एक क्षैतिज विभाजन जहाँ स्क्रीन का ऊपरी हिस्सा पिछला फ्रेम दिखाता है और निचला हिस्सा पहले से ही अगला फ्रेम दिखाता है। यह तब होता है जब GPU स्कैनआउट के बीच में बफ़र बदलता है। मोबाइल उपकरणों पर, टियरिंग विशेष रूप से तेज़ स्क्रॉलिंग या उच्च फ्रेम दर वाले गतिशील दृश्यों में ध्यान देने योग्य है। OLED डिस्प्ले अपनी तत्काल प्रतिक्रिया के साथ टियरिंग को LCD की तुलना में अधिक कंट्रास्टी बनाते हैं।
टियरिंग की तीव्रता FPS और रिफ़्रेश रेट के अनुपात पर निर्भर करती है। 60 हर्ट्ज़ डिस्प्ले पर 60 FPS पर, टियरिंग एक स्थिर रेखा के रूप में दिखाई देती है, जबकि 60 हर्ट्ज़ पर 300 FPS पर — कई लहरदार विभाजन के रूप में जो ऊपर से नीचे की ओर बढ़ते हैं। FPS रिफ़्रेश रेट के सापेक्ष जितना अधिक होगा, उतने ही अधिक विभाजन और वे उतने ही अधिक ध्यान देने योग्य होंगे।
इनपुट लैग VSync के साथ — बटन दबाने और स्क्रीन पर परिणाम देखने के बीच का विलंब। वर्टिकल सिंक्रोनाइज़ेशन औसतन एक फ्रेम विलंब (60 हर्ट्ज़ पर 16.7 ms) जोड़ता है, और ट्रिपल बफ़रिंग के साथ — दो फ्रेम तक। सामान्य एप्लिकेशन के लिए यह विलंब अगोचर है, लेकिन शूटर, फ़ाइटिंग और रिदम गेम के लिए यह महत्वपूर्ण है: पेशेवर 8 ms के विलंब को भी नोटिस करते हैं।
NVIDIA (2024) के शोध के अनुसार, CS:GO में VSync के बिना 60 FPS पर औसत इनपुट लैग 22 ms है, और VSync के साथ — 39 ms। 144 FPS पर, अंतर क्रमशः 14 बनाम 18 ms तक कम हो जाता है। मोबाइल प्लेटफ़ॉर्म पर, VSync इनपुट लैग कम महत्वपूर्ण है क्योंकि टच इनपुट में हार्डवेयर टचस्क्रीन विलंबता (10–30 ms) अतिरिक्त सिंक्रोनाइज़ेशन विलंब को छिपा देती है।
मोबाइल डेवलपमेंट में, VSync को ग्राफ़िक्स API, गेम इंजन और OS सिस्टम सेटिंग्स के माध्यम से नियंत्रित किया जाता है। iOS कम नियंत्रण प्रदान करता है, Android Vulkan और OpenGL ES के माध्यम से अधिक प्रदान करता है। मोड का चुनाव एप्लिकेशन प्रकार पर निर्भर करता है: गेम, UI या वीडियो।
Unity QualitySettings.vSyncCount सेटिंग का उपयोग करता है: 0 — बंद, 1 — हर VBlank पर VSync, 2 — हर दूसरे VBlank पर (FPS आधा)। Unreal Engine में, VSync को r.VSync कंसोल कमांड और DefaultEngine.ini के माध्यम से नियंत्रित किया जाता है। मोबाइल बिल्ड के लिए, Unity में VSync बंद करने और कस्टम FPS लिमिटर का उपयोग करने की अनुशंसा की जाती है, क्योंकि Android SurfaceFlinger में बिल्ट-इन VSync अप्रत्याशित विलंब पैदा कर सकता है।
// Unity — VSync और FPS नियंत्रण
void Awake()
{
// 0 = VSync बंद, 1 = VSync चालू
QualitySettings.vSyncCount = 0;
// VSync के बजाय कस्टम FPS लिमिटर
Application.targetFrameRate = 60;
}
Vulkan VkSwapchainPresentInfo और presentMode के माध्यम से पूर्ण नियंत्रण देता है: VK_PRESENT_MODE_FIFO_KHR — क्लासिक VSync, VK_PRESENT_MODE_MAILBOX_KHR — बिना प्रतीक्षा के ट्रिपल बफ़रिंग, VK_PRESENT_MODE_IMMEDIATE_KHR — बिना सिंक्रोनाइज़ेशन के। Metal iOS में CAMetalLayer.displaySyncEnabled के माध्यम से VSync को नियंत्रित करता है। iOS 14 से शुरू करके, Apple आर्केड-शैली गेम को छोड़कर सभी एप्लिकेशन के लिए डिफ़ॉल्ट रूप से displaySyncEnabled = true उपयोग करने की अनुशंसा करता है।
| मोड | विवरण | विलंब |
|---|---|---|
| FIFO | VBlank प्रतीक्षा के साथ क्लासिक VSync | 1 फ्रेम |
| Mailbox | ट्रिपल बफ़रिंग, पुराने फ्रेम को हटाना | 1–2 फ्रेम |
| Immediate | बिना सिंक्रोनाइज़ेशन, अधिकतम FPS | 0 फ्रेम |
FPS लिमिटर — VSync का एक विकल्प जहाँ एप्लिकेशन VBlank की प्रतीक्षा किए बिना प्रोग्रामेटिक रूप से फ्रेम दर को सीमित करता है। यह दृष्टिकोण पूर्वानुमानित विलंब देता है और डिस्प्ले रिफ़्रेश रेट पर निर्भर नहीं करता है। Android पर, FPS लिमिटिंग Choreographer के माध्यम से कार्यान्वित की जाती है, iOS पर — CADisplayLink के माध्यम से मैन्युअल आउटपुट टाइमिंग नियंत्रण के साथ।
पारंपरिक VSync में एक मूलभूत कमी है: यह डिस्प्ले की निश्चित रिफ़्रेश रेट से बंधा होता है। यदि GPU 60 हर्ट्ज़ डिस्प्ले पर 45 FPS आउटपुट करता है, तो VSync 45 फ्रेम नहीं दिखा सकता — यह 30 दिखाता है (हर दूसरे VBlank को छोड़कर) या असमान अंतराल पर 60 और 30 के बीच बदलता है। यह स्टटर पैदा करता है, जो टियरिंग से अधिक गेमिंग अनुभव को खराब करता है।
अडैप्टिव सिंक (FreeSync, G-Sync, Apple ProMotion) एप्लिकेशन FPS के अनुसार डिस्प्ले रिफ़्रेश रेट को गतिशील रूप से बदलकर इस समस्या को हल करता है। यदि एप्लिकेशन 47 FPS आउटपुट करता है, तो डिस्प्ले 47 हर्ट्ज़ पर स्विच करता है — प्रत्येक फ्रेम बिल्कुल एक बार दिखाया जाता है, बिना टियरिंग या स्टटर के। iOS में ProMotion स्वचालित रूप से 24 से 120 हर्ट्ज़ तक की आवृत्ति चुनता है, स्मूथनेस और पावर खपत को संतुलित करता है।
मोबाइल उपकरणों पर, अडैप्टिव सिंक मानक बन रहा है: iPad Pro (2017+) ProMotion के साथ, LTPO डिस्प्ले वाले Android फ़्लैगशिप (Samsung Galaxy S23 Ultra, Google Pixel 8 Pro) 1 से 120 हर्ट्ज़ तक डायनामिक रिफ़्रेश रेट का समर्थन करते हैं। डेवलपर के लिए, इसका मतलब है कि पारंपरिक अर्थों में VSync को सिस्टम प्रबंधन द्वारा बदल दिया जाता है — targetFrameRate सेट करना पर्याप्त है, और OS स्वयं स्मूथनेस और बैटरी जीवन के इष्टतम संतुलन के लिए रिफ़्रेश रेट को समायोजित करता है।
अक्सर पूछे जाने वाले प्रश्न
नहीं। गतिशील गेम (शूटर, फ़ाइटिंग) के लिए, VSync बिना किसी महत्वपूर्ण लाभ के इनपुट लैग बढ़ाता है — मोबाइल OLED स्क्रीन पर टियरिंग छोटे डिस्प्ले आकार के कारण कम ध्यान देने योग्य है। कैज़ुअल गेम और UI के लिए, VSync स्मूथनेस की धारणा में सुधार करता है।
VSync पावर खपत कम करता है क्योंकि GPU अनावश्यक फ्रेम रेंडर नहीं करता है। VSync बंद होने पर, GPU अधिकतम आवृत्ति पर काम करता है, और हर अप्रदर्शित फ्रेम ऊर्जा बर्बाद करता है और उपयोगकर्ता को लाभ पहुँचाए बिना डिवाइस को गर्म करता है।
VSync फ्रेम आउटपुट को डिस्प्ले के VBlank के साथ सिंक्रोनाइज़ करता है, जबकि FPS लिमिटर एप्लिकेशन कोड में रेंडरिंग आवृत्ति को सीमित करता है। FPS लिमिटर टियरिंग को समाप्त नहीं करता है लेकिन स्क्रीन हर्ट्ज़ से बंधे बिना पूर्वानुमानित विलंब देता है।
जब GPU VBlank से पहले फ्रेम पूरा नहीं कर पाता है, तो VBlank छोड़ दिया जाता है और फ्रेम दो रिफ़्रेश चक्रों के लिए दिखाया जाता है। 60 हर्ट्ज़ पर, यह 30 FPS देता है। ट्रिपल बफ़रिंग GPU को बिना प्रतीक्षा के अगला फ्रेम शुरू करने की अनुमति देकर इस प्रभाव को कम करती है।
हाँ। iOS ProMotion (iPad Pro, iPhone 13 Pro+) 24–120 हर्ट्ज़ डायनामिक आवृत्ति का समर्थन करता है। Android LTPO पैनल के माध्यम से 1–120 हर्ट्ज़ का समर्थन करता है। डेवलपर को इसे मैन्युअल रूप से प्रबंधित करने की आवश्यकता नहीं है — सिस्टम स्वचालित रूप से इष्टतम आवृत्ति चुनता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें