רקע
NEW STATE Mobile הוא משחק battle royale של Krafton שהושקה ברחבי העולם בנובמבר 2021, והגיע ליותר מ-45 מיליון הורדות בחודש הראשון של ההשקה. KRAFTON, Inc. היא קולקטיב של אולפנים עצמאיים לפיתוח משחקים, שנוצרו כדי ליצור חוויות בידור חדשניות ומעניינות לגיימרים ברחבי העולם. החברה מורכבת מחברות PUBG Studios, Bluehole Studio, Striking Distance Studios, RisingWings, Dreamotion ו-Unknown Worlds, וכל אחת מהן מתמחה בתחום ייחודי. המשחק NEW STATE Mobile נוצר באמצעות Unreal Engine 4, ונעשו ניסיונות שונים כדי לצמצם את החום ואת צריכת הסוללה שנגרמים כתוצאה משימוש גבוה ב-GPU מהתכונות הייחודיות של המשחק.
השחקנים יכולים להילחם במרחק רב, ולכן מנוע המשחק צריך להיות מסוגל ליצור רינדור של סצנות ממרחק רב. בנוסף, יש מגוון רחב של צמחייה בשדה הקרב, ולכן לציור יתר של הצמחייה הזו יש השפעה משמעותית על ירידה בביצועים. בעקבות זאת, הצוות השתמש ב-Android GPU Inspector (AGI) כדי לבצע אופטימיזציה של השימוש ב-GPU במשחק ולמנוע צווארי בקבוק.
איור 1: צילום מסך מ-NEW STATE Mobile
מה הם עשו
צוות NEW STATE Mobile השתמש ב-AGI כדי לגשת למידע רב על ספירת ה-GPU ולבצע אופטימיזציה של השימוש ב-GPU בהתאם. הם זיהו שלבים מיותרים של עיבוד באמצעות נתוני הפרופיל של פעילות ה-GPU שסופקו על ידי AGI. אחרי שזיהינו את הפלחים שצורכים את השימוש ב-GPU ואת רוחב הפס של הזיכרון, המשכנו לבדוק את התקדמות האופטימיזציה באמצעות מונה ה-GPU ופעילות ה-GPU, כדי לוודא שאנחנו בכיוון הנכון.
איור 2: צילום מסך מ-NEW STATE Mobile
בעזרת AGI, הם למדו כמה דברים על ביצועי המשחק:
אופטימיזציה של שלב הבסיס: שלב מקדים של עומק, טכנולוגיה שמגדילה את השימוש ב-Early-z, עזרה לצמצם את השימוש ב-fragment shading. שימוש מראש בעומק שימש במיוחד ל-LOD0, שמשתמש ברוב שטח המסך, כדי לצמצם את העומס שעלול להיגרם מקריאות נוספות לציור. בנוסף, שימוש בפורמט scenecolor של 32 ביט יכול לשפר את הביצועים של כל תהליך הרינדור. פורמט ברירת המחדל של SceneColor ב-UnrealEngine4 הוא FloatRGBA, שהוא 64 ביט. אם משתמשים בפורמט 32 ביט, ניתן להפחית את רוחב הפס של הזיכרון בחצי.
השפעה שנמדדה: לאחר החלת תהליך עיבוד עומק מראש, נרשמה ירידה של 7.5% בשימוש ב-GPU. בגלל הבדיקה המקדימה של העומק, יכול להיות שיותירו יותר שברי קוד עם Early-Z. משך הזמן הנדרש להצללה של שברי קוד ירד ב-2%. בעזרת הפורמט scenecolor של 32 ביט, נרשמה ירידה של 5.3% בשימוש ב-GPU. הערך של Shaders Busy ירד ב-2%, והקריאה הכוללת של GPU מזיכרון המערכת ירדה ב-330MB/s. נפח הכתיבה של ה-GPU בזיכרון המערכת ירד ב-78MB/s, וגם מהירות הקריאה של זיכרון הטקסטורות ירדה ב-43MB/s.
אופטימיזציה של שלב הצללים: כשמשתמשים במרקשים כמייצרים צללים, שימוש ברמת פירוט גבוהה של פוליגונים לא משפיע במיוחד על האיכות. מומלץ להשתמש ברמת פירוט נמוכה של פוליגונים, כדי לצמצם את מספר המשולשים. ב-Unreal Engine 4, אפשר להשתמש ברמת פירוט נמוכה של פוליגונים באמצעות הפקודה 'ForceLODShadow' במסוף.
השפעה שנמדדה: מספר המשולשים ששימשו ליצירת צללים ירד בכ-120,000. נתוני המונה של ה-GPU ב-AGI הראו שהשימוש ב-GPU ירד בכ-2%, שהנפח של זיכרון ה-GPU שנקרא מזיכרון המערכת ירד ב-130MB/s, והנפח שנכתב מה-GPU לזיכרון המערכת ירד בכ-23MB/s.
יצירת מכונות אוטומטית: אפשר להשתמש ביצירת מכונות אוטומטית גם לאופטימיזציה של שלב הצללים וגם לאופטימיזציה של שלב הבסיס. כך אפשר למזג את אותן פקודות רינדור בזמן הריצה, ולאחר מכן לבצע רינדור של כולן בבת אחת. כך הצוות של NEWSTATE mobile הצליח להחיל תאורה גלובלית על אובייקטים ספציפיים בלי לפגוע בביצועים. יצירת מכונות אוטומטית היא תכונה בסיסית ש-UnrealEngine4 מספקת.
ההשפעה נמדדה: מספר הקריאות ל-Draw ירד ב-500. הפחתנו כ-48% מהקריאות לציור. ניצול ה-GPU ירד בכ-3.5%. המדידות האלה בוצעו באמצעות OpenGL.
איור 3: נתונים פנימיים שמראים הפחתה בשימוש ב-GPU
תוצאות
בעזרת AGI, צוות NEW STATE Mobile צמצם את השימוש ב-GPU ב-22%. בעקבות האופטימיזציה של תהליך ה-prepass לעומק ושל תהליך ה-pass בצל, השימוש ב-GPU ירד ב-19% וב-3%, בהתאמה. כמו כן, פחתה באופן משמעותי כמות הקריאות והכתובות של הזיכרון הכולל על ידי ה-GPU מזיכרון המערכת.
שנתחיל?
בעזרת Android GPU Inspector (AGI), תוכלו לזהות בעיות בביצועים ואזורים שבהם כדאי לבצע אופטימיזציה, וכך לנתח את ההשפעה של המשחק על מכשירי Android.