אופטימיזציה של צללים דינמיים למכשירים ניידים
לעתים קרובות אנו רואים פרויקטים שבהם GPU נייד עם Shadow Map ברזולוציה של 2048×2048 ללא קסקדות הוא דרך ישירה ל-18 אלפיות השנייה על ה-framebuffer רק עבור מעבר הצל. על Adreno 640, זה צורך את התקציב התרמי לפני שעיבוד הגאומטריה הראשית בכלל מתחיל. צללים בנייד אינם "הגדר ושכח" — זהו איזון מתמיד בין איכות ויזואלית למגבלות תרמיות. אנו מעריכים את הפרויקט שלך ומציעים פתרון מפתח ב-2–4 ימים.
למה הגדרות ברירת המחדל של Shadow Distance ב-Unity פוגעות בביצועים בנייד
הטעות הנפוצה ביותר היא השארת Shadow Distance בברירת המחדל (150 מ') ושימוש ב-Hard Shadows ב-URP ללא קסקדות. ה-GPU אז מעבד Shadow Map עבור כל הגאומטריה הנראית בסצנה, כולל אובייקטים במרחק 80 מטר שהשחקן לעולם לא יתקרב אליהם מספיק כדי להעריך את הצל.
מקרה קלאסי נוסף הוא שימוש ב-Realtime GI עם Enlighten בנייד יחד עם צללים דינמיים. Enlighten מחשב מחדש lightmaps בכל פעם שמקור אור זז, מה שגורם ב-Mali-G72 עם 4 ליבות לירידות קבועות ל-24 FPS במעברים בין אזורי תאורה. הפתרון הוא להעביר את כל האובייקטים הסטטיים ל-Mixed Lighting עם Subtractive Mode ולהשאיר Realtime רק על דמויות.
צללים קסקדיים (Cascade Shadow Maps) בנייד דורשים גם הם זהירות. שתי קסקדות במקום ארבע במרחקים של 8/40 מ' במקום 10/30/60/150 מ' נותנות רווח ביצועים ניכר. יש להגדיר Shadow Bias ידנית לכל סצנה — הערך האוטומטי של URP גורם לעיתים קרובות ל-Peter Panning על משטחים שטוחים בגלל depth buffer נייד (16-bit במכשירים רבים).
איזה stack אנו משתמשים לאופטימיזציה של צללים
אנו עובדים ב-Unity URP עם Custom Renderer Feature. הכלים העיקריים — Frame Debugger, מודול GPU Profiler ב-Unity Profiler, Snapdragon Profiler ו-Mali Graphics Debugger ללכידת נתונים מהמכשיר. הגדרה נכונה של קסקדות צל יכולה להפחית את עומס ה-GPU בעד 60%.
התהליך מתחיל בלכידת baseline: FPS, זמן GPU, מספר Shadow Caster Draw Call. בפרויקט טיפוסי עם 300+ אובייקטים בסצנה, Shadow Caster Pass מייצר 180–220 draw calls — חצי מהתקציב המומלץ לנייד (400 בסך הכל).
עבודה נוספת:
- העברת אובייקטים סטטיים קטנים (סלעים, מדרכות, קישוטים) ל-Shadow Static — הם נכנסים ל-Shadow Atlas הסטטי ואינם מצוירים מחדש בכל פריים.
- לדמויות ואובייקטים דינמיים, השתמש ב-Screen Space Shadows במקום Shadow Map היכן שעומק הסצנה מאפשר (עובד על Vulkan/Metal).
- הגדר Shadow Fade Distance עם מעבר חלק ל-Blob Shadow (צל מטקסטורה מוקרנת) מעבר ל-15 מ' — בלתי מורגש ויזואלית, עלות מינימלית.
- ב-GPUs מבוססי tile (Adreno, Mali), הפעל Early-Z Culling באמצעות מיון נכון של Render Queue: גאומטריה אטומה ראשונה, שקופה אחרונה.
לפרויקטי VR ב-Quest 2/3, יש סיפור נפרד — Multiview Rendering (single-pass stereo) מעבד את ה-Shadow Map פעם אחת לשתי העיניים. אבל אם בסצנה יש אובייקטי Shadow Caster עם Culling Masks שונים לעין שמאל/ימין, מעבר הצל מתפצל לשני מעברים עצמאיים, מה שמוסיף מיד +8–12 אלפיות השנייה. זו מלכודת באגים בלתי נראית ב-Editor. פתרון — איחוד Culling Masks לצללים.
איך להגדיר Shadow Map ל-30 FPS יציב בנייד
תוכנית שלב-אחר-שלב לפרויקט טיפוסי:
- צור URP Asset חדש לנייד: השבת Soft Shadows, הפחת את רזולוציית הצל ל-1024.
- הגדר Shadow Distance ל-30–50 מ', השתמש ב-2 קסקדות עם חלוקה של 60/40.
- לאובייקטים סטטיים, החל Baked Lightmap דרך Mixed Lighting.
- לאובייקטים דינמיים, הפעל Screen Space Shadows. אם המכשיר לא תומך בכך (OpenGL ES 3.0), יישם ידנית Blob Shadow לאובייקטים רחוקים מ-15 מ'.
- בדוק את
Render Queue: אובייקטים אטומים (Geometry) צריכים להופיע לפני שקופים למחצה (Transparent). זה מפעיל Early-Z Culling.
שיטה זו חוסכת עד 60% מזמן ה-GPU בהשוואה ל-Shadow Map מלא — ההבדל נראה בבדיקות: Shadow Map רגיל ב-Quest 2 נותן 62 FPS, בעוד Screen Space + Blob נותן 71 FPS עם פחות ייצור חום.
מה כלול בעבודה: שלבים ותוצרים
ביקורת סצנה. אסוף נתונים מהמכשיר היעד דרך ADB + Unity Profiler: מספר Shadow Caster, זמן GPU Shadow Pass, הגבלה תרמית במשך 5 דקות של עומס. כולל: דוח עם מדידות baseline והמלצות.
מפרט טכני. בהתבסס על תוצאות הביקורת, קבע מה ניתן להמיר ל-Baked, מה נשאר Mixed, ומהו Shadow Distance ריאלי עבור המשחקיות של אותו פרויקט. תקבל מסמך תוכנית עבודה.
יישום. הגדר URP Asset, Renderer Feature, Culling Groups לצללי LOD, כתוב Shadow Caster Pass מותאם אישית אם הסטנדרטי לא מכסה את הצרכים (למשל, לצמחייה עם Alpha Cutout). כולל: הגדרת פרויקט, קוד pass מותאם, אינטגרציה ל-pipeline שלך.
בדיקת חומרה. הרץ על לפחות שלושה מכשירים מטריצת היעד: נמוך (Snapdragon 665), בינוני (Snapdragon 778G), גבוה (Snapdragon 8 Gen 2). בדיקת הגבלה תרמית — 15 דקות של סשן משחק רציף. כולל: דוח בדיקות.
פרופיילינג ואיטרציה סופית. השווה ל-baseline, הוסף מעבר Blob Shadow נוסף במידת הצורך. צור קשר כדי להעריך את הפרויקט שלך ביום אחד. הניסיון שלנו: 5+ שנים בגרפיקה ניידת, 50+ פרויקטים מוצלחים עם Unity URP.
איך לבצע אופטימיזציה של צללים במכשירי VR?
ל-VR (Quest 2/3), אנו משתמשים בעיבוד סטריאוסקופי single-pass, שמחצה את מעבר הצל. אבל המפתח הוא להימנע מכפילות של מעבר הצל עקב Culling Masks שונים. אנו גם מיישמים Screen Space Shadows למישור הקרוב (עד 10 מ') ו-Blob Shadows למרחק. זה נותן 72 FPS יציב ללא הגבלה תרמית.
השוואת גישות:
| שיטה | FPS ב-Quest 2 | זמן GPU | איכות |
|---|---|---|---|
| Cascade Shadow Maps (4 קסקדות) | 58–62 | 16–18 אלפיות השנייה | גבוהה |
| Cascade Shadow Maps (2 קסקדות) | 68–71 | 10–12 אלפיות השנייה | בינונית |
| Screen Space + Blob Shadow | 71–72 | 6–8 אלפיות השנייה | מקובלת |
המהנדסים שלנו מגדירים את האיזון האופטימלי לפרויקט הספציפי שלך. צור קשר לייעוץ.
איך לבדוק את זמן מעבר הצל במכשיר
1. הפעל את Unity Profiler מחובר למכשיר דרך ADB. 2. הפעל את מודול GPU Profiler. 3. סנן לפי "Shadow" או "ShadowCaster". 4. השווה את זמן ה-GPU מול התקציב (16.6 אלפיות השנייה ל-60 FPS).| היקף המשימה | לוח זמנים משוער |
|---|---|
| ביקורת + הגדרת URP בסיסית (סצנה אחת) | 2–4 ימים |
| אופטימיזציית צללים מלאה (3–5 סצנות) | 1–2 שבועות |
| פרויקט VR עם Multiview + Custom Renderer Feature | 2–4 שבועות |
העלות מחושבת בנפרד לאחר ביקורת הפרויקט וניתוח הדרישות.
טעויות נפוצות שאנו רואים בפרויקטים
אי הגדרת Render Shadow Maps לכל אובייקט — כל האובייקטים מעבדים Shadow Map ללא קשר למרחק מהמצלמה, למרות שניתן להסיר אובייקטים רחוקים דרך ShadowCastingMode.Off ברמת LOD2.
שימוש ב-Light.shadowCustomResolution = 4096 בסקריפט ללא בדיקת SystemInfo.graphicsMemorySize — בטלפונים תקציביים עם 2 GB RAM, זה מבטיח קריסה בזיכרון נמוך.
ערבוב MSAA x4 עם צללים דינמיים על אותו Render Target ב-Mali ישן — הדרייבר נופל לתוכנה, FPS יורד פי 2–3. במכשירים אלה, חייבים לכפות MSAA x2 או להשבית דרך QualitySettings.antiAliasing.
קבל ייעוץ — ננתח את הפרויקט שלך ונספק פתרונות. הזמן ביקורת.





