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

بدء استخدام 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 بدءًا من الإصدار 7.0 (مستوى واجهة برمجة التطبيقات 24). لا تدعم كل أجهزة Android التي تعمل بالإصدار 7.0 من نظام التشغيل Android أو إصدار أحدث واجهة برمجة التطبيقات Vulkan. عليك تحديد أجهزة Android المتوافقة مع Vulkan التي تتوافق معها لعبتك.

الاقتراحات

استخدِم المواصفات التالية كحدّ أدنى للمتطلبات لتوفير واجهة برمجة التطبيقات Vulkan:

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

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

إذا كانت لعبتك مصمّمة للتشغيل على مجموعة كبيرة من الأجهزة ذات مستويات مختلفة من إمكانات الرسومات، قد تحتاج إلى إتاحة تشغيلها على الأجهزة الأقدم من تلك المقترَحة في مقالة اختيار الحد الأدنى من مواصفات الأجهزة لاستخدام Vulkan. قبل توفير توافق مع الأجهزة القديمة، قيِّم ما إذا كان Vulkan يقدّم مزايا للعبة. يمكن أن تواجه الألعاب التي تتضمّن الكثير من طلبات الرسم والتي تستخدم OpenGL ES تكاليف تشغيل عالية لبرنامج التشغيل بسبب التكلفة العالية لإجراء طلبات الرسم ضمن OpenGL ES. يمكن أن تصبح هذه الألعاب مرتبطة بوحدة المعالجة المركزية بسبب إنفاق أجزاء كبيرة من وقت عرض اللقطة في برنامج تشغيل الرسومات. يمكن أن تلاحظ الألعاب أيضًا انخفاضًا ملحوظًا في استخدام وحدة المعالجة المركزية والطاقة من خلال التبديل من 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 API لتجميع الرمز الذي يستخدم Vulkan. يمكنك العثور على نسخة من رؤوس Vulkan في مجموعة تطوير البرامج (NDK) لنظام التشغيل Android أو مُضمّنة في إصدارات حزمة تطوير البرامج (SDK) لنظام Vulkan. لا يتضمّن أي إصدار معيّن من NDK سوى رؤوس Vulkan المتاحة في وقت إصدار NDK. إذا كنت تستخدم رؤوس Vulkan من حزمة NDK، استخدِم الإصدار 25 من حزمة NDK أو إصدارًا أحدث، والذي يتضمّن ملفات الرأس التي تتوافق مع الإصدار 1.3 من Vulkan. تتضمّن حزمة تطوير البرامج (SDK) لـ Vulkan أحدث إصدار من الملفات الرأسية.

تجميع رمز برنامج التظليل إلى SPIR-V

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

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

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

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

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

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

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

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

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

  • 1.0.3
  • 1.1
  • 1.3

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

إصدار Android

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

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

توافق برامج تشغيل Vulkan

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

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

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

في ما يلي مثال على تحديد أعلى إصدار متوافق من Vulkan API:

// 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، مثل ملف 2022 لمستوى Android الأساسي، استخدِم مكتبة Vulkan Profiles API المتوفّرة برمز مفتوح المصدر. يمكنك أيضًا تحليل ملف JSON الخاص بالملف الشخصي بنفسك والبحث عن إمكانات الجهاز باستخدام واجهات برمجة التطبيقات ذات الصلة لواجهة Vulkan لتحديد توافق الملف الشخصي.

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

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

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

ملفات تعريف Vulkan لنظام التشغيل Android (VPA) هي الملف الشخصي الجديد الذي يهدف إلى تلبية احتياجات مطوّري البرامج وتقديم ميزات متسقة في أقرب وقت ممكن يتمكن فيه مطوّرو الأجهزة من توفيرها. VPA15_minimums هو الملف الشخصي الأول لنظام التشغيل Android 15، وسيكون هناك ملف VPA جديد كل عام ليغطي كل إصدار رئيسي من 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.

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

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

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

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

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

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

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