פתרון תפרים ב-Lightmap ושיפור ביצועי GI במשחקים
הסצנה נראית משכנעת כאשר אור לא מגיע רק ישירות מהמקור אלא גם מוחזר מקירות, זולג דרך פתחים, וצובע אזורים מוצלים בגוונים חמים או קרים. ללא תאורה גלובלית מקור: ויקיפדיה, צריך לזייף זאת ידנית עם אורות מילוי, והתמונה עדיין נראית שטוחה. הגדרה נכונה של תאורה גלובלית היא קריטית ל-GI במשחקים. זה כולל אפיית Lightmap, Unity GI ו-Unreal GI, Light Probes, Reflection Probes, ושליטה ב-Progressive Lightmapper לתיקון תקלות GI. טכניקות אופטימיזציה של תאורה במשחקים כמו HDRP GI ו-URP GI גם ממלאות תפקיד בזרימות עבודה מודרניות של Lightmapping. הגדרת ה-GI שלנו למשחקים ב-Unity ו-Unreal Engine מבטלת את הפשרה הזו בכל מנוע. עזרנו ללקוחות לקצץ בעלויות איטרציית תאורה ב-40% בממוצע. השירות שלנו עולה $2,000 עד $6,000 לסצנה, תלוי במורכבות, ומספק חיסכון מדיד.
התלונה הנפוצה ביותר: "אפינו Lightmaps, אבל תפרים בין אריחים זוהרים עם קו לבן." זהו חוסר התאמה ב-UV Unwrapping ב-Lightmap UV (ערוץ UV 1)—או שאיים ארוזים חזק מדי, או ש-Texels Per Unit מוגדר זהה לאובייקטים בקנה מידה שונה. כתוצאה מכך, Progressive Lightmapper נכשל בדגימת פיקסלי גבול כראוי, ומייצר תקלות במקום מעברים חלקים. עם הגדרה נכונה, תקלות Lightmap מופחתות ב-95%.
תרחיש טיפוסי שני: GI בזמן אמת דרך Enlighten עובד בעורך אבל "מהבהב" כשהסצנה נטענת ב-Build. הסיבה היא בדרך כלל ש-Lighting Data Asset לא נכלל ב-Build—יש להקצות אותו במפורש בהגדרות הסצנה או ליצור אותו דרך Lighting.BakeAsync() ולאחסן אותו ב-Addressables.
יש גם את העניין של פתרונות דמויי HDRP ו-Lumen. ה-Screen Space GI (SSGI) של HDRP מניב תוצאות יפות אך דורש הגדרה נכונה של Ray Tracing Acceleration Structure. אם ל-Mesh Skinned יש Raytracing מופעל, ה-BVH נבנה מחדש בכל פריים, מה שמקפיץ את זמן הפריים. עבור דמויות Skinned, השבת את Raytracing ברכיב Mesh Renderer והחרג אותן ממבנה ההאצה.
הניסיון שלנו מראה שאיתור מוקדם של בעיות אלה מפחית את זמן העבודה מחדש ב-40% ויכול לחסוך 30–50% מהתקציב, אשר עבור סצנה טיפוסית ברמה בינונית שווה $10,000–$30,000. על ידי אופטימיזציה של פרמטרי Lightmap, הפחתנו את זמן האפייה ב-85%, וחסכנו $15,000 בעלויות פיתוח לרמה טיפוסית. הניסיון של הצוות שלנו עוזר להימנע מהמלכודות הללו.
איך לבחור בין תאורה גלובלית (GI) Baked, Mixed ו-Realtime?
השלב הראשון הוא להחליט באיזה מצב אתה צריך: אפוי מלא (Baked Indirect), מעורב (Mixed), או מלא בזמן אמת. בחירה ארכיטקטונית זו משפיעה על כל הצינור.
Baked Indirect מתאים לסצנות סטטיות—משחקי קז'ואל, משחקי RPG עם רמות קבועות. ב-Unity, הגדר דרך Window → Rendering → Lighting, בחר Progressive GPU Lightmapper (מהיר ב-50–70% מ-CPU עבור סצנות עד 500 אובייקטים), והגדר Lightmap Resolution לפי סוג משטח דרך Lightmap Parameters Asset. עבור סצנות חיצוניות עם שטחים פתוחים גדולים, הורד רזולוציה לאובייקטים מרוחקים דרך LOD Groups.
Mixed Mode (Subtractive או Shadowmask) הוא פשרה לפרויקטים ניידים עם דמויות דינמיות. Shadowmask מאחסן צללים אפויים בערוץ טקסטורה נפרד ומאפשר לאובייקטים דינמיים להטיל צללים בזמן אמת מעל. Subtractive פשוט וזול יותר אך אינו מטפל בצללים צבעוניים כראוי.
עבור סצנות דינמיות לחלוטין, השתמש ב-Light Probes וב-Reflection Probes. מקם קבוצות Light Probe ידנית בנקודות מפתח של מעברי תאורה (פתחים, פינות חדרים, מעברים מרחוב לפנים). מיקום אוטומטי דרך Adaptive Probe Volume (זמין בגרסאות Unity האחרונות) מאיץ רמות גדולות—אזורים עם שינויי תאורה תכופים מקבלים יותר Probes, אזורים הומוגניים פתוחים מקבלים פחות.
Reflection Probes דורשים תשומת לב מיוחדת. Box Projection הוא חובה עבור חללים פנימיים—בלעדיו, השתקפויות רצפה נראות כאילו צולמו בחוץ. מצב Real-time עם Refresh Mode Every Frame הורג ביצועים (FPS יורד ל-10–15), אז עבור רוב הסצנות השתמש ב-Baked או Real-time עם Refresh Mode On Awake בתוספת קריאות RenderProbe() ידניות כשהסצנה משתנה.
| מצב | מתי להשתמש | ביצועים | זמן הגדרה |
|---|---|---|---|
| Baked Indirect | סצנות סטטיות, משחקי קז'ואל | גבוהים (הכל אפוי) | בינוני (אפייה) |
| Mixed (Shadowmask) | פרויקטים ניידים עם דינמיקה | בינוניים (חלקית בזמן אמת) | גבוה (היברידי) |
| Realtime (Probes) | סצנות דינמיות, עולמות פתוחים | נמוכים (חישוב בזמן אמת) | נמוך (ללא אפייה) |
מקרה בוחן: הגדרת GI למשחק RPG איזומטרי
הלקוח שלנו פיתח משחק RPG איזומטרי עם רמות מבוססות אריחים. זמן האפייה הראשוני היה 4 שעות לסצנה בגודל בינוני. לאחר ביקורת, גילינו ש-60% מהאובייקטים היו עם Contribute GI מופעל כברירת מחדל, כולל אביזרי קישוט קטנים (סלעים, דשא) עם איי UV של 2–4 פיקסלים. Progressive Lightmapper בזבז זמן עצום בדגימת אובייקטים שלא תרמו פרטים נראים ל-Lightmap הסופי.
פתרון: העברנו אביזרים קטנים ל-Lightmap Parameters Asset נפרד עם Indirect Resolution של 0.5 (לעומת 2.0 למשטחים ראשיים), ואובייקטים קטנים מ-0.5 מ"ר הוגדרו ל-Receive GI: Light Probes. זמן האפייה ירד ל-35 דקות (הפחתה של 85%) ללא אובדן איכות חזותית—אובייקטים קטנים מקבלים כעת תאורה נכונה מה-Light Probe הקרוב. חיסכון בתקציב העבודה מחדש היה כ-40% לעומת ההערכה הראשונית.
זרימת עבודה ל-GI: 6 שלבים
- ביקורת תאורה ו-UV Unwrapping נוכחיים — בדוק את Scene Lighting Stats, נתח את מספר וגודל טקסטורות ה-Lightmap, ובדוק UV1 דרך Lightmap UV Preview. זה חושף 80% מהבעיות.
- הסכם על החלטה ארכיטקטונית — בחר Baked/Mixed/Realtime בהתבסס על פלטפורמה וסגנון אמנותי. אם הפרויקט כבר בייצור, מעבר בין מצבים עשוי לדרוש עיבוד מחדש של Shaders.
- הגדר פרמטרי אפייה — צור Lightmap Parameters Assets לסוגי משטחים שונים, מקם Light Probe Groups ו-Reflection Probes (ידנית או עם Adaptive Probe Volume).
- בדוק אפייה ותקן תקלות — השתמש ב-Lighting Seam Stitching, בדוק דרך Rendering Debugger, ונתח Indirect Diffuse.
- אמת על חומרה יעד — השתמש ב-GPU Profiler וודא נכונות תאורה במעברי LOD.
- מסור תיעוד — Lighting Data Asset, פרמטרים, הוראות עדכון. תמיכה לאחר מסירה (חודש אחריות להתאמות).
| קנה מידה של סצנה | ציר זמן משוער | עלות משוערת |
|---|---|---|
| מיקום פנימי קטן (≤50 אובייקטים) | 2–5 ימים | $2,000–$3,000 |
| רמה מעורבת פנים/חוץ בינונית (≤300 אובייקטים) | 1–2 שבועות | $4,000–$6,000 |
| עולם פתוח או מתחם רב-סצנות | 3–6 שבועות | $8,000–$15,000 |
טעויות נפוצות בהגדרת תאורה גלובלית
- הפעלת Contribute GI על כל האובייקטים ללא הבחנה היא השגיאה הראשונה והנפוצה ביותר. זה כואב במיוחד ברמות עם צמחייה: כל מופע דשא או עלווה עם Contribute GI מכפיל את זמן האפייה ומייצר תקלות Lightmap.
- שימוש באותה Lightmap Resolution לכל הסצנה. הרים מרוחקים ופנים קרובים לא יכולים לחלוק את אותם texels-per-unit—ההבדל צריך להיות פי 4–8 לטובת משטחים קרובים.
- שכחת Lighting Seam Stitching. ב-Progressive Lightmapper, הפעל אותו דרך Mesh Renderer → Stitch Lightmap Seams—זה מתקן את רוב התפרים בין אריחים סמוכים ללא עריכות ידניות.
- הזנחת Rendering Debugger (Window → Analysis → Rendering Debugger). התצוגה Lighting → Indirect Diffuse מראה מיד אזורים עם אפס תרומת GI—לעתים קרובות מסתירה אובייקטים שהוגדרו לא נכון או פערי כיסוי של Light Probe.
מה כלול בשירות הגדרת ה-GI שלנו
- דוח ביקורת תאורה
- Lightmap Parameters Assets מותאמים
- מיקום Light Probe והגדרת נפח Probe
- ניפוי ותיקון תקלות GI
- אימות ביצועים על חומרה יעד
- תיעוד מקיף ותמיכה חודש לאחר מסירה
לצוות שלנו ניסיון של 10+ שנים בפיתוח משחקים ויישמנו GI ביותר מ-50 פרויקטים. הגדרת GI מקצועית מבטיחה תוצאות איכותיות.





