ב-Mir 2 נעשה שימוש בספריית Frame Pacing כדי לשפר את ביצועי העיבוד

Mir 2: Return of the King

Mir 2: Return of the King הוא משחק נייד איכותי עם זכויות יוצרים של Legend IP, שאושר על ידי Actoz Soft ופותח על ידי HK ZHILI YAOAN LIMITED באמצעות מנוע המשחקים Unity.

המשחק הזה לא רק יוצר מחדש את התחושות של Mir 2, נציג של משחקי MMORPG פנטזיה קוריאניים, אלא גם מציע הרבה מהתכנים הפופולריים ביותר במשחק, כמו איסוף ציוד, התקפת חול בקנה מידה גדול ורכיבים מרכזיים אחרים במשחק.

במשחק נעשה שימוש בספריית קצב הפריימים של Android‏ (Swappy) כדי לשפר את היציבות של קצב הפריימים, להשיג רינדור חלק ולשפר באופן משמעותי את מדדי תפקוד האפליקציה ב-Android‏ (מדד הסשנים האיטיים).

השקה של 'סשנים איטיים' ב'נתוני תפקוד האפליקציה' ב-Android

סשנים איטיים הוא מדד של 'תפקוד האפליקציה' ב-Google Play Console. בסשן איטי יש יותר מ-25% פריימים איטיים. פריים נחשב לאיטי אם הוא:

  1. בקצב של 20fps, הוא לא מוצג תוך 50 אלפיות השנייה אחרי המסגרת הקודמת.

  2. בקצב של 30fps, היא לא מוצגת תוך 34 אלפיות השנייה אחרי הפריים הקודם.

עם הזמן, Play יתחיל להרחיק משתמשים ממשחקים שלא מצליחים להגיע ל-20FPS בטלפונים שלהם.

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

מהי ספריית Frame Pacing

ספריית קצב הפריימים של Android, שנקראת גם Swappy, היא חלק מספריות AGDK. Swappy עוזר למשחקים ב-OpenGL וב-Vulkan להשיג רינדור חלק וקצב פריימים תקין ב-Android.

הספרייה מטפלת במספר שיעורי רענון אם המכשיר תומך בהם, וכך נותנת למשחק יותר גמישות בהצגת פריים. לדוגמה, במכשיר שתומך בקצב רענון של 60Hz וגם של 90Hz, משחק שלא יכול להציג 60 פריימים לשנייה יכול לרדת ל-45FPS במקום ל-30FPS כדי לשמור על רמת חלקות גבוהה. הספרייה מזהה את קצב הפריימים הצפוי של המשחק ומתאימה באופן אוטומטי את זמני הצגת הפריימים בהתאם.

ספריית Frame Pacing משפרת גם את חיי הסוללה כי היא מונעת עדכוני מסך מיותרים. לדוגמה, אם המשחק נערך בקצב של 60FPS אבל המסך מתעדכן בקצב של 120Hz, המסך מתעדכן פעמיים לכל פריים. הספרייה Frame Pacing מונעת זאת על ידי הגדרת קצב הרענון לערך הקרוב ביותר לקצב הפריימים היעד, שתומך במכשיר.

איך Mir 2 שיפר את ביצועי העיבוד באמצעות ספריית Frame Pacing

במשחק Mir 2‏ (미르2: 왕의 귀환) הייתה בעיה בביצועי העיבוד הלא יציבים, שבהם 40% מהסשנים היו איטיים עם סף של 20FPS, גבוה בהרבה מהסף של 20% ב-Google Play.

איור 1. מדד של סשנים איטיים לפני שילוב ספריית Frame Pacing

Mir 2‏ (미르2: 왕의 귀환) הוא משחק עם גרפיקה באיכות גבוהה, וחלק מהמכשירים מתקשים לשמור על קצב פריימים יציב. התפלגות קצב הפריימים שלהם מראה שסשנים רבים פועלים בקצב פריימים נמוך מ-20‎ FPS.

איור 2. חלוקת ה-FPS של המשחק לפני שילוב הספרייה של Frame Pacing.
כל קטגוריה מייצגת את אחוז הסשנים שבהם 75% מהפריימים שלהם היו מהירים יותר מהתוויות של הקטגוריות.

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

איור 3. פריים B ארוך גורם לקצב שגוי של 2 פריימים – A ו-B.

הספרייה Frame Pacing פותרת את הבעיה הזו באמצעות שימוש במחסומי סנכרון (EGL_KHR_fence_sync ו-VkFence) כדי להחדיר לאפליקציה השהיות שמאפשרות לצינור עיבוד הנתונים של המסך להתעדכן, במקום לאפשר ללחץ חוזר להצטבר. עדיין יש מסגרת נוספת בפריים א', אבל המסגרת ב' מוצגת עכשיו בצורה תקינה.

איור 4. המסגרות C ו-D ממתינות להצגה.

כדי לשלב בקלות את ספריית Frame Pacing, צוות Mir 2 השתמש בתכונה המובנית של Unity, Optimized Frame Pacing. הפעולה הזו הביאה לשיפור משמעותי בביצועי הרינדור, במיוחד ירידה במדד 'סשנים איטיים' מ-40% ל-10%.

איור 5. שיפור של סשנים איטיים אחרי שילוב הספרייה Frame Pacing

מספר הסשנים האיטיים ב-Mir2 ירד באופן משמעותי אחרי ששילבו את הספרייה.

איור 6. התפלגות ה-FPS של המשחק אחרי שילוב של קצב פריימים.
כל קטגוריה מייצגת את אחוז הסשנים שבהם 75% מהפריימים שלהם היו מהירים יותר מהתוויות של הקטגוריות.

תחילת העבודה עם הספרייה Frame Pacing

איך משתמשים בספריית Frame Pacing במנועי משחקים מקומיים

כדי לשלב את ספריית Android Frame Pacing במשחק, אפשר לעיין במדריכים הבאים:

איך משתמשים בספריית Frame Pacing במנוע המשחקים של Unity

ב-Unity שילבו את ספריית Android Frame Pacing במנוע שלהם. כדי להפעיל את התכונה הזו ב-Unity, מסמנים את התיבה Optimized Frame Pacing בקטע Project Settings (הגדרות הפרויקט)‏ > Player (נגן) > Settings for Android (הגדרות ל-Android)‏ > Resolution and Presentation (רזולוציה והצגה):

איור 7. מפעילים את Frame Pacing ב-Unity Engine.

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

איך משתמשים בספריית Frame Pacing במנוע המשחקים Unreal

Unreal 4.25 ואילך משלב את ספריית Frame Pacing של Android, שנכללת ב-Android Game Development Kit. במאמר Mobile Frame Pacing מוסבר איך להפעיל את ספריית Frame Pacing ל-Android ואיך לשלוט בקצב הפריימים מקוד C++‎.