
Mir 2: Return of the King הוא משחק נייד איכותי עם IP של Legend שאושר על ידי Actoz Soft ופותח על ידי HK ZHILI YAOAN LIMITED באמצעות Unity Engine.
המשחק הזה לא רק יוצר מחדש בצורה מושלמת את התחושות של Mir 2, נציג של משחקי MMORPG פנטזיה קוריאניים, אלא גם מציע הרבה מהתכנים הפופולריים ביותר של המשחק, כמו איסוף ציוד, התקפת חול בקנה מידה גדול ועוד משחקיות ליבה.
במשחק נעשה שימוש ב-Android Frame Pacing API (Swappy) כדי לשפר את היציבות של קצב הפריימים, להשיג רינדור חלק ולשפר באופן משמעותי את מדדי תפקוד האפליקציה ב-Android (מדד הסשנים האיטיים).
השקה של 'סשן איטי' ב'תפקוד האפליקציה'
סשן איטי הוא מדד של 'תפקוד האפליקציה' ב-Google Play Console. בסשן איטי יש יותר מ-25% פריימים איטיים. פריים נחשב לאיטי אם הוא:
1) בקצב של 20fps, היא לא מוצגת תוך 50 אלפיות השנייה אחרי המסגרת הקודמת. 2) בקצב של 30fps, הוא לא מוצג תוך 34 אלפיות השנייה אחרי המסגרת הקודמת.
עם הזמן, Play יתחיל להרחיק משתמשים ממשחקים שלא מצליחים להגיע ל-20FPS בטלפונים שלהם.
יש הרבה סיבות לכך שפריים יוצג או ירנדר במסך למשך זמן ארוך יותר מהיעד שהגדיר המפתח. יכול להיות שהמשחק מוגבל על ידי המעבד או על ידי המעבד הגרפי, שהוא מתחמם יתר על המידה ומפעיל מצב תרמי מצומצם, או שיש חוסר התאמה בין קצב הפריימים של המשחק לבין קצב הרענון של המסך במכשיר.
מהו Swappy
ספריית Android Frame Pacing, שנקראת גם Swappy, היא חלק מספריות AGDK. Swappy עוזר למשחקים ב-OpenGL וב-Vulkan להשיג רינדור חלק וקצב פריימים תקין ב-Android.
הספרייה מטפלת במספר שיעורי רענון אם המכשיר תומך בהם, וכך נותנת למשחק יותר גמישות בהצגת פריים. לדוגמה, במכשיר שתומך בקצב רענון של 60Hz וגם של 90Hz, משחק שלא יכול להציג 60 פריימים לשנייה יכול לרדת ל-45FPS במקום ל-30FPS כדי לשמור על רמת חלקות גבוהה. הספרייה מזהה את קצב הפריימים הצפוי של המשחק ומתאימה באופן אוטומטי את זמני הצגת הפריימים בהתאם.
ספריית Frame Pacing משפרת גם את חיי הסוללה כי היא מונעת עדכוני מסך מיותרים. לדוגמה, אם המשחק נערך בקצב של 60FPS אבל המסך מתעדכן בקצב של 120Hz, המסך מתעדכן פעמיים לכל פריים. הספרייה Frame Pacing מונעת זאת על ידי הגדרת קצב הרענון לערך הקרוב ביותר לקצב הפריימים היעד, שתומך במכשיר.
איך Mir 2 שיפר את ביצועי הרינדור באמצעות Swappy
במשחק Mir 2 (미르2: 왕의 귀환) הייתה בעיה בביצועי העיבוד הלא יציבים, עם 40% סשנים איטיים ב-20FPS, גבוה בהרבה מהסף של 20% ב-Google Play.

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

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

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

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

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

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

לחלופין, אפשר להפעיל באופן פרוגרמטי את האפשרות 'תזמון פריימים מותאם' בקוד הלוגיקה כדי לאפשר ל-Unity לחלק את הפריימים באופן שווה, וכך לצמצם את השונות בשיעור הפריימים ולשפר את חוויית המשחק.
איך משתמשים ב-Swappy במנוע המשחקים Unreal
Unreal 4.25 ואילך משלב את Android Frame Pacing Library, שנכללת ב-Android Game Development Kit. במאמר Mobile Frame Pacing מוסבר איך להפעיל את ספריית Android Frame Pacing ואיך לשלוט בקצב הפריימים מקוד C++.
למידע נוסף, אפשר לקרוא על סשנים איטיים ועל Swappy.