מנועי חיפוש מקומיים וקנייניים

תחילת העבודה עם Vulkan ב-Android

Vulkan הוא ה-API הראשי ברמה נמוכה לגרפיקה ב-Android. Vulkan מספק ביצועים של משחקים שמטמיעים מנוע משחק וכלי רינדור משלהם.

כדי להטמיע את Vulkan במנוע המשחק, צריך:

  • איך לזהות באילו מכשירי Android כדאי להשתמש ב-Vulkan
  • להבין את היתרונות של תמיכה במכשירי Android ישנים יותר
  • הוספת Vulkan ליעד ה-build של Android
  • בחירת מהדר של תוכנת ההצללה (shader) כדי ליצור SPIR-V ל-Vulkan
  • בחירת הגרסה הזמינה של Vulkan API בזמן הריצה
  • תלמדו איך לבצע אופטימיזציה של פעולות הרינדור של Vulkan באמצעות פרופילים של Vulkan קצב הפריימים ורוטציה מראש
  • בחירת כלים גרפיים לניפוי באגים ולניתוח ביצועים
    הערה: לקבלת מידע על השימוש ב-Vulkan ב-Android עם Unity או Unreal מנועי משחק, כדי לראות:
  • Vulkan ב-Unity
  • Vulkan ב-Unreal

בחירת מפרטים מינימליים של מכשירים ל-Vulkan

Vulkan זמין במכשירי Android החל מ-Android 7.0 (רמת API 24). לא כל מכשירי Android עם Android 7.0 ומעלה תומכים ב-Vulkan. צריך: לקבוע באילו מכשירי Android עם יכולות Vulkan המשחק שלך תומך.

המלצות

כדי לקבל תמיכה ב-Vulkan, צריך להשתמש במפרטים הבאים כדרישות המינימליות:

  • במכשיר פועלת מערכת Android בגרסה 10.0 (רמת API 29) ואילך
  • המכשיר תומך ב-Vulkan API בגרסה 1.1 ואילך
  • המכשיר כולל יכולות חומרה ותכונות תאימות לשנת 2022 פרופיל Android Baseline

תמיכה במכשירים ישנים

אם המשחק נועד לפעול במגוון רחב של מכשירים ברמות שונות של יכולות גרפיקה, ייתכן שיהיה עליך לתמוך במכשירים ישנים יותר מומלץ לעיין במאמר בחירת מפרטי מכשירים מינימליים ל-Vulkan. לפני שיוצרים תמיכה במכשירים ישנים, צריך לבדוק אם Vulkan מספקת לשיפור המשחק. משחקים עם הרבה קריאות משיכה (title) שנעשה בהם שימוש ב-OpenGL ES יכולים לראות תקורה משמעותית של נהגים עקב העלות הגבוהה של ביצוע שיחות משיכה ב-OpenGL ES. המשחקים האלה יכולים להפוך למעבד (CPU) מוגבל מבזבוז חלקים גדולים של זמן רינדור הפריים במנהל הגרפיקה. במשחקים גם אפשר לראות ירידה בצריכת המעבד (CPU) ובצריכת החשמל על ידי מעבר מ-OpenGL ES ל-Vulkan. הדבר רלוונטי במיוחד אם במשחק שלך יש סצנות מורכבות שאי אפשר להשתמש בהן בצורה יעילה פעולות שצריך לבצע כדי לצמצם קריאות משיכה. כשמטרגטים מכשירים ישנים, צריך לכלול את OpenGL ES כברירת מחדל ברינדור, כי מכשירים מסוימים ברשימת מכשירי היעד יש הטמעות Vulkan שלא יכולות להריץ את המשחק בצורה אמינה.

ייתכן שלא תרצו לתמוך במכשירים ישנים יותר עם Vulkan, כי אין בהם ביצועים ותכונות, או שיש להם בעיות ביציבות.

ביצועים ותכונות

ייתכן שמכשירי Android ישנים יותר עם Vulkan לא כוללים את ביצועי העיבוד או תמיכה בחומרה לתכונות שדרושות להפעלת המשחק. סביר להניח שמצב כזה אם המשחק שלכם כולל גרפיקה באיכות גבוהה ו-Vulkan הוא ה-API היחיד טירגוט ב-Android. מכשירים ישנים רבים מוגבלים לגרסה 1.0.3 של Vulkan API ובדרך כלל חסרים בהם תוספי Vulkan נפוצים, חומרה מודרנית.

