المحرّكات الأصلية والخاصة

بدء استخدام Vulkan على Android

Vulkan هي واجهة برمجة التطبيقات الأساسية للرسومات منخفضة المستوى على Android. توفّر Vulkan أداءً مثاليًا للألعاب التي تنفّذ محرّك اللعبة وعارضها الخاصَّين.

لتنفيذ Vulkan بنجاح في محرك اللعبة، يجب:

  • تحديد أجهزة Android المطلوب استخدامها مع Vulkan
  • فهم المفاضلات بين دعم أجهزة Android القديمة
  • إضافة Vulkan إلى هدف إصدار Android
  • اختيار أداة تجميع لتظليل الصور لإنشاء SPIR-V لـ Vulkan
  • تحديد إصدار Vulkan API المتاح في وقت التشغيل
  • تعرَّف على كيفية تحسين عمليات عرض Vulkan باستخدام الملفات الشخصية Vulkan ووتيرة عرض الإطارات والتدوير المسبق.
  • اختيار أدوات الرسومات لتصحيح الأخطاء وتحليل الأداء
    ملاحظة: للحصول على معلومات عن استخدام Vulkan على نظام Android مع محركات ألعاب Unity أو Unreal، يُرجى الاطّلاع على ما يلي:
  • Vulkan على Unity
  • Vulkan على Unreal

اختيار الحد الأدنى من مواصفات جهاز Vulkan

يتوفّر Vulkan على نظام التشغيل Android بدءًا من Android 7.0 (المستوى 24 من واجهة برمجة التطبيقات). لا تتوافق بعض أجهزة Android التي تعمل بالإصدار 7.0 أو الإصدارات الأحدث من نظام التشغيل Android مع Vulkan. تحتاج إلى تحديد أجهزة Android المتوافقة مع Vulkan والتي تتوافق معها لعبتك.

الفيديوهات المقترَحة

استخدِم المواصفات التالية كحد أدنى من متطلبات دعم Vulkan:

  • يعمل الجهاز بالإصدار 10.0 من نظام التشغيل Android (المستوى 29 من واجهة برمجة التطبيقات) أو بإصدار أحدث.
  • الجهاز متوافق مع الإصدار 1.1 من واجهة Vulkan API أو الإصدارات الأحدث
  • يحتوي الجهاز على إمكانات وميزات متوافقة مع الملف الشخصي للإصدار الأساسي من Android لعام 2022.

التوافق مع الأجهزة القديمة

إذا كانت لعبتك مصمَّمة للتشغيل على مجموعة كبيرة من الأجهزة بمستويات مختلفة من إمكانيات الرسومات، قد تحتاج إلى إتاحة استخدام أجهزة أقدم من تلك الأجهزة الموصى بها في مقالة اختيار الحدّ الأدنى من مواصفات الأجهزة لـ Vulkan. قبل تقديم الدعم للأجهزة القديمة، عليك تقييم ما إذا كان Vulkan سيقدّم فوائد للعبتك. يمكن للألعاب التي تحتوي على عدد كبير من استدعاءات الرسم والتي تستخدم OpenGL ES أن ترى أعباءً كبيرة على برنامج التشغيل بسبب ارتفاع تكلفة إجراء استدعاءات الرسم ضمن OpenGL ES. ويمكن أن تصبح هذه الألعاب مقيّدة بوحدة المعالجة المركزية (CPU) بسبب قضاء أجزاء كبيرة من وقت عرض اللقطة في برنامج تشغيل الرسومات. يمكن أن تشهد الألعاب أيضًا انخفاضًا كبيرًا في أداء وحدة المعالجة المركزية (CPU) واستخدام الطاقة من خلال التبديل من OpenGL ES إلى Vulkan. ينطبق ذلك خاصةً إذا كانت لعبتك تتضمّن مشاهد معقّدة لا يمكنها استخدام التحسين الفعّال للحد من طلبات السحب. عند استهداف أجهزة قديمة، يجب تضمين دعم عرض OpenGL ES كإجراء احتياطي لأنّ بعض الأجهزة في قائمة الأجهزة المستهدفة قد تتضمن عمليات تنفيذ Vulkan لا يمكنها تشغيل لعبتك بشكل موثوق.

قد لا تحتاج إلى دعم الأجهزة القديمة المتوافقة مع Vulkan لأنها تفتقر إلى الأداء والميزات أو بسبب مشاكل في الثبات.

الأداء والميزات

قد لا توفِّر أجهزة Android القديمة المتوافقة مع Vulkan أداء العرض أو توافق الأجهزة مع الميزات اللازمة لتشغيل لعبتك. ويحتمل حدوث ذلك خصوصًا إذا كانت لعبتك تحتوي على رسومات عالية الدقة وكانت Vulkan هي واجهة برمجة التطبيقات الوحيدة التي تستهدفها على Android. يقتصر استخدام العديد من الأجهزة القديمة على الإصدار 1.0.3 من واجهة Vulkan API وغالبًا ما تفتقد إضافات Vulkan المستخدمة على نطاق واسع والمتاحة على الأجهزة الأكثر حداثة.

الثبات

قد تستخدم أجهزة Android القديمة برامج تشغيل Vulkan قديمة. قد تتضمّن إصدارات برامج التشغيل هذه أخطاءً قد تؤثر في استقرار لعبتك. يمكن أن يتضمن التغلب على أخطاء السائق قدرًا كبيرًا من وقت الاختبار والهندسة.

إضافة Vulkan إلى مشروعك

لإضافة Vulkan إلى مشروعك، عليك إجراء ما يلي:

  • تضمين عناوين Vulkan API
  • تجميع رمز أداة التظليل على SPIR-V
  • استدعاء واجهة برمجة تطبيقات Vulkan في وقت التشغيل

تضمين عناوين Vulkan API

يجب أن تتضمّن لعبتك ملفات رأس واجهة برمجة التطبيقات Vulkan لتجميع الرمز البرمجي الذي يستخدم Vulkan. يمكنك العثور على نسخة من عناوين Vulkan في Android NDK أو مجمّعة في إصدارات Vulkan SDK. ولا يتضمن أي إصدار خاص بـ NDK سوى عناوين Vulkan المتوفرة في وقت إصدار NDK. إذا كنت تستخدم عناوين Vulkan من NDK، عليك استخدام الإصدار 25 من NDK أو إصدار أحدث، والذي يتضمن ملفات العناوين التي تتوافق مع الإصدار 1.3 من Vulkan. تحتوي حزمة Vulkan SDK على أحدث إصدار من العناوين.

تجميع رمز أداة التظليل على SPIR-V

تتوقع واجهة برمجة تطبيقات Vulkan توفير برامج التظليل بتنسيق SPIR-V الثنائي المتوسط. يختلف هذا الاصطلاح عن OpenGL ES، حيث يمكنك إرسال رمز المصدر المكتوب بلغة تظليل OpenGL (GLSL) كسلاسل نصية. استخدِم برنامج تجميع المظلل لأخذ تعليمات برمجية مكتوبة بلغة أداة تظليل مثل GLSL أو لغة Shader Language (HLSL) وتجميعها في وحدات SPIR-V لاستخدامها مع Vulkan.

يمكن استخدام المحول البرمجي shaderc لتجميع برامج التظليل المكتوبة بلغة GLSL إلى SPIR-V. وإذا كانت لعبتك تستخدم HLSL، يتيح DirectXShaderCompiler استخدام مخرجات SPIR-V. في العادة، تجمّع برامج التظليل بلا اتصال بالإنترنت كجزء من عملية إنشاء مواد العرض للعبتك، وتدرج وحدات SPIR-V كجزء من مواد عرض وقت التشغيل.

استدعاء واجهة برمجة تطبيقات Vulkan في وقت التشغيل

لاستدعاء واجهة برمجة التطبيقات Vulkan، تحتاج لعبتك إلى الحصول على مؤشرات الوظائف لاستدعاءات واجهة برمجة تطبيقات Vulkan. وأبسط طريقة لإجراء ذلك هي الربط بمكتبة libvulkan.so المشتركة المضمّنة في NDK على Android. هناك عيبان في الربط مقابل المكتبة، هما: إرسال الوظائف الإضافية والقيود التي يتم حلّ مؤشرات دالة Vulkan API عليها تلقائيًا.

عند طلب إحدى وظائف واجهة برمجة التطبيقات Vulkan، يمرّ عنصر التحكم من خلال جدول إرسال تتم إدارته من خلال إنشاء يُطلق عليه اسم برنامج التحميل Vulkan. يستخدم Android أداة تحميل Vulkan الخاصة به وليس أداة تحميل LunarG. يُعد نظام التحميل هذا جزءًا من بنية طبقة واجهة برمجة تطبيقات Vulkan. يؤدي الربط بمكتبة النظام في وقت الإصدار إلى مستوى إرسال إضافي لطلب بيانات من واجهة برمجة التطبيقات. في حين أن النفقات العامة صغيرة، فقد تكون ملحوظة في الألعاب التي تُجري أعدادًا كبيرة من مكالمات Vulkan.

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

للحدّ من هذه المشاكل، عليك حل المؤشرات ديناميكيًا لجميع دوال Vulkan التي تنوي استخدامها في وقت التشغيل. تتمثل إحدى طرق تحقيق ذلك في استخدام مكتبة أدوات تحميل وصفية مفتوحة المصدر مثل volk. ومن خلال نموذج لعبة AGDKTunnel، يمكنك استخدام شبكة فولك لهذا الغرض. إذا كنت تستخدم مكتبة أداة تحميل وصفية، لا تضع رابطًا يؤدي إلى المكتبة المشتركة libvulkan.so في النصوص البرمجية للإصدار.

تحديد إصدار Vulkan API المتاح

يتوافق Android مع إصدارات واجهة Vulkan API التالية:

  • 1.0.3
  • 1.1
  • 1.3

يتم تحديد أعلى رقم إصدار لواجهة Vulkan API على جهاز معيّن من خلال إصدار Android ودعم برنامج تشغيل Vulkan.

إصدار Android

يعتمد دعم النظام الأساسي لإصدار واجهة برمجة التطبيقات Vulkan على إصدار أدنى من Android (مستوى واجهة برمجة التطبيقات):

  • الإصدار 1.3: Android 13.0 (المستوى 33) والإصدارات الأحدث
  • الإصدار 1.1: Android 10.0 (المستوى 29 من واجهة برمجة التطبيقات) والإصدارات الأحدث
  • 1.0.3: الإصدار 7.0 من Android (المستوى 24 من واجهة برمجة التطبيقات) والإصدارات الأحدث

دعم برامج تشغيل Vulkan

لا يضمن توافق نظام Android الأساسي لإصدار واجهة برمجة التطبيقات Vulkan أن يكون إصدار واجهة برمجة التطبيقات متوافقًا مع برنامج تشغيل Vulkan للجهاز. قد يتوافق جهاز يعمل بالإصدار 13 من نظام التشغيل Android مع الإصدار 1.1 فقط من واجهة برمجة تطبيقات Vulkan.

عند تهيئة Vulkan، لا تطلب إصدارًا من واجهة برمجة التطبيقات يكون أكبر من:

  • الحد الأقصى لإصدار Vulkan API لإصدار Android الذي يعمل على الجهاز
  • تم الإبلاغ عن إصدار Vulkan API من خلال vkEnumerateInstanceVersion.
  • إصدار Vulkan API الذي تم الإبلاغ عنه من خلال السمة apiVersion لبنية VkPhysicalDeviceProperties.

في ما يلي مثال على تحديد أعلى إصدار متوافق لواجهة برمجة تطبيقات Vulkan:

// Minimum Android API levels for Vulkan 1.3/1.1 version support
static constexpr int kMinimum_vk13_api_level = 33;
static constexpr int kMinimum_vk11_api_level = 29;

uint32_t GetHighestSupportedVulkanVersion(VkPhysicalDevice physical_device) {
  uint32_t instance_api_version = 0;
  vkEnumerateInstanceVersion(&instance_api_version);

  VkPhysicalDeviceProperties device_properties;
  vkGetPhysicalDeviceProperties(physical_device, &device_properties);

  // Instance and device versions don't have to match, use the lowest version
  // number for API support if they don't.
  const uint32_t driver_api_version =
      (instance_api_version < device_properties.apiVersion) ?
      instance_api_version : device_properties.apiVersion;

  const int device_api_level = android_get_device_api_level();
  if (device_api_level >= kMinimum_vk13_api_level &&
      driver_api_version >= VK_API_VERSION_1_3) {
    return VK_API_VERSION_1_3;
  } else if (device_api_level >= kMinimum_vk11_api_level &&
             driver_api_version >= VK_API_VERSION_1_1) {
    return VK_API_VERSION_1_1;
  }
  return VK_API_VERSION_1_0;
}

تحديد توافق ملف Vulkan الشخصي

ملفات Vulkan الشخصية هي ملفات JSON تحدد مجموعة من الميزات والإضافات والإمكانات والحد الأدنى للمعلمات التي يجب أن يدعمها جهاز Vulkan لتكون متوافقة مع الملف الشخصي. لتحديد ما إذا كان الجهاز متوافقًا مع ملف شخصي معيّن على Vulkan، مثل الملف الشخصي على Android Baseline لعام 2022، استخدِم مكتبة واجهة برمجة التطبيقات Vulkan Profile المفتوحة المصدر. يمكنك أيضًا تحليل ملف JSON للملف الشخصي بنفسك والاستعلام عن إمكانات الجهاز باستخدام واجهات برمجة تطبيقات Vulkan ذات الصلة لتحديد توافق الملف الشخصي.

ملفات Vulkan الشخصية

يستخدم Android Vulkan Profile الذي يحدد الميزات والإضافات المتوفرة لكل جهاز من الأجهزة التي تعمل بنظام Android.

الملف الشخصي الأساسي لنظام Android (ABP) هو المحاولة الأولى لإنشاء ملف Vulkan الشخصي. ABP2021 وABP2022 هما ملفات شخصية قديمة تهدف إلى تغطية أكثر من% 85 من الأجهزة النشطة في ذلك الوقت. لن يتم إصدار ABP جديد من الآن فصاعدًا.

Vulkan Profile for Android (VPA) هو ملف شخصي جديد للتطلع يهدف إلى تلبية احتياجات مطوري البرامج وتوفير ميزات متسقة في أسرع وقت يتمكن مطورو الأجهزة من تقديمها. إنّ VPA15_minimums هو الملف الشخصي الأول لنظام التشغيل Android 15 وسيتم طرح إصدار جديد من Android VPA كل عام لتغطية كل إصدار رئيسي من إصدارات Android.

تنفيذ وتيرة عرض اللقطات

تُعدّ وتيرة عرض اللقطة المناسبة جزءًا أساسيًا من تقديم تجربة لعب عالية الجودة. تتضمن مجموعة أدوات تطوير ألعاب Android مكتبة سرعة عرض اللقطات لمساعدة لعبتك في تحقيق السرعة الأمثل للقطات في الثانية. للحصول على مزيد من التفاصيل حول طريقة التنفيذ، يُرجى الاطّلاع على دمج ميزة "معدل سرعة إطارات Android" في عارض Vulkan.

تنفيذ التغيير المسبق

يمكن أن تظهر أجهزة Android باتجاهات متعدّدة. ويمكن أن يختلف اتجاه الجهاز عن اتجاه سطح العرض. وعلى عكس OpenGL ES على Android، لا يتعامل Vulkan مع أوجه الاختلاف بينهما. لفهم آلية عمل عملية الاتجاه والطريقة المثلى للتعامل مع اختلافات الاتجاه عند استخدام Vulkan، راجِع التعامل مع تدوير الجهاز باستخدام Vulkan قبل التدوير.

تحديد المشاكل وحلّها وملف عرض الملف الشخصي Vulkan

تتوفر أدوات متعددة لمساعدتك في تشخيص مشكلات العرض ومشكلات الأداء في رمز عرض Vulkan.

للحصول على مزيد من المعلومات حول أدوات Vulkan الخاصة بتصحيح الأخطاء وإنشاء الملفات التعريفية، يُرجى الاطّلاع على قسم الأدوات والميزات المتقدمة.

طبقات التحقق من Vulkan

طبقات التحقق من Vulkan هي مكتبات وقت تشغيل يمكن تفعيلها لفحص اتصالاتك بواجهة Vulkan API وتقديم تحذيرات أو أخطاء بشأن الاستخدام غير الصحيح أو غير الأمثل. تكون طبقات التحقق هذه غير نشطة تلقائيًا، لأنّ عملية التحقّق تضيف أعباء تشغيل أكثر من اللازم وتؤثّر في أداء لعبتك. للحصول على معلومات حول كيفية استخدام طبقات التحقّق من الصحة مع لعبتك، راجِع تصحيح الأخطاء باستخدام طبقة التحقّق.

أدوات التقاط الإطارات

استخدِم أدوات التقاط اللقطات لتسجيل وإعادة تشغيل طلبات بيانات Vulkan API التي تم إجراؤها أثناء إطار اللعبة. تتيح لك هذه الأدوات:

  • عرض معلومات وتصورات موارد الرسوم النشطة
  • اطّلِع على تسلسل طلبات البيانات من واجهة برمجة التطبيقات التي أجرتها لعبتك، واطّلِع على معلَمات واجهة برمجة التطبيقات.
  • استكشف حالة مسار الرسومات في وقت طلب الرسم
  • إنشاء عرض مرئي لنتائج العرض حتى طلب رسم محدّد في الإطار

استخدام أداة RenderDoc مفتوحة المصدر لالتقاط الإطارات من ألعاب تعمل على Android يدعم RenderDoc إمكانية التقاط الإطار لكل من Vulkan وOpenGL ES.

يمكن أيضًا استخدام أداة فحص وحدة معالجة الرسومات Android (AGI) لالتقاط إطارات Vulkan.

أدوات تحليل الأداء

يمكنك استخدام أدوات تحليل الأداء لفحص مشاكل العرض في لعبتك التي تتسبّب في انخفاض عدد اللقطات في الثانية. يقدم مورّدو وحدة معالجة الرسومات الفرديون أدوات مصمَّمة لوصف لعبتك وتقديم بيانات الأداء الخاصة ببنية وحدة معالجة الرسومات. يمكن أن تتباين خصائص الأداء والمعوقات في أداء لعبتك بشكل كبير عند عرضها على وحدات معالجة الرسومات من موردين مختلفين أو حتى على أجيال مختلفة من وحدة معالجة الرسومات من المورد نفسه.

يمكنك أيضًا استخدام أداة فحص وحدة معالجة الرسومات لنظام التشغيل Android لجمع بيانات الأداء وتحليلها. على عكس أدوات المورد، تتوافق أداة Android GPU Inspector مع العديد من وحدات معالجة الرسومات من المورِّدين المختلفين. ومع ذلك، لا تتوافق أداة فحص وحدة معالجة الرسومات من Android مع أجهزة Android القديمة وقد لا تكون متوافقة مع جميع الأجهزة الجديدة.

تحسين اختبار Vulkan باستخدام CTS-D

تستخدم الشركات المصنّعة للأجهزة التي تعمل بنظام التشغيل Android مجموعة اختبار التوافق (CTS) للمساعدة في ضمان توافق أجهزتها. شهادة CTS (CTS-D) المقدَّمة من المطوّرين هي اختبارات يرسلها مطوِّرو تطبيقات Android للتأكد من أنّ أجهزة Android المستقبلية تستوفي حالات الاستخدام وأنّها قادرة على تشغيل تطبيقاتها بسلاسة وبدون أخطاء.

إذا تمكنت من تشغيل خطأ جديد في تطبيق Vulkan يؤثر في أي جهاز محدد يعمل بنظام التشغيل Android، يمكنك إرسال اقتراح اختبار جديد يوضّح مشكلتك وطرق التحقق منها. ويضمن ذلك إصلاح المشكلة في تحديث مستقبلي للجهاز، كما يضمن عدم حدوث الخطأ نفسه لأي أجهزة أخرى.

راجِع عملية إرسال CTS للحصول على تعليمات مفصّلة حول كيفية إرسال اقتراح الاختبار.