אופטימיזציית LOD: תיקון פופ, הפחתת Draw Calls, שיפור FPS
אנחנו נתקלים בבעיות LOD כמעט בכל פרויקט שני. LOD Group שהוגדר לא נכון ב-Unity עושה את ההפך מהמטרה: LOD0 עובר ל-LOD1 מוקדם מדי, השחקן רואה פופ חד, וזה מרגיש כמו באג. או שהמעברים מוגדרים לפי Screen Relative Height בלי להתחשב במרחק האמיתי—במצלמות אורתוגרפיות, LOD פשוט לא עובד. המטרה שלנו היא להפוך את ה-LOD לבלתי נראה אך יעיל.
המהות היא ש-LOD הוא מערכת לניהול מורכבות הסצנה בהתבסס על נראות אובייקטים. היא עובדת נכון רק כשמתחשבים ב: סוג המצלמה, מהירות תנועת השחקן, תאורה (הטלת צל מ-LOD1 לרוב גרועה יותר מאשר מ-LOD0), ואיך המנוע מחשב מרחק.
איך נוצר פופ LOD ומה עושים איתו
פופ LOD הוא הבעיה הוויזואלית העיקרית. זה קורה כשהגיאומטריה ו/או הטקסטורות בין הרמות שונות יותר מדי. מקרה קלאסי: אמן יצר LOD1 עם 60% פחות פוליגונים, אבל פריסת ה-UV זזה, ומפת הנורמלים לא מפצה על אובדן הצורה. המעבר במרחק 10 מטרים נראה לעין בלתי מזוינת. הפתרון הוא יצירת LOD נכונה (אנחנו משתמשים ב-Simplygon או ב-Unity LOD Generator) תוך שמירה על תפרי UV ובדיקת הקרנת נורמלים.
צללים לא עוקבים אחרי מעברי LOD. ב-Unity, Shadow Caster Culling עובד באופן עצמאי מ-LOD Group. אם יש לך LOD2 כ-billboard שטוח עם 2 פוליגונים, אבל הצל עדיין מחושב מהמשקוף של LOD0 (בגלל Force Shadow Casting = On), אתה משלם על רינדור צללים מהגיאומטריה המלאה של אובייקט שלא נראה ויזואלית. קל לפספס את זה—Frame Debugger מראה Shadow Pass עם תקציב draw call מלא. אנחנו מבטיחים חיסול של עלויות נסתרות כאלה.
HLOD (Hierarchical LOD) לא מוגדר לסצנות גדולות. בפרויקטים של עולם פתוח, LOD Group רגיל נכשל מעבר ל-500 מטרים—אובייקטים נחתכים אבל הסצנה לא נפרקת. Unity HLOD (דרך חבילת HLOD Creator) ממזג אוטומטית אובייקטים מרוחקים למשקוף אחד. בלי זה, ייתכנו 3000 draw calls מעצים באופק. נבחן את הפרויקט שלך תוך 1–2 ימים.
למה מדיניות LOD חייבת להיות שונה לפי סוג אובייקט
אנחנו קובעים מדיניות LOD נפרדת לכל קטגוריה (דמויות, מבנים, אביזרים, צמחייה). דוגמה מ-RPG למובייל עם עולם פתוח של 2×2 ק"מ: עצים: LOD0 (500 פוליגונים) עד 15מ', LOD1 (80 פוליגונים) עד 50מ', LOD2 (billboard צולב) עד 150מ', חיתוך מעבר ל-150מ'. מבנים: LOD0 עד 30מ', LOD1 עד 80מ', LOD2 עד 200מ'. תצורה זו הפחיתה draw calls מ-680 ל-210 במרכז העיר.
עבור Unreal Engine, אנחנו משתמשים ב-Nanite היכן שזה רלוונטי—על משקופים סטטיים עם ספירת פוליגונים גבוהה. אבל Nanite לא מחליף LOD לאובייקטים נעים ולא עובד עם חומרים שקופים. אנחנו מגדירים HLOD ב-UE5 דרך World Partition HLOD Layer. לפי תיעוד Unreal Engine, השיטה המומלצת ל-Nanite דורשת השבתת LOD עבור משקופי Nanite.
Cross-fading במקום פופ חד. Unity LOD Group תומך במצב Cross Fade—מעבר דית'רינג בין רמות. זה עובד דרך מילת המפתח Dither Fade shader. במובייל, דית'רינג זול יותר ממה שחושבים—Adreno מבצע אותו במקביליות טובה. אנחנו מפעילים אותו לאובייקטים גדולים בחזית, ושומרים על מעבר מיידי לאביזרים קטנים ומרוחקים.
צמחייה היא סיפור נפרד. SpeedTree LOD משתלב ב-Unity דרך pipeline נפרד. המלכוד העיקרי: SpeedTree billboard LOD מרונדר דרך BatchRendererGroup נפרד, וחייבים לפרופיל אותו בנפרד ממונה ה-draw call הראשי. ראינו פרויקטים שבהם 40% מזמן ה-GPU הלך ל-2000 עצי billboard שנראו "כבר אופטימליים". אנחנו מאמנים צוותים על ניואנסים כאלה כחלק מהתמיכה.
איך להגדיר LOD ב-5 שלבים
- פרופיל GPU: פתח את Profiler → GPU Usage ו-Frame Debugger מסונן לפי draw calls. זהה כמה אובייקטים מרונדרים עם פירוט יתר.
- ניתוח Overdraw: במצב Scene View, הפעל מצב Overdraw—מצא אובייקטים עם overdraw גבוה ללא LOD.
- מיון: חלק אובייקטים לקטגוריות וקבע מספרי רמות ומרחקי סף לפי הטבלה למטה.
- יצירת LOD: השתמש ב-Simplygon או בגנרטור המובנה. עבור משקופים קריטיים, עידון ידני.
- בדיקה על פלטפורמת היעד: בדוק היעדר פופ ושיפור FPS.
| קטגוריה | רמות | ספים (מ') | צללים |
|---|---|---|---|
| דמויות | LOD0, LOD1, LOD2 | 0–10, 10–25, 25–50 | פועל עד LOD1 |
| מבנים | LOD0, LOD1, LOD2 | 0–30, 30–80, 80–200 | פועל עד LOD0 |
| אביזרים (קטנים) | LOD0, LOD1 + חיתוך | 0–5, 5–15 | כבוי ב-LOD1 |
| צמחייה (עצים) | LOD0, LOD1, Billboard, חיתוך | 0–15, 15–50, 50–150 | כבוי ב-LOD2 |
התהליך שלנו לעבודת LOD
הביקורת מתחילה עם Profiler → GPU Usage ו-Frame Debugger. אנחנו סופרים כמה אובייקטים מרונדרים מעבר לפירוט הנראה. אחרי הביקורת, אנחנו מכינים מפרט LOD: טבלה עם קטגוריות אובייקטים, מספרי רמות, מרחקי סף ומדיניות צללים לכל רמה. מסמך זה מאושר עם צוות האמנות.
יישום: או הגדרת LOD Groups קיימים, יצירת נכסי LOD (אם חסרים), או יצירה אוטומטית עם תיקונים ידניים לאובייקטים קריטיים.
—
אחרי ביקורת, מצאנו 450 אובייקטים ללא LOD. יצרנו נכסי LOD עם 2–3 רמות, החלנו cross-fade למבנים ומיידי לאביזרים. תוצאה: FPS עלה מ-28 ל-55 על Samsung Galaxy S10. חיסכון ב-draw calls: 40%.
מה כלול בעבודה
| תוצר | תיאור |
|---|---|
| מפרט LOD | מסמך עם ספים, רמות והגדרות צללים לפי קטגוריה |
| LOD Groups מוגדרים | כל הנכסים עם הגדרה נכונה |
| משקופים אופטימליים | עותקי LOD שנוצרו או עודנו ידנית |
| המלצות להכנת נכסים | הוראות לאמנים להכנת נכסי מקור |
| תמיכה ביישום | ייעוץ במהלך אינטגרציה ובדיקות (חודש) |
| היקף משימה | לוח זמנים משוער |
|---|---|
| ביקורת הגדרות LOD + דוח | 1–3 ימים |
| הגדרת LOD לסצנה אחת (עד 200 סוגי אובייקטים) | 1–2 שבועות |
| עיצוב מדיניות LOD + יישום לעולם פתוח | 3–6 שבועות |
| אינטגרציית HLOD/Nanite לפרויקט קיים | 2–4 שבועות |
צרו קשר לייעוץ—נכין הצעה לפרויקט שלכם. למהנדסים שלנו יש ניסיון בהגדרת LOD לפרויקטי AAA ולמשחקי מובייל. כתבו לנו, נבחן את המשימה שלכם תוך 1–2 ימים ללא התחייבות.