יציבות

יכול להיות שבמכשירי Android ישנים יותר נעשה שימוש במנהלי התקנים של Vulkan לא מעודכנים. הנהג/ת האלה גרסאות עשויות לכלול באגים שיכולים להשפיע על היציבות של המשחק. פועלת באגים של נהגים עשויים לכלול כמויות גדולות של בדיקות והנדסה בזמן האימון.

הוספת Vulkan לפרויקט

כדי להוסיף את Vulkan לפרויקט:

  • הכללת כותרות של Vulkan API
  • הידור של הקוד של תוכנת ההצללה (shader) ל-SPIR-V
  • קריאה ל-Vulkan API בזמן הריצה

הכללת כותרות של Vulkan API

המשחק שלך צריך לכלול את קובצי הכותרות של Vulkan API כדי להדר קוד שמשתמש Vulkan. אפשר למצוא עותק של כותרות Vulkan ב-Android NDK או ארוזות בגרסאות של Vulkan SDK. כל גרסה ספציפית של NDK כולל רק כותרות Vulkan שהיו זמינות בשלב השקת ה-NDK. אם להשתמש בכותרות Vulkan מה-NDK. צריך להשתמש ב-NDK בגרסה 25 ומעלה, כולל קובצי כותרות שתומכים ב-Vulkan בגרסה 1.3. ל-Vulkan SDK יש את רוב את הגרסה הנוכחית של הכותרות.

הידור של הקוד של תוכנת ההצללה (shader) ל-SPIR-V

ה-Vulkan API מצפה שתוכנות ההצללה יסופקו בקובץ הבינארי SPIR-V בפורמט ביניים. המוסכמה הזו שונה מ-OpenGL ES, שבו נוכל לשלוח קוד מקור שכתוב OpenGL Shading Language (GLSL) כטקסט מחרוזות. שימוש במהדר של תוכנת ההצללה (shader) כדי לקחת קוד שנכתב בכלי להצללה שפה כמו GLSL או High-level Shader Language (HLSL) ולקודד אותם למודולים של SPIR-V לשימוש עם Vulkan.

אפשר להשתמש במהדר (compiler) shaderc כדי להדר תוכנות הצללה (shader) שכתוב ב-GLSL ב-SPIR-V. אם במשחק נעשה שימוש בפרוטוקול HLSL, DirectXShaderCompiler תומך בפלט SPIR-V. בדרך כלל, להדר תוכנות הצללה למצב אופליין כחלק מתהליך ה-build של הנכס את המשחק שלך ולכלול את המודולים SPIR-V בנכסי זמן הריצה.

קריאה ל-Vulkan API בזמן הריצה

כדי לשלוח קריאה ל-Vulkan API, המשחק שלך צריך לקבל סמנים של פונקציות ל-Vulkan קריאות ל-API. הדרך הישירה ביותר לעשות זאת היא לקשר אל ספרייה משותפת אחת (libvulkan.so), הכלולה ב-NDK של Android. קישור לספרייה יש שני חסרונות: תקורה נוספת של שליחת פונקציות והגבלות על העברת הסמן של פונקציות Vulkan API באופן אוטומטי הבעיה נפתרה.

כשמפעילים פונקציית Vulkan API, אמצעי הבקרה עובר דרך dispatch טבלה שמנוהלת על ידי מבנה שנקרא טוען Vulkan. במכשירי Android משתמש בהטמעה משלו של טוען Vulkan ולא ב-LunarG בטעינה. מערכת הטעינות הזו היא חלק מארכיטקטורת השכבות של Vulkan API. קישור לספריית המערכת בזמן ה-build יגרור שליחה נוספת ברמה נתונה לקריאה ל-API. התקורה קטנה, אבל ניתן להבחין בה עבור משחקים שמבצעים נפחים גדולים של שיחות Vulkan.

בדרך כלל, ספריית המערכת מבצעת התאמת נתונים של מצביעים לפונקציות Vulkan בלבד נחשב לחלק מה-API המרכזי. ב-Vulkan יש מספר רב של תוספים, להגדיר פונקציות Vulkan נוספות, שרבים מהן לא מזוהים באופן אוטומטי. על ידי ספריית המערכת. צריך לפענח באופן ידני את המצביעים ל-Vulkan האלה לפני שמשתמשים בהם.

כדי לצמצם את הבעיות האלה, פותרים באופן דינמי את המצביעים לכל פונקציות Vulkan שבו אתם מתכוונים להשתמש בזמן הריצה. אחת הדרכים לעשות זאת היא ספריית מטא-מטענים בקוד פתוח, כמו volk. במשחק לדוגמה AGDKTunnel אפשר לשלב volk למטרה הזו. אם המיקום נעשה שימוש בספריית מטא-מטענים, אל תקשרו אל libvulkan.so את הספרייה המשותפת בסקריפטים של ה-build.

איך יודעים איזו גרסה זמינה של Vulkan API

Android תומך בגרסאות הבאות של Vulkan API:

  • 1.0.3
  • 1.1
  • 1.3

נקבע מספר הגרסה הגבוה ביותר של Vulkan API שזמין במכשיר נתון לפי גרסת Android ותמיכה במנהל התקן של Vulkan.

גרסת Android

התמיכה של הפלטפורמה בגרסת Vulkan API תלויה במכשיר Android המינימלי version (רמת API):

  • 1.3 — Android 13.0 (רמת API 33) ואילך
  • 1.1 — Android 10.0 (רמת API 29) ואילך
  • 1.0.3 — Android 7.0 (רמת API 24) ואילך

תמיכה לנהגי Vulkan

התמיכה של פלטפורמת Android בגרסת Vulkan API לא מבטיחה שה-API נתמכת על ידי מנהל התקן Vulkan של המכשיר. מכשיר עם Android 13 יתמוך רק בגרסה 1.1 של Vulkan API.

כשמאתחלים את Vulkan, אין לבקש גרסת API גדולה יותר מ:

  • הגרסה המקסימלית של Vulkan API לגרסת Android שפועלת המכשיר
  • גרסת Vulkan API מדווחת על ידי vkEnumerateInstanceVersion
  • גרסת Vulkan API מדווחת על ידי המאפיין apiVersion של מבנה Vkמקומות פיזיים

דוגמה לקביעת הגרסה הגבוהה ביותר של 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, כמו Android Baseline לשנת 2022 של הפרופיל, משתמשים בספריית ה-API של Vulkan פרופילים בקוד פתוח. אפשר גם לנתח בעצמך את קובץ ה-JSON של הפרופיל ולבדוק את יכולות המכשיר. באמצעות ממשקי ה-API הרלוונטיים של Vulkan כדי לקבוע את התאימות של הפרופילים.

פרופילים של Vulkan

מערכת Android משתמשת בפרופילים של Vulkan שקובע אילו תכונות ותוספים יהיו זמינים עבור כל אחד מכשירים עם Android.

פרופיל הבסיס של Android (ABP) הוא הניסיון הראשון ליצירת פרופיל Vulkan. ABP2021 ו-ABP2022 הם פרופילים בהסתכלות לאחור, שנועדו לכסות > ב-85% מהמכשירים הפעילים בזמן האימון. לא תהיה ABP חדש בעתיד.

Vulkan פרופילים ל-Android (VPA) הוא הפרופיל החדש לעתיד, לשקף את הצרכים של מפתחי התוכנה ולפתח תכונות עקביות בהקדם שמפתחי חומרה יכולים לספק אותם. VPA15_minimums הוא הפרופיל הראשון ל-Android 15, וכל שנה תהיה VPA חדשה לגבי כל גרסה ראשית של Android.

הטמעה של קצב הפריימים

קצב פריימים נכון הוא חלק חיוני ביצירת גיימפליי איכותי חוויה אישית. ערכת פיתוח המשחקים של Android כוללת את קצב הפריימים Library כדי לעזור במשחק להשיג קצב פריימים אופטימלי. לקבלת מידע נוסף פרטים על ההטמעה: שילוב של Android Frame Pacing בכלי לרינדור Vulkan.

הטמעת רוטציה מראש

מכשירי Android יכולים להופיע בכמה כיוונים. בכיוון המכשיר יהיה שונה מהכיוון של משטח העיבוד. ביטול לייק ל-OpenGL ES ב- ב-Android וב-Vulkan לא מטפלים בפערים בין שני הסוגים. כדי להבין איך תהליך הכיוון פועל והשיטה האופטימלית לכיוון הטיפול על ההבדלים בזמן השימוש ב-Vulkan, כדאי לעיין במאמר טיפול בסיבוב מכשירים עם Vulkan סבב מראש.

פתרון בעיות ויצירת פרופיל ברינדור Vulkan

יש כלים רבים שיכולים לעזור לכם לאבחן בעיות רינדור עם בעיות בביצועים של קוד הרינדור של Vulkan.

לקבלת מידע נוסף על הכלים לניפוי באגים וליצירת פרופילים של Vulkan, ניתן לעיין כלים תכונות מתקדמות .

שכבות אימות של Vulkan

שכבות אימות של Vulkan הן ספריות זמן ריצה שאפשר להפעיל כדי לבדוק אותן את הקריאות ל-Vulkan API ומציגות אזהרות או שגיאות לגבי שגיאות או שגיאות לשימוש לא אופטימלי. שכבות האימות האלה לא פעילות כברירת מחדל, כי תהליך האימות מוסיף תקורה על זמן הריצה ומשפיע על הביצועים משחק. למידע על אופן השימוש בשכבות אימות במשחק: ניפוי באגים באמצעות שכבת אימות.

כלים לצילום פריים

שימוש בכלים להקלטת פריימים כדי להקליט ולהפעיל מחדש קריאות ל-Vulkan API במהלך מסגרת המשחק. הכלים האלה מאפשרים לכם:

  • הצגת מידע על משאבי גרפיקה פעילים והדמיות שלהם
  • הצגת רצף הקריאות ל-API שבוצעו על ידי המשחק והצגת הפרמטרים של ה-API
  • בחינת מצב צינור עיבוד הנתונים הגרפי בזמן בקשת משיכה
  • הצגה חזותית של תוצאות הרינדור עד להפעלת קריאה ספציפית בפריים

משתמשים בכלי הקוד הפתוח RenderDoc כדי לצלם פריימים מ: משחקים שפועלים ב-Android. ב-RenderDoc יש תמיכה בצילום פריימים ב-Vulkan OpenGL ES.

אפשר להשתמש גם ב-Android GPU Inspector (AGI) כדי לצלם פריימים של Vulkan.

כלים לניתוח ביצועים

תשתמשו בכלים לניתוח ביצועים כדי לחקור בעיות רינדור במשחק, תגרום לקצב פריימים לא אופטימלי. ספקי GPU נפרדים מספקים כלים שנועדו ליצור פרופיל של המשחק ולספק נתוני ביצועים ספציפיים ל-GPU שלהם של הארכיטקטורה, מאפייני הביצועים וצווארי הבקבוק של המשחק שונות באופן משמעותי במהלך רינדור במעבדי GPU מספקים שונים, ואפילו כמה דורות של GPU מאותו ספק.

אפשר גם להשתמש ב-Android GPU Inspector כדי לאסוף ולנתח נתונים נתוני ביצועים. בניגוד לכלים של הספקים, Android GPU Inspector תואם עם כמה מעבדי GPU מספקים שונים. עם זאת, Android GPU Inspector לא תומכים במכשירי Android ישנים יותר, ויכול להיות שלא יתאימו לכל המכשירים החדשים מכשירים.

שיפור בדיקות Vulkan באמצעות CTS-D

יצרני מכשירים מבוססי Android משתמשים בכלי לבדיקת תאימות (CTS) כדי לעזור. ולוודא שהמכשירים שלהם תואמים. CTS מופעל על ידי מפתחים (CTS-D) הם ובדיקות שנשלחו על ידי מפתחי אפליקציות ל-Android כדי לוודא מכשירי Android מתאימים לתרחישים לדוגמה שלהם ויכולים להריץ את האפליקציות שלהם בצורה חלקה ובלי באגים.

אם הצלחתם להפעיל באג חדש באפליקציית Vulkan שמשפיע על מכשיר ספציפי מבוסס Android, אפשר לשלוח הצעת בדיקה חדשה, שמתארת על הבעיה ודרכים לבדוק אותה. כך תוכלו להבטיח שהבעיה תיפתר עדכון עתידי למכשיר, וגם מבטיח שאותו באג לא יקרה לכל מכשיר אחר.

למידע על תהליך הגשת CTS להוראות מפורטות על אופן שליחת להצעה לבדיקה.