דמות עם 80,000 פוליגונים במרחק שני מטרים מהמצלמה נראית מצוין. אותה דמות במרחק 50 מטרים תופסת 40×60 פיקסלים על המסך – אבל ה-GPU עדיין מעבד 80,000 משולשים. LOD (רמת פירוט) הוא כלי מרכזי לניהול תקציב ה-GPU במשחקי מובייל. יש לנו למעלה מ-5 שנות ניסיון בפיתוח מובייל והעברנו יותר מ-10 פרויקטים עם אופטימיזציית LOD. מערכת LOD מוגדרת כראוי אינה נראית לשחקן ונראית בבירור בפרופיילר. רוצים ליישם LOD? הזמינו ביקורת ביצועים וקבלו ייעוץ מהמהנדסים שלנו.
יישום מערכות LOD ב-Unity וב-Unreal Engine לפרויקטי מובייל
מדוע LOD קריטי למשחקי מובייל
ל-GPUs במובייל יש זיכרון וכוח עיבוד מוגבלים. ללא LOD, כל אובייקט מעובד במספר הפוליגונים המקסימלי ללא קשר למרחק. זה מוביל לירידות ב-FPS והתחממות המכשיר. LOD מאפשר מעבר לגרסה מפושטת של האובייקט תוך כדי תנועה, ומפחית עומס מבלי לפגוע באיכות בטווח קרוב. מנגנונים מובנים ב-Unity וב-Unreal Engine מספקים פתרונות מוכנים אך דורשים כוונון עדין לחומרת היעד.
LOD ב-Unity (URP/Built-in)
LOD Group ב-Unity הוא הרכיב הבסיסי. הוסיפו LOD Group לאובייקט, והקצו רנדררים של mesh לכל רמה:
| רמה | אחוז שטח מסך | פוליגונים | שימוש |
|---|---|---|---|
| LOD 0 | >30% | 80,000 | תקריב, סצנות קולנועיות |
| LOD 1 | 15–30% | 20,000 | דמויות פעילות בטווח בינוני |
| LOD 2 | 5–15% | 5,000 | דמויות רקע |
| LOD 3 | 1–5% | 800 | אובייקטים מרוחקים |
| Culled | <1% | — | האובייקט אינו מעובד |
פרמטר מפתח: LOD Bias ב-QualitySettings. בפלטפורמות מובייל – 0.5–0.7 לעומת 1.0 במחשב. זה מזיז את מעברי ה-LOD קרוב יותר למצלמה:
// Устанавливаем в зависимости от производительности устройства
QualitySettings.lodBias = SystemInfo.graphicsMemorySize > 4096 ? 0.75f : 0.5f;נוסחה: LOD Bias = אחוז שטח מסך / מרחק בפועל. למכשירי מובייל עם זיכרון נמוך, השתמשו ב-0.5; למכשירי דגל, 0.75. זה מבטיח מעברים חלקים.
מעברי Cross-fade
מעבר LOD פתאומי גורם לאפקט לא נעים – "פופינג". // Устанавливаем в зависимости от производительности устройства QualitySettings.lodBias = SystemInfo.graphicsMemorySize > 4096 ? 0.75f : 0.5f; מאפשר מעברים חלקים באמצעות dithering. זה עולה זמן GPU נוסף, ולכן אנו משתמשים בזה רק למעבר LOD 0→1, שהוא הבולט ביותר. עבור LOD 2→3, הפופינג כמעט בלתי נראה. לפי מדריך Unity, cross-fade הוא חובה לפרויקטי מובייל עם גיאומטריה צפופה.
lodGroup.fadeMode = LODFadeMode.CrossFade; lodGroup.animateCrossFading = true; ב-URP, הוסיפו LOD Group → Fade Mode → Cross Fade ל-shader ו-lodGroup.fadeMode = LODFadeMode.CrossFade; lodGroup.animateCrossFading = true; .
כיצד מגדירים LOD ב-Unreal Engine למשחקי מובייל
ב-Unreal Engine, #pragma multi_compile _ LOD_FADE_CROSSFADE ו-UNITY_APPLY_DITHER_CROSSFADE(i.pos) תומכים ב-LOD כברירת מחדל. הגדרות בעורך Static Mesh: לשונית LOD Settings. יצירת LOD אוטומטית זמינה מגרסה 4.20:
// В Static Mesh Editor → LOD Settings
Number of LODs: 4
LOD 1: Reduction Settings → Triangle Percent = 50%
LOD 2: Triangle Percent = 20%
LOD 3: Triangle Percent = 8%לפרויקטי מובייל, כדאי להגדיר StaticMeshComponent ב-SkeletalMeshComponent – מעברי LOD יתרחשו קרוב פי שניים למצלמה. עבור Skeletal Mesh ב-LOD 2+, הסירו עצמות שאינן נראות מרחוק באמצעות // В Static Mesh Editor → LOD Settings Number of LODs: 4 LOD 1: Reduction Settings → Triangle Percent = 50% LOD 2: Triangle Percent = 20% LOD 3: Triangle Percent = 8% . לדוגמה, הסירו אצבעות ועצמות פנים קטנות.
HLOD (Hierarchical LOD) לעולמות פתוחים
בסצנות עם מאות אובייקטים, HLOD ממזג מספר meshes סטטיים ל-mesh proxy יחיד במרחקים גדולים. ב-Unity, נעשה שימוש בחבילת r.StaticMeshLODDistanceScale 0.5 (com.unity.hlod). ב-Unreal, HLOD מובנה דרך DefaultEngine.ini. עיקרון: 100 עצים בודדים במרחק 200 מטרים מתמזגים ל-mesh אחד עם draw call אחד. זה מפחית את מספר ה-draw calls מ-100 ל-1 עבור כל הקבוצה. HLOD יעיל פי 4 מ-LOD רגיל לסצנות כאלה.
מקרה מבחן מהניסיון שלנו: עולם פתוח ב-Galaxy A34
משחק RPG איזומטרי: כניסה לעיר (מעל 400 אובייקטים) גרמה לירידת FPS מ-60 ל-22. מספר ה-draw calls הגיע ל-680 לפריים. לאובייקטים סטטיים לא היה LOD או batching.
שלבי האופטימיזציה:
- הוקצה LOD Group לכל המבנים והעצים – ארבע רמות, Culled ב-2% שטח מסך.
- הופעל Static Batching לאובייקטים ללא LOD (סלעים, חביות) – draw calls ירדו מ-680 ל-220.
- הוגדר HLOD לבלוקי עיר מרוחקים – mesh proxy עם 15K פוליגונים במקום 400 אובייקטים בודדים.
- הוגדר LOD Bias ל-0.6 עבור אנדרואיד דרך Quality Settings.
תוצאה: ה-FPS חזר ל-54 באותו אזור במפה. כך, LOD הגדיל את ה-FPS פי 2.5 בהשוואה לתצורה המקורית. החיסכון בעלויות הפיתוח הגיע עד $10,000 בזכות זמן פרופיילינג מופחת. פרויקט דומה חסך $8,000 ב-QA בזכות FPS יציב.
LOD פרוגרמטי ל-UI ואפקטים
LOD חל לא רק על גיאומטריה. עבור חלקיקים ב-Unity, השתמשו ב-LOD Reduction Settings → Remove Bones Below – הפחיתו Max Particles וקצב פליטה למקורות מרוחקים. פיצוץ במרחק 100 מטרים נראה מציאותי עם 10 חלקיקים במקום 200.
ניתן לווסת גם את איכות הצללים: בפלטפורמות מובייל, הגדירו HLOD System ל-30–50 מטרים:
QualitySettings.shadowDistance = 40f; QualitySettings.shadowCascades = 2; // хватит двух каскадов כלים לבדיקת LOD
לבדיקה ויזואלית ב-Unity, השתמשו ב-LOD Group Visualizer (Scene View → Debug Mode → LOD). קידוד צבעים: ירוק – LOD 0, צהוב – LOD 1, אדום – LOD 2+. פרוגרמטית, ניתן לקבל את הרמה הנוכחית כך:
var lodGroup = GetComponent<LODGroup>();
var lods = lodGroup.GetLODs();
// Camera.CalculateLODDistanceFactor помогает предварительно рассчитать расстояние השוואה: Unity LOD לעומת Unreal LOD
| קריטריון | Unity | Unreal Engine |
|---|---|---|
| הגדרת LOD Group | דרך רכיב, אחוזי שטח מסך | בעורך Static Mesh, ידני או אוטומטי |
| HLOD | חבילת HLOD System | מובנה דרך World Settings |
| Cross Fade | נתמך דרך shaders | מנגנון מובנה |
| כלי Debug | LOD Group Visualizer | צביעת LOD בעורך |
שתי הפלטפורמות כוללות LOD כאופטימיזציית ליבה, אך Unreal מציעה פתרון שלם יותר לעולמות פתוחים, בעוד Unity גמישה יותר בהתאמות למכשירים ספציפיים.
מה כולל שירות יישום מערכות LOD שלנו?
אנו מציעים:
- ביקורת סצנה: ניתוח draw calls, פוליגונים, צווארי בקבוק.
- עיצוב קבוצות LOD לאובייקטים מרכזיים.
- הגדרת LOD Bias, Fade Mode, Cross Fade לפלטפורמת היעד.
- שילוב HLOD לרמות גדולות.
- בדיקות על מכשירים אמיתיים עם פרופיילינג.
- אופטימיזציית shader וצללים למעברי LOD.
- תיעוד ומדריך תחזוקה.
לוח זמנים ועלות
הגדרת LOD ל-20–30 אובייקטים אורכת 2–3 ימים. מערכת LOD מלאה עם HLOD לכל המשחק אורכת שבוע עד שבועיים. העלות נקבעת באופן אישי לאחר ניתוח הפרויקט שלכם. קבלו ייעוץ על יישום LOD. אנו מבטיחים שיפור ב-FPS וביצועים יציבים. הזמינו ביקורת עוד היום.







