VSync (ভার্টিকাল সিঙ্ক্রোনাইজেশন) — একটি প্রযুক্তি যা GPU-এর প্রতিটি নতুন ফ্রেমের আউটপুটকে ডিসপ্লে রিফ্রেশ রেটের সাথে সিঙ্ক্রোনাইজ করে, ছবি ছিঁড়ে যাওয়া দূর করে। Apple Metal ডকুমেন্টেশন অনুযায়ী, মোবাইল ডিভাইসে মসৃণ রেন্ডারিংয়ের জন্য VBlank-এর সাথে সিঙ্ক্রোনাইজেশন বাধ্যতামূলক। স্ক্রিন টিয়ারিং ঘটে যখন ফ্রেম ভার্টিকাল রিফ্রেশের সময় আপডেট হয় এবং VSync এই মিশ্রণ প্রতিরোধ করে।
মূল পয়েন্ট
VSync (ভার্টিকাল সিঙ্ক্রোনাইজেশন) — একটি হার্ডওয়্যার-সফটওয়্যার প্রক্রিয়া যা GPU-কে নতুন ফ্রেম আউটপুট করার আগে ভার্টিকাল ব্ল্যাঙ্কিং সিগন্যাল (VBlank) অপেক্ষা করতে বাধ্য করে। VSync ছাড়া, GPU যেকোনো সময় ফ্রেম পাঠাতে পারে, এমনকি যখন ডিসপ্লে বর্তমান ফ্রেম আঁকার মাঝখানে থাকে, ফলে অনুভূমিক রেখা বরাবর ছবি ছিঁড়ে যায়।
মোবাইল ডিভাইসে, VSync গ্রাফিক্স ড্রাইভার এবং অপারেটিং সিস্টেম স্তরে বাস্তবায়িত হয়। iOS Metal-এর মাধ্যমে VBlank সিঙ্ক্রোনাইজেশন ব্যবহার করে, Android SurfaceFlinger এবং BufferQueue-এর মাধ্যমে। ভার্টিকাল সিঙ্ক্রোনাইজেশন চালু থাকলে, অ্যাপ্লিকেশনের FPS ডিসপ্লে রিফ্রেশ রেট — ডিভাইস মডেল অনুযায়ী 60, 90 বা 120 Hz-এর বেশি হতে পারে না।
ভার্টিকাল সিঙ্ক্রোনাইজেশন শব্দটি 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 Hz-এ, VBlank প্রায় 1.4 ms স্থায়ী হয়। যদি GPU VBlank-এর আগে রেন্ডারিং সম্পূর্ণ করতে ব্যর্থ হয়, ফ্রেমটি বাদ দেওয়া হয় এবং ডিসপ্লে পূর্ববর্তী ফ্রেমটি আরও একটি চক্র দেখায় — এটি স্টাটার হিসেবে অনুভূত হয়।
ট্রিপল বাফারিং তৃতীয় বাফার যোগ করে GPU নিষ্ক্রিয়তার সমস্যা সমাধান করে। GPU পরবর্তী ফ্রেমটি অবিলম্বে রেন্ডার করা শুরু করতে পারে, এমনকি যদি ব্যাক বাফারের একটি VBlank-এর অপেক্ষায় থাকে। এটি VSync-এর সাথে FPS বাড়ায় কিন্তু একটি অতিরিক্ত ফ্রেম বিলম্ব যোগ করে। মোবাইল ডিভাইসে, ট্রিপল বাফারিং কিছু গেম ইঞ্জিনে এবং Mailbox মোডের মাধ্যমে Vulkan-এ ব্যবহৃত হয়।
VSync বন্ধ থাকলে সর্বোচ্চ FPS এবং ন্যূনতম ইনপুট ল্যাগ পাওয়া যায়, কিন্তু দৃশ্য আর্টিফ্যাক্টের মূল্যে। মোবাইল গেম এবং মসৃণ অ্যানিমেশনযুক্ত অ্যাপ্লিকেশনের জন্য, VSync এবং এটি বন্ধ করার মধ্যে পছন্দ হল ছবির স্বচ্ছতা এবং নিয়ন্ত্রণের প্রতিক্রিয়াশীলতার মধ্যে সমঝোতা।
স্ক্রিন টিয়ারিং — একটি অনুভূমিক বিভাজন যেখানে স্ক্রিনের উপরের অংশ পূর্ববর্তী ফ্রেম দেখায় এবং নীচের অংশ ইতিমধ্যে পরবর্তী ফ্রেম দেখায়। এটি ঘটে যখন GPU স্ক্যানআউটের মাঝখানে বাফার পরিবর্তন করে। মোবাইল ডিভাইসে, টিয়ারিং বিশেষ করে দ্রুত স্ক্রোলিং বা উচ্চ ফ্রেম হারের গতিশীল দৃশ্যে লক্ষণীয়। OLED ডিসপ্লে তাদের তাত্ক্ষণিক প্রতিক্রিয়ার সাথে LCD-এর তুলনায় টিয়ারিংকে আরও বৈপরীত্য করে তোলে।
টিয়ারিং-এর তীব্রতা FPS এবং রিফ্রেশ রেটের অনুপাতের উপর নির্ভর করে। 60 Hz ডিসপ্লেতে 60 FPS-এ, টিয়ারিং একটি স্থির রেখা হিসেবে দেখা যায়, যখন 60 Hz-এ 300 FPS-এ — একাধিক তরঙ্গায়িত বিভাজন হিসেবে যা উপরে থেকে নীচে চলে। FPS রিফ্রেশ রেটের সাপেক্ষে যত বেশি হবে, তত বেশি বিভাজন এবং তারা তত বেশি লক্ষণীয়।
ইনপুট ল্যাগ VSync-এর সাথে — বোতাম চাপা এবং স্ক্রিনে ফলাফল দেখার মধ্যে বিলম্ব। ভার্টিকাল সিঙ্ক্রোনাইজেশন গড়ে একটি ফ্রেম বিলম্ব (60 Hz-এ 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 Hz ডিসপ্লেতে 45 FPS আউটপুট করে, VSync 45 ফ্রেম দেখাতে পারে না — এটি 30 দেখায় (প্রতি দ্বিতীয় VBlank বাদ দিয়ে) বা অসম বিরতিতে 60 এবং 30-এর মধ্যে পরিবর্তন করে। এটি স্টাটার তৈরি করে, যা টিয়ারিং-এর চেয়ে বেশি গেমিং অভিজ্ঞতা নষ্ট করে।
অ্যাডাপ্টিভ সিঙ্ক (FreeSync, G-Sync, Apple ProMotion) অ্যাপ্লিকেশন FPS অনুযায়ী ডিসপ্লে রিফ্রেশ রেট গতিশীলভাবে পরিবর্তন করে এই সমস্যার সমাধান করে। যদি অ্যাপ্লিকেশন 47 FPS আউটপুট করে, ডিসপ্লে 47 Hz-এ সুইচ করে — প্রতিটি ফ্রেম ঠিক একবার দেখানো হয়, টিয়ারিং বা স্টাটার ছাড়া। iOS-এ ProMotion স্বয়ংক্রিয়ভাবে 24 থেকে 120 Hz পর্যন্ত ফ্রিকোয়েন্সি নির্বাচন করে, মসৃণতা এবং শক্তি খরচ ভারসাম্য করে।
মোবাইল ডিভাইসে, অ্যাডাপ্টিভ সিঙ্ক মানক হয়ে উঠছে: iPad Pro (2017+) ProMotion সহ, LTPO ডিসপ্লে সহ Android ফ্ল্যাগশিপ (Samsung Galaxy S23 Ultra, Google Pixel 8 Pro) 1 থেকে 120 Hz পর্যন্ত ডায়নামিক রিফ্রেশ রেট সমর্থন করে। ডেভেলপারের জন্য, এর অর্থ হল ঐতিহ্যবাহী অর্থে VSync সিস্টেম ম্যানেজমেন্ট দ্বারা প্রতিস্থাপিত হয় — targetFrameRate সেট করা যথেষ্ট, এবং OS নিজেই মসৃণতা এবং ব্যাটারি লাইফের সর্বোত্তম ভারসাম্যের জন্য রিফ্রেশ রেট সামঞ্জস্য করে।
সচরাচর জিজ্ঞাসিত প্রশ্ন
না। গতিশীল গেমের (শুটার, ফাইটিং) জন্য, VSync উল্লেখযোগ্য সুবিধা ছাড়া ইনপুট ল্যাগ বাড়ায় — মোবাইল OLED স্ক্রিনে টিয়ারিং ছোট ডিসপ্লে আকারের কারণে কম লক্ষণীয়। ক্যাজুয়াল গেম এবং UI-এর জন্য, VSync মসৃণতার ধারণা উন্নত করে।
VSync শক্তি খরচ হ্রাস করে কারণ GPU অপ্রয়োজনীয় ফ্রেম রেন্ডার করে না। VSync বন্ধ থাকলে, GPU সর্বোচ্চ ফ্রিকোয়েন্সিতে কাজ করে এবং প্রতিটি অপ্রদর্শিত ফ্রেম শক্তি নষ্ট করে এবং ব্যবহারকারীর উপকার ছাড়া ডিভাইস গরম করে।
VSync ফ্রেম আউটপুট ডিসপ্লের VBlank-এর সাথে সিঙ্ক্রোনাইজ করে, যখন FPS লিমিটার অ্যাপ্লিকেশন কোডে রেন্ডারিং ফ্রিকোয়েন্সি সীমাবদ্ধ করে। FPS লিমিটার টিয়ারিং দূর করে না কিন্তু স্ক্রিন হার্টজের সাথে আবদ্ধ না হয়ে পূর্বাভাসযোগ্য বিলম্ব দেয়।
যখন GPU VBlank-এর আগে ফ্রেম সম্পূর্ণ করতে ব্যর্থ হয়, VBlank বাদ দেওয়া হয় এবং ফ্রেম দুটি রিফ্রেশ চক্রের জন্য দেখানো হয়। 60 Hz-এ, এটি 30 FPS দেয়। ট্রিপল বাফারিং GPU-কে অপেক্ষা না করে পরবর্তী ফ্রেম শুরু করার অনুমতি দিয়ে এই প্রভাব কমায়।
হ্যাঁ। iOS ProMotion (iPad Pro, iPhone 13 Pro+) 24–120 Hz ডায়নামিক ফ্রিকোয়েন্সি সমর্থন করে। Android LTPO প্যানেলের মাধ্যমে 1–120 Hz সমর্থন করে। ডেভেলপারকে ম্যানুয়ালি এটি পরিচালনা করার প্রয়োজন নেই — সিস্টেম স্বয়ংক্রিয়ভাবে সর্বোত্তম ফ্রিকোয়েন্সি নির্বাচন করে।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন