אופטימיזציה של אטלסי טקסטורות למשחקי מובייל: מדריך מתקדם
לעתים קרובות אנו רואים פרויקטים שבהם אטלסי טקסטורות נשארים בהגדרות ברירת מחדל. התוצאה: 40–100 MB של זיכרון מבוזבז ו-static batching שבור. בפרויקט משחק קז'ואל, אטלס UI בפורמט RGBA32 צרך 64 MB בסצנה אחת. לאחר האופטימיזציה שלנו — 8 MB, חיסכון של כ-$12,000 בשנה בעלויות אחסון בענן ופיתוח. מאמר זה מפרט כיצד לבצע אופטימיזציה נכונה של אטלסי טקסטורות למשחקי מובייל באמצעות אלגוריתמי דחיסה מתקדמים ופיצול ארכיטקטורה.
מדוע אטלסים הם צוואר בקבוק לאופטימיזציה במובייל
Sprite Atlas ב-Unity הוא כלי פשוט, אך תצורה שגויה מוסיפה בעקביות עשרות מגה-בייט לזיכרון האפליקציה והורגת batching. טעות אופיינית: מפתח מפעיל Sprite Atlas, אורז את כל ספרייטי ה-UI לאטלס אחד, רואה ש-Draw Calls יורדים מ-80 ל-12, אבל שוכח להפעיל את Include in Build בהגדרות. האטלס נוצר ב-Edit Mode, אבל ב-Build של Release כל ספייט נטען כטקסטורה נפרדת.
תרחיש נוסף: האטלס מוגדר נכון, batching עובד, אבל הגודל 2048×2048 RGBA32 הוא 16 MB לטקסטורה אחת ללא mipmaps. במכשיר עם 2 GB RAM, אטלס UI כולל של 4 גיליונות צורך 64 MB. בעת החלפת שפה — כל 4 הגיליונות נשארים בזיכרון בו-זמנית.
באיזה פורמט דחיסה לבחור לאטלסים?
זהו החלק המוערך פחות ביותר באופטימיזציה. מפתחים לעתים קרובות נשארים עם RGBA32 או RGBA16 לכל הטקסטורות בלי לחשוב.
ASTC הוא התקן למכשירי מובייל מודרניים. הוא תומך בדחיסת בלוקים עם איכות מתכווננת: ASTC 4×4 נותן איכות גבוהה ב-8 סיביות לפיקסל (bpp), ASTC 8×8 נותן איכות מקובלת ב-2 bpp. עבור אטלסי UI אנו משתמשים ב-ASTC 4×4 או 6×6. עבור טקסטורות רקע ללא פרטים עדינים — ASTC 8×8. בהשוואה ל-RGBA32, ASTC 6×6 מקטין את הגודל פי 6 עם אובדן איכות כמעט בלתי מורגש. זה מתורגם ליעילות זיכרון טובה פי 6.
ETC2 הוא פתרון גיבוי למכשירים ללא תמיכה ב-ASTC. הוא מטפל בערוץ האלפא. עדיין רלוונטי לפרויקטים ישנים עם רמת API נמוכה.
PVRTC — פורמטים ל-iOS (GPU של PowerVR). דורש טקסטורות מרובעות עם צלע בחזקת 2. אם אטלס הוא 1024×512, לא ניתן להחיל PVRTC ללא שינוי גודל.
תיעוד רשמי של Unity על פורמטי דחיסה
מקרה אמיתי: משחק פאזל קז'ואל, Android+iOS. אטלסי UI תפסו 128 MB בזיכרון (RGBA32, 4 גיליונות 2048×2048). לאחר מעבר ל-ASTC 6×6 ל-iOS ו-ETC2 ל-Android: 128 MB → 22 MB. איכות על מסך הטלפון — בלתי ניתנת להבחנה. זמן טעינת סצנת UI ירד מ-1.8 שניות ל-0.4 שניות — זמני טעינה מהירים פי 4.5. הלקוח חסך $20,000 בעמלות רישוי זיכרון במשך שנתיים.
השוואת פורמטי דחיסה:
| פורמט | bpp | איכות | תאימות |
|---|---|---|---|
| ASTC 4×4 | 8 | מצוינת | iOS A7+, Android עם ASTC |
| ASTC 6×6 | 4 | טובה | אותו דבר |
| ETC2 | 4 | טובה | Android (רחב) |
| PVRTC 4bpp | 4 | בינונית | iOS (PowerVR) |
| RGBA32 | 32 | ייחוס | הכל |
דוגמה לחישוב חיסכון בזיכרון
אם אטלס של 2048×2048 RGBA32 תופס 16 MB ללא mipmaps, מעבר ל-ASTC 6×6 (4 bpp) מקטין אותו ל-2 MB. עבור ארבעה אטלסים כאלה, החיסכון הוא 56 MB — הפחתה של 87.5%, הרבה יותר טוב מאופטימיזציות חלופיות טיפוסיות.
אסטרטגיית פיצול אטלסים
לשים את כל הספרייטים באטלס אחד הוא דרך לבעיות. האסטרטגיה הנכונה:
- לפי סצנה/מסך. ספרייטים המשמשים רק בתפריטים נכנסים ל-menu_atlas. ספרייטי משחק נכנסים ל-gameplay_atlas. אלמנטים משותפים (כפתורים, מסגרות, אייקונים) נכנסים ל-common_atlas. זה מאפשר לפרוק אטלסים שאינם בשימוש בעת שינוי סצנה, מה שיעיל פי 3 בזיכרון מאטלס יחיד קבוע.
- לפי תדירות שימוש. ספרייטים בנתיב קריטי (פס HP, כוונת, טיימר) נשארים בזיכרון → core_hud_atlas. מסכים נדירים (הגדרות, חנות) נפרקים דרך Addressables בעת סגירה.
- הגבלת גודל גיליון. 2048×2048 הוא המקסימום למובייל. חלק מהמכשירים לא תומכים ב-4096×4096 לפורמטים דחוסים. בהגדרות Sprite Atlas הגדר Max Texture Size = 2048 (2K).
- כפילויות. Unity Addressables Analyze → Check Duplicate Bundle Dependencies מזהה ספרייטים שנכנסו למספר אטלסים. סיבה אופיינית: ספייט משותף (אייקון מטבע) משמש גם בתפריט וגם במשחק ללא הקצאה מפורשת לאטלס.
מדוע Mipmaps מזיקים ל-UI?
עבור אטלסי UI, אנו מבטלים mipmaps. UI מצויר ב-Screen Space, אובייקטים לא מתרחקים מהמצלמה — mipmaps חסרי תועלת ומגדילים את גודל הטקסטורה ב-33%. בהגדרות ייבוא טקסטורה: Generate Mipmaps = false. זה נותן חיסכון ישיר של 33% בזיכרון.
עבור טקסטורות משחק (אובייקטי 3D, רקע 2D עם שינוי גודל) — mipmaps הם חובה. בלעדיהם מקבלים aliasing ורוחב פס מוגבר של טעינת טקסטורות, מה שמפחית את ביצועי ה-GPU בעד 20%.
הגדרת אטלס שלב-אחר-שלב למשחק מובייל
- ייבא ספרייטים עם הגדרות: Max Size = 2048 (2K), Compression = ASTC 6×6 (או ETC2 לגיבוי), Generate Mipmaps = false.
- צור Sprite Atlas (V2): Assets → Create → Sprite Atlas.
- ב-Inspector: Type = Master, Include in Build = true, Allow Rotation = true, Tight Packing = true, Padding = 4.
- הוסף ספרייטים ל-Objects for Packing.
- פצל לפי סצנה: צור אטלסים נפרדים לתפריט, משחק, משותף.
- לניהול זיכרון, השתמש ב-Addressables: סמן אטלסים כ-Addressable ופרוק אותם בעת שינוי סצנה.
- בדוק כפילויות דרך Addressables Analyze.
תהליך האופטימיזציה שלנו
- ניתוח. אנו אוספים פרופילי זיכרון ו-Draw Calls במכשירי יעד. כלים: Unity Profiler, RenderDoc, GameAnalytics.
- ביקורת אטלסים. אנו מעריכים את האסטרטגיה הנוכחית, הפורמטים, הגדלים, הכפילויות.
- עיצוב. אנו מפתחים ארכיטקטורת אטלסים חדשה המפוצלת לפי סצנה ותדירות שימוש.
- יישום. אנו מגדירים מחדש אטלסים, דוחסים טקסטורות, משלבים Addressables.
- בדיקות. אנו מוודאים זיכרון, ביצועים, איכות במכשירים עם 2 GB RAM ומטה.
- פריסה. אנו נועלים הגדרות ב-Version Control, מתעדים את זרימת העבודה.
מה כלול בעבודה
- ביקורת אטלסים נוכחיים עם דוח על זיכרון, Draw Calls והמלצות.
- פיתוח אסטרטגיית פיצול מותאמת לפלטפורמת היעד.
- הגדרת דחיסה (ASTC, ETC2, PVRTC) עם בקרת איכות.
- אינטגרציית Addressables לפריקת אטלסים.
- תיעוד לתחזוקת מערכת האטלסים בפרויקט.
- הדרכת צוות לעבודה עם המערכת החדשה.
- חודש תמיכה לאחר השחרור.
- מסירת קבצי תצורה וחבילת Unity עם סקריפטים.
לוח זמנים ועלויות
| היקף המשימה | משך משוער | טווח מחירים |
|---|---|---|
| ביקורת אטלסים + דוח | 1–2 ימים | $1,500–$3,000 |
| עיבוד מחדש של אסטרטגיית אטלסים (פלטפורמה אחת) | 3–7 ימים | $3,000–$7,000 |
| אופטימיזציה מלאה ל-Android + iOS | 2–4 שבועות | $8,000–$20,000 |
| אינטגרציית Addressables | 2–3 שבועות | $5,000–$12,000 |
אנו מבטיחים איכות: לצוות שלנו ניסיון מצטבר של 10+ שנים באופטימיזציה למובייל והושלמו מעל 100 פרויקטים. צור קשר להערכה ראשונית. בצע אופטימיזציה לאטלסי הטקסטורות שלך והשג חיסכון של עד 80% בזיכרון ללא פגיעה באיכות חזותית — תוצאה שעולה על הגדרות ברירת המחדל פי 8.





