VSync — ما هو، مبدأ العمل والإعداد

المؤلف: IT Sectr نُشر: 2026-04-01 وقت القراءة: 8 دق

VSync (المزامنة الرأسية) — تقنية تزامن إخراج كل إطار جديد من GPU مع معدل تحديث الشاشة، مما يزيل تمزق الصورة. وفقًا توثيق Apple Metal، المزامنة مع VBlank إلزامية للعرض السلس على الأجهزة المحمولة. تمزق الشاشة يحدث عندما يتم تحديث الإطار أثناء المسح الرأسي، ويمنع VSync هذا الخلط.

أهم النقاط

  • VSync — آلية مزامنة GPU مع الشاشة عبر انتظار VBlank
  • تمزق الشاشة — قطع مرئي في الصورة عندما يتغير الإطار في منتصف مسح الشاشة
  • المخزن المؤقت المزدوج — الطريقة الرئيسية لتنفيذ VSync مع front buffer و back buffer
  • تأخر الإدخال — تأثير جانبي لـ VSync يزيد التأخير بين إجراء المستخدم والعرض
  • المزامنة التكيفية — بديل حديث لـ VSync يزيل عيوبه

ما هو VSync

VSync (المزامنة الرأسية) — آلية برمجية-مادية تجبر GPU على انتظار إشارة المسح الرأسي (VBlank) قبل عرض إطار جديد. بدون VSync، يمكن لـ GPU إرسال الإطارات في أي وقت، حتى عندما تكون الشاشة في منتصف رسم الإطار الحالي، مما يؤدي إلى تمزق الصورة على طول خط أفقي.

في الأجهزة المحمولة، يتم تنفيذ VSync على مستوى برنامج تشغيل الرسومات ونظام التشغيل. يستخدم iOS مزامنة VBlank عبر Metal، Android عبر SurfaceFlinger و BufferQueue. عند تفعيل المزامنة الرأسية، لا يمكن أن يتجاوز FPS للتطبيق معدل تحديث الشاشة — 60 أو 90 أو 120 هرتز حسب طراز الجهاز.

مصطلح المزامنة الرأسية يأتي من مبدأ عمل شاشات CRT، حيث كان شعاع الإلكترون يرسم الصورة سطرًا بسطر من الأعلى إلى الأسفل. بعد إكمال الإطار، كان الشعاع يعود إلى الزاوية العلوية اليسرى — كانت هذه اللحظة تسمى المسح الرأسي. شاشات LCD و OLED الحديثة احتفظت بهذا المصطلح، رغم أنها تعمل فيزيائيًا بشكل مختلف.

كيف تعمل المزامنة الرأسية

GPU يعرض الإطارات في back buffer، بينما تقرأ الشاشة من front buffer. يضمن VSync أن تبديل المخازن المؤقتة (swap) يحدث فقط في لحظة VBlank — عندما تكون الشاشة قد انتهت من عرض الإطار الحالي ومستعدة للإطار التالي. هذه الآلية تسمى المخزن المؤقت المزدوج مع المزامنة عبر VBlank.

آلية المخزن المؤقت المزدوج

المخزن المؤقت المزدوج يستخدم مخزنين: front buffer يُعرض على الشاشة، و back buffer يكتب فيه GPU الإطار الحالي. عندما يكون الإطار جاهزًا، يتم تبادل المخازن. مع تفعيل VSync، يتم تأجيل هذا التبادل حتى أقرب VBlank. يظل GPU خاملاً إذا كان الإطار جاهزًا قبل VBlank، مما يقلل الأداء ولكنه يزيل التمزق.

cpp
// OpenGL — تفعيل VSync عبر WGL_EXT_swap_control
HDC hdc = wglGetCurrentDC();
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT =
    reinterpret_cast<PFNWGLSWAPINTERVALEXTPROC>(
        wglGetProcAddress("wglSwapIntervalEXT"));
wglSwapIntervalEXT(1); // 1 = VSync مفعل، 0 = معطل

وقت انتظار VBlank

VBlank — فاصل زمني قصير بين آخر سطر من الإطار الحالي وأول سطر من الإطار التالي. في هذه اللحظة، لا تقوم الشاشة بتحديث البكسلات، ويحدث تبادل المخازن بدون تشوهات. مدة VBlank تعتمد على معدل التحديث: عند 60 هرتز على شاشة 1080p، يستمر VBlank حوالي 1.4 مللي ثانية. إذا لم يتمكن GPU من إكمال العرض قبل VBlank، يتم تخطي الإطار، وتعرض الشاشة الإطار السابق لدورة أخرى — ويُدرك ذلك على أنه توقف.

المخزن المؤقت الثلاثي يحل مشكلة خمول GPU بإضافة مخزن ثالث. يمكن لـ GPU البدء في عرض الإطار التالي فورًا حتى لو كان أحد المخازن الخلفية ينتظر VBlank. هذا يزيد FPS مع VSync ولكنه يضيف إطار تأخير إضافي. على الأجهزة المحمولة، يُستخدم المخزن المؤقت الثلاثي في بعض محركات الألعاب وفي Vulkan عبر وضع Mailbox.

المشكلات الرئيسية بدون VSync

تعطيل VSync يعطي أقصى FPS وأقل تأخر إدخال، ولكن على حساب تشوهات بصرية. للألعاب المحمولة والتطبيقات ذات الرسوم المتحركة السلسة، الاختيار بين VSync وتعطيله هو مفاضلة بين وضوح الصورة واستجابة التحكم.

تمزق الشاشة (Screen Tearing)

تمزق الشاشة — قطع أفقي حيث يظهر الجزء العلوي من الشاشة الإطار السابق والجزء السفلي يظهر الإطار التالي بالفعل. يحدث هذا عندما يبدل GPU المخازن في منتصف دورة مسح الشاشة. على الأجهزة المحمولة، يكون التمزق ملحوظًا بشكل خاص أثناء التمرير السريع أو في المشاهد الديناميكية ذات معدلات الإطارات العالية. شاشات OLED مع استجابتها الفورية تجعل التمزق أكثر تباينًا مقارنة بـ LCD.

شدة التمزق تعتمد على نسبة FPS إلى معدل التحديث. عند 60 FPS على شاشة 60 هرتز، يظهر التمزق كخط ثابت واحد، بينما عند 300 FPS على 60 هرتز — كتمزقات متموجة متعددة تتحرك من الأعلى إلى الأسفل. كلما زاد FPS بالنسبة لمعدل التحديث، زادت التمزقات وأصبحت أكثر وضوحًا.

تأخر الإدخال (Input Lag)

تأخر الإدخال مع VSync — التأخير بين الضغط على زر وعرض النتيجة على الشاشة. المزامنة الرأسية تضيف في المتوسط إطارًا واحدًا من التأخير (16.7 مللي ثانية عند 60 هرتز)، ومع المخزن المؤقت الثلاثي — حتى إطارين. للتطبيقات العادية، هذا التأخير غير ملحوظ، ولكن لألعاب التصويب والقتال وألعاب الإيقاع هو حرج: المحترفون يلاحظون تأخيرًا حتى 8 مللي ثانية.

وفقًا لبحث NVIDIA (2024)، متوسط تأخر الإدخال في CS:GO عند 60 FPS بدون VSync هو 22 مللي ثانية، ومع VSync — 39 مللي ثانية. عند 144 FPS، يتقلص الفرق إلى 14 مقابل 18 مللي ثانية على التوالي. على المنصات المحمولة، تأخر إدخال VSync أقل حرجًا بسبب الإدخال اللمسي، حيث أن زمن استجابة شاشة اللمس (10–30 مللي ثانية) يخفي التأخير الإضافي للمزامنة.

إعداد VSync في تطوير التطبيقات المحمولة

في تطوير التطبيقات المحمولة، يتم التحكم في VSync عبر واجهات برمجة الرسومات ومحركات الألعاب وإعدادات نظام التشغيل. يوفر iOS تحكمًا أقل، بينما يوفر Android تحكمًا أكثر عبر Vulkan و OpenGL ES. اختيار الوضع يعتمد على نوع التطبيق: ألعاب أو واجهة مستخدم أو فيديو.

VSync في Unity و Unreal Engine

Unity يستخدم إعداد QualitySettings.vSyncCount: 0 — معطل، 1 — VSync في كل VBlank، 2 — في كل ثاني VBlank (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 افتراضيًا لجميع التطبيقات باستثناء ألعاب التحكم في الأروقة.

الوضعالوصفالتأخير
FIFOVSync كلاسيكي مع انتظار VBlankإطار واحد
Mailboxمخزن مؤقت ثلاثي، تجاهل الإطارات القديمة1–2 إطار
Immediateبدون مزامنة، أقصى FPS0 إطار

تحديد FPS بدون VSync

محدد FPS — بديل لـ VSync حيث يحد التطبيق من معدل الإطارات برمجيًا دون انتظار VBlank. هذا النهج يعطي تأخيرًا متوقعًا ولا يعتمد على معدل تحديث الشاشة. على Android، يتم تنفيذ تحديد FPS عبر Choreographer، على iOS — عبر CADisplayLink مع التحكم اليدوي في وقت الإخراج.

VSync وتقنيات المزامنة الحديثة

VSync التقليدي له عيب أساسي: إنه مرتبط بمعدل تحديث ثابت للشاشة. إذا أصدر GPU 45 FPS على شاشة 60 هرتز، لا يمكن لـ VSync عرض 45 إطارًا — يعرض 30 (متخطيًا كل ثاني VBlank) أو يتناوب بين 60 و 30 بفواصل غير متساوية. هذا يخلق توقفًا يفسد تجربة اللعبة أكثر من التمزق.

المزامنة التكيفية (FreeSync, G-Sync, Apple ProMotion) تحل هذه المشكلة بتغيير معدل تحديث الشاشة ديناميكيًا وفقًا لـ FPS للتطبيق. إذا أصدر التطبيق 47 FPS، تتحول الشاشة إلى 47 هرتز — يُعرض كل إطار مرة واحدة بالضبط، بدون تمزق أو توقف. ProMotion في iOS يختار تلقائيًا ترددًا من 24 إلى 120 هرتز، موازنًا بين السلاسة و استهلاك الطاقة.

على الأجهزة المحمولة، أصبحت المزامنة التكيفية معيارًا: iPad Pro (2017+) مع ProMotion، هواتف Android الرائدة بشاشات LTPO (Samsung Galaxy S23 Ultra, Google Pixel 8 Pro) تدعم معدل تحديث ديناميكي من 1 إلى 120 هرتز. للمطور، هذا يعني أن VSync بالمعنى التقليدي يُستبدل بإدارة النظام — يكفي ضبط targetFrameRate، ونظام التشغيل نفسه يضبط معدل التحديث لتحقيق التوازن الأمثل بين السلاسة وعمر البطارية.

الأسئلة الشائعة

هل يجب دائمًا تشغيل VSync في الألعاب المحمولة؟

لا. للألعاب الديناميكية (ألعاب التصويب، ألعاب القتال)، يزيد VSync من تأخر الإدخال دون فائدة كبيرة — التمزق على شاشات OLED المحمولة أقل وضوحًا بسبب صغر حجم الشاشة. للألعاب العادية وواجهات المستخدم، يحسن VSync إدراك السلاسة.

كيف يؤثر VSync على بطارية الجهاز المحمول؟

VSync يقلل استهلاك الطاقة لأن GPU لا يعرض إطارات غير ضرورية. عند تعطيل VSync، يعمل GPU بأقصى تردد، وكل إطار غير معروض يهدر الطاقة ويسخن الجهاز دون فائدة للمستخدم.

ما الفرق بين VSync ومحدد FPS؟

VSync يزامن إخراج الإطارات مع VBlank للشاشة، بينما محدد FPS ببساطة يحد من تردد العرض في كود التطبيق. محدد FPS لا يزيل التمزق ولكنه يعطي تأخيرًا متوقعًا دون ارتباط بتردد الشاشة.

لماذا يمكن أن ينخفض FPS إلى النصف مع VSync؟

عندما لا يتمكن GPU من إكمال إطار قبل VBlank، يتم تخطي VBlank ويُعرض الإطار لدورتي تحديث. على 60 هرتز، هذا يعطي 30 FPS. المخزن المؤقت الثلاثي يخفف هذا التأثير بالسماح لـ GPU ببدء الإطار التالي دون انتظار.

هل تدعم iOS و Android المزامنة التكيفية؟

نعم. iOS ProMotion (iPad Pro, iPhone 13 Pro+) يدعم ترددًا ديناميكيًا 24–120 هرتز. Android عبر شاشات LTPO يدعم 1–120 هرتز. لا يحتاج المطور لإدارة هذا يدويًا — النظام يختار التردد الأمثل تلقائيًا.

الخلاصة

  • VSync — آلية مزامنة GPU مع الشاشة تزيل تمزق الشاشة
  • المخزن المؤقت المزدوج مع انتظار VBlank — التنفيذ الكلاسيكي للمزامنة الرأسية
  • تمزق الشاشة — المشكلة الرئيسية لتعطيل VSync، خاصة الملحوظة عند FPS عالٍ
  • تأخر الإدخال — ثمن VSync، يضيف إطارًا إلى إطارين من التأخير
  • المخزن المؤقت الثلاثي يقلل التوقف ولكنه يزيد تأخر الإدخال
  • المزامنة التكيفية (ProMotion, LTPO) — بديل حديث لـ VSync بتردد ديناميكي
  • للألعاب المحمولة، استخدم محدد FPS بدلاً من VSync لتأخير متوقع

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا