כדי לבצע אופטימיזציה של השימוש בחומרים ובגוונים במשחק שלכם ל-Android, כדאי לפעול לפי השיטות המומלצות הבאות.
חומרים ו-shaders הם אבני בניין מרכזיות של אומנות תלת-ממדית מודרנית. משחקי תלת-ממד שפועלים בצורה טובה במספר הגדול ביותר של מכשירים מתחילים באומנות תלת-ממד שנועדה לנצל בצורה הטובה ביותר את מעבדי הגרפיקה. במדריך הזה מודגשות שיטות מומלצות ואופטימיזציות של חומרים ושל shaders בנייד, כדי לשפר את הביצועים של המשחק ולצמצם את צריכת החשמל.
חלקים מהמאמר הזה מבוססים על עבודה שנתרמה על ידי Arm Limited ומוגנת בזכויות יוצרים שלה.
מנוע משחק עם הצללות שמתאימות לניידים
מנועי משחקים שונים זה מזה באופן שבו הם משייכים חומרים וגוונים. מנוע Unity יכול ליצור כמה shaders, אבל לכל חומר אפשר להקצות רק shader אחד. Unreal Engine 4 יכול להחיל הצללות שונות על חומר בהתאם לפלטפורמת היעד.
הסבר על הגדרות של shaders וחומרים זמין במאמר שיטות מומלצות לאומנים בנושא חומרים ו-shaders.
אם אתם משתמשים במנוע משחקים כמו Unity או Unreal Engine 4, אתם יכולים להשתמש ב-shaders מובנים שמיועדים לחומרה של מכשירים ניידים. ה-shaders האלה מכילים הטמעות פשוטות של תכונות, כדי לשפר את הביצועים במכשירים ניידים. אם אפשר, כדאי להשבית תכונות שלא משתמשים בהן כשמגדירים את חומרי הלימוד. התכונות האלה יכולות להיות למשל גוון צבע או מפות עם פרטים. השבתה של תכונות שלא בשימוש מאפשרת למנוע להשמיט אותן מתוכנית ההצללה הסופית, וכך לשפר את הביצועים.
Unity
Unity כולל כמה מנועי עיבוד. למשחקים מודרניים לנייד, האפשרות הכי טובה היא Universal Render Pipeline (URP). ה-URP כולל קבוצה סטנדרטית של הצללות שמשתנות באופן אוטומטי בהתאם לפלטפורמת היעד. ה-renderer מדור קודם של Unity כולל אוסף של shaders שנועדו לפלטפורמות ניידות. ה-shaders האלה מקובצים בקטגוריה Mobile.
Unreal Engine 4
מנוע Unreal יבחר הצללה לנייד על סמך פלטפורמת היעד שנבחרה. הפלט החזותי של הצללות בנייד יכול להיות שונה מהצללות שמוגדרות כברירת מחדל ב-Shader Model 5. אפשר לשנות את רמת העיבוד של התצוגה המקדימה בכלי לעריכת Unreal כדי לדמות את פלט העיבוד של הצללות בנייד. למרות כמה הבדלים, Unreal משתמש באותו תהליך עבור חומרים בכל הפלטפורמות, כך שבדרך כלל לשיידרים לנייד יהיו מאפיינים חזותיים והתנהגויות דומים לשיידרים שמוגדרים כברירת מחדל.

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

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


שימוש בשיטת האלפא המתאימה
השיטות הנפוצות ביותר להטמעת שקיפות הן מיזוג אלפא ובדיקת אלפא.
בבדיקת אלפא, חומר האובייקט ייראה אטום ב-100% או שקוף ב-100%. אפשר להגדיר את סף ערך האלפא למועד האחרון הזה. ב-Unity, סוג השקיפות הזה נקרא Cutout. ב-Unreal Engine 4 הוא נקרא מצב מיזוג Masked.
שילוב אלפא מאפשר לחומר של האובייקט להיות בעל טווח שקיפות, ויכול לגרום לאובייקט להיראות שקוף חלקית. ב-Unity, סוג השקיפות הזה נקרא שקוף. ב-Unreal Engine 4 הוא נקרא מצב השילוב Translucent.

בדרך כלל, מיזוג אלפא מניב מראה חזותי טוב יותר מאשר בדיקת אלפא. עם זאת, בסוגים מסוימים של רשתות, כמו עלווה, מיזוג אלפא יכול להיראות מוזר כשמסתכלים על הרשת בתנועה. הסיבה לכך היא שהעלים והענפים מוצגים בסדר שגוי. בדיקת אלפא ממזערת את האפקט הזה, אבל היא גורמת לעלייה באליאסינג ובקצוות חדים בעלים ובגבעולים.
יכול להיות שיידרש זמן שונה לעיבוד של אותה רשת במיזוג אלפא ובבדיקת אלפא. במקרים שבהם שני המצבים מניבים פלט חזותי מקובל, כדאי לבצע השוואה כדי לראות אם שיטה אחת מניבה תוצאות טובות יותר מהשיטה השנייה.
מורכבות של תוכנת הצללה (shader) בפרופיל
תכונות רינדור כמו דוגמי מרקם, תאורה ושקיפות מוסיפות למורכבות של הצללה ומפחיתות את ביצועי הרינדור. אתם יכולים להשתמש בכלים שמוטמעים במנועי גיימינג וגם בכלים חיצוניים לגרפיקה כדי להעריך את מורכבות ההצללה.
Unreal Engine 4 כולל מצב תצוגה של Shader Complexity שמספק הערכות עלויות לאובייקטים בסצנה.

אפשר גם להשתמש בתכונה Material Stats של Unreal כדי ליצור פרופיל של עלות החומרים בזמן שאתם יוצרים אותם.

חישוב ב-vertex shader
חישובי הצללה של רינדור מחולקים בדרך כלל בין הצללה של קודקסי צלעות לבין הצללה של קודקסי פיקסלים (נקראת גם הצללה של קודקסי פרגמנטים). מספר הפרגמנטים שעוברים רינדור בדרך כלל גדול ממספר הקודקודים. אם אפשר לבצע חישוב יקר ב-vertex shader, הוא יופעל בתדירות נמוכה יותר מאשר אם הוא מתבצע ב-fragment shader.
אבל אם הנתונים האלה נצרכים על ידי shader של פיקסלים, צריך להעביר אותם מ-shader של קודקודים. אם כמות הנתונים שמועברים גדולה מדי, יכול להיות שהביצועים יהיו טובים יותר אם תבצעו את החישובים ב-fragment shader. אתם יכולים להשתמש בכלי פרופיל כדי להעריך את ניצול ה-tiler ולקבוע את המיקום האופטימלי של ה-shader עבור סדרת חישובים. ל-Unreal Engine 4 יש תכונה של Customized UVs שיכולה לעזור ביצירת הפרופיל הזה.
הימנעות מפעולות מתמטיות יקרות
פעולות מתמטיות משמשות בתוכניות Shader כדי לשלוט בהתנהגות ובמראה של פלט ה-Shader. פעולות נפוצות כוללות אריתמטיקה בסיסית, חזקה, פונקציית הרצפה, לוגריתם וכו'. העלות החישובית של פעולות מתמטיות לא זהה. שיידר שמלא בפעולות יקרות יפעל לאט יותר, במיוחד במכשירים ישנים. דוגמאות לפעולות זולות יחסית:
- תוספת
- חיסור
- כפל
דוגמאות לפעולות יקרות יותר:
- חטיבה
- פונקציות טרנסצנדנטיות (sin, cos, power, log, tan)
הביצועים של הפרופיל לעיתים קרובות
צווארי הבקבוק בביצועים לא תמיד בולטים לעין. אל תניחו איפה נמצאים אזורי הבעיות, ותשתמשו בכלי פרופילים כדי להעריך את ביצועי העיבוד. כדי להעריך בצורה מדויקת את ההשפעה של האופטימיזציה, חשוב להריץ בדיקות לפני ואחרי כל שינוי.