גיאומטריה

משחקי תלת-ממד שפועלים בצורה טובה במספר הגדול ביותר של מכשירים מתחילים עם גרפיקה תלת-ממדית שנועדה לנצל בצורה הטובה ביותר את מעבדי הגרפיקה. במדריך הזה מפורטות שיטות מומלצות לאופטימיזציה של נכסי תלת-ממד בניידים, כדי לשפר את הביצועים של המשחק ולצמצם את צריכת החשמל.

חלקים מהמאמר הזה מבוססים על עבודה שנתרמה על ידי Arm Limited ומוגנת בזכויות יוצרים שלה.

הגדרת הגיאומטריה

גיאומטריה, או רשת פוליגונים, היא אוסף של קודקודים, קצוות ופאות שמרכיבים את הצורה של אובייקט תלת-ממדי. זה יכול להיות רכב, נשק, סביבה, דמות או כל נכס ויזואלי במשחק.

איור 1. הקודקודים, הצלעות והמשולשים של קובייה.

הגיאומטריה מורכבת מהחלקים הבאים:

  • קודקודים: שם העצם ברבים של קודקוד. הנקודות האלה מגדירות את המבנה של אובייקט במרחב תלת-ממדי.

  • צלעות: שני קודקודים שמחוברים באמצעות קו ישר.

  • משולש: שלושה קודקודים שמחוברים זה לזה באמצעות שלוש צלעות יוצרים משולש. הצורה הזו נקראת לפעמים פוליגון או פאה. בתוכנות תלת-ממד כמו 3ds Max,‏ Maya או Blender, בדרך כלל עובדים עם צורות מרובעות. מרובעים הם מצולעים בעלי ארבעה צדדים, וקל יותר לשנות אותם ולעבוד איתם. כשמבצעים רינדור, המצולעים האלה מוצגים במסך כמשולשים.

בקטעים הבאים מופיע מידע נוסף על גיאומטריה:

שימוש במשולשים ובפוליגונים

בקטע הזה מפורטות שיטות מומלצות לשימוש במשולשים ובמצולעים. ההמלצות האלה כוללות:

הקטנת מספר המשולשים

אם כוללים יותר מדי משולשים, ביצועי המשחק נפגעים.

משתמשים בכמה שפחות משולשים. מומלץ להשתמש רק בכמות שתאפשר לכם להשיג את האיכות הרצויה. כשיוצרים תוכן למשחק לנייד, חשוב להביא בחשבון את ההשפעה על הביצועים. עיבוד של קודקודים הוא תהליך יקר. ככל שיש פחות קודקודים, כך הביצועים הכוללים של המשחק טובים יותר. בנוסף, ככל שתשתמשו בפחות משולשים, כך המשחק יוכל לפעול ביותר מכשירים בלי צורך במעבד גרפי (GPU) חזק.

בתמונה הבאה אפשר לראות שאפשר לשמור על האיכות עם פחות משולשים:

לאובייקט שמימין יש 584 משולשים, ולאובייקט שמשמאל יש 704.

איור 2. השוואה בין שני אובייקטים עם מספר שונה של משולשים שנראים זהים במצב מוצלל. באובייקט שמימין, הוסרו קצוות שלא תורמים לצללית.

בפלטפורמות לנייד, מספר הקודקודים המקסימלי הנפוץ לרשת בודדת הוא 65,535. כדי להבטיח תאימות מקסימלית, צריך להקפיד שמספר התווים לא יעלה על המספר הזה.

הסיבה למגבלה הזו היא שכל המעבדים הגרפיים מבטיחים תמיכה רק באינדקסים של 16 ביט, שיכולים לייצג טווח של 0 עד 65,535 קודקודים. רוב המעבדים הגרפיים המודרניים תומכים באינדקסים של 32 ביט, שמייצגים טווח של 0 עד 4,294,967,295 קודקודים, אבל לא כולם. אם חורגים מהטווח הנתמך כשמשתמשים באינדקסים של 16 ביט, התוצאה היא גיאומטריה חסרה או לא תקינה.

תמיד כדאי לצפות במשחק ולבדוק אותו בכל המכשירים שבהם אתם מתכוונים להשיק אותו, ולא במסך מחשב. יכול להיות שחלק מהדגמים עם רמת פירוט גבוהה לא יוצגו בצורה נכונה או אפילו לא יוצגו במכשיר נייד.

מומלץ להשתמש ביותר משולשים באובייקטים בחזית ובפחות משולשים באובייקטים ברקע. האפשרות הזו מועילה יותר למשחקים עם נקודת מבט סטטית של המצלמה. בדוגמה הבאה מוצג שימוש מתאים בפרטים של אובייקטים שונים.

הפרטים באובייקטים שבחזית נוצרים באמצעות משולשים. פרטי הרקע מוטבעים במשטחים שטוחים.

איור 3. בדוגמה הזו אפשר לראות את רמת הפירוט הגבוהה של אובייקטים בחזית בהשוואה לאובייקטים ברקע.

מספר המשולשים המקסימלי שמומלץ להשתמש בהם במודל משתנה בהתאם למכשיר ולתוכן. אם יש יותר אובייקטים במסך, כדאי להשתמש בפחות משולשים בכל מודל. אם מוצגים רק שניים או שלושה אובייקטים, יכול להיות שהם יכללו יותר משולשים.

בדוגמה הבאה מוצגים שני מודלים מתוך הדגמות שונות. הדמו של Circuit VR כולל רק דמות אחת של רובוט. מכיוון שיש רק אובייקט אחד, למודל הרובוט יש מספר משולשים גבוה יותר. המודל השני הוא מהדמו של Armies. בהדגמה הזו יש מאות חיילים בכל פריים, ולכן לכל חייל יש פחות משולשים.

איור 4. השוואה של מספר המשולשים בשני תרחישי שימוש שונים. בצד ימין, רובוט CircuitVR מורכב מ-11,000 משולשים. בצד שמאל, לחייל של צבא יש 360 משולשים.

דוגמה לשימוש במשולש

באיור הבא מוצג מספר המשולשים לדוגמה שנעשה בהם שימוש בהדגמה הטכנולוגית של Armies.

בהדגמה של Armies, שהיא הדגמה טכנולוגית לנייד ב-64 ביט שנבנתה ב-Unity, המצלמה סטטית ויש הרבה דמויות מונפשות. בסך הכול, כל פריים מעובד עם כ-210,000 משולשים. מספר המשולשים הזה מאפשר להפעיל את ההדגמה באופן יציב בקצב של כ-30 פריימים לשנייה (FPS).

איור 5. דוגמה להצגה מתוך הדמו הטכני של The Armies, שבה מוצג מספר המשולשים שנעשה בהם שימוש.

האובייקטים הגדולים ביותר בסצנה, מגדלי התותחים, הם בערך 3,000 משולשים כי הם תופסים חלק גדול מהמסך.

כל דמות מורכבת מכ-360 משולשים. יש הרבה עצים, ואפשר לראות אותם רק מרחוק, לכן לא צריך הרבה משולשים כדי לצייר אותם. מנקודת המבט של המצלמה, הם נראים מתאימים.

איור 6. תצוגה של חיילים עם מספר נמוך של משולשים בהדגמה הטכנולוגית של Armies.

שימוש במשולשים באזורים חשובים

השימוש בקודקודים יקר מאוד בפלטפורמות לנייד. כדי למנוע בזבוז של תקציב העיבוד, מומלץ למקם את הקודקודים באזורים שתורמים לאיכות החזותית של המשחק. יכול להיות שפרטים קטנים באובייקט תלת-ממדי לא יהיו גלויים במסך הסופי של המשחק. יכול להיות שאי אפשר לראות פרטים קטנים בגלל הגודל הקטן של המסך והמיקום של אובייקטים בתלת-ממד.

במקום להתמקד בפרטים קטנים, כדאי להתמקד בצורות גדולות שיוצרות את הצללית. בתמונה הבאה אפשר לראות דוגמה להתמקדות בצללית:

איור 7. הקו האדום סביב הרובוט מייצג את הצללית שלו.

מומלץ להשתמש בפחות משולשים באזורים שלא רואים לעיתים קרובות מנקודת המבט של המצלמה. לדוגמה, החלק התחתון של מכונית או החלק האחורי של ארון. אם חלק מאובייקט לא יוצג אף פעם, צריך למחוק את החלק הזה.

צריך לבצע את המחיקה של חלק מאובייקט בזהירות, כי היא עלולה להגביל את האפשרות לעשות שימוש חוזר באובייקט. לדוגמה, אם מוחקים את החלק התחתון של רשת טבלה, המשתמש יבחין בקטע שנמחק אם הטבלה מוצבת הפוך.

אל תשתמשו ברשתות משולשים בצפיפות גבוהה כדי ליצור מודלים של פרטים קטנים. כדי להוסיף פרטים קטנים, משתמשים במרקמים ובמפות נורמליות. בדוגמה הבאה מוצגת אותה רשת עם מפת נורמלים ובלי מפת נורמלים.

איור 8. השוואה בין מודל עם מפת נורמליות לבין מודל בלי מפת נורמליות.

הסרת משולשים קטנים

משולשים מיקרו הם משולשים קטנים מאוד שלא תורמים לתוצאה הסופית של סצנה.

בכל האובייקטים התלת-ממדיים עם מספר רב של פוליגונים יש בעיות של משולשים קטנים מאוד כשמזיזים אותם מהמצלמה. אין הגדרה סטנדרטית בתעשייה למיקרו-משולשים, אבל בדרך כלל הכוונה היא למשולשים קטנים יותר מפיקסל אחד עד 10 פיקסלים בתמונה הסופית. משולשים קטנים הם בעיה כי המעבד הגרפי צריך לבצע את כל העיבוד על כל המשולשים האלה, גם אם הם לא תורמים לתמונה הסופית.

משולשים קטנים נגרמים משני דברים:

  • פרטים קטנים מדי שמורכבים מהרבה משולשים.
  • אובייקטים רחוקים יותר מהמצלמה עם הרבה משולשים.

איור 9. השפעת המרחק על משולשים קטנים.

באיור 9, לרובוט שבחזית אין משולשים מיקרוסקופיים. הרובוט ברקע עושה את זה כי כל משולש הוא בגודל של פיקסל אחד עד 10 פיקסלים בלבד.

איור 10. השוואה בין משולשים מיקרוסקופיים במודלים מפורטים מאוד. רוב המשולשים באזור המודגש קטנים מדי ואי אפשר לראות אותם במסכי טלפון.

כדי להציג אובייקט שנמצא רחוק יותר מהמצלמה, משתמשים ברמת פירוט (LOD). כך אפשר לצמצם את המורכבות של אובייקט ולפשט אותו. התוצאה היא אובייקט עם פחות משולשים.

אל תשתמשו בהרבה משולשים כדי ליצור פרטים במודל. כדי ליצור פרטים קטנים כאלה, צריך להשתמש במרקמים ובמפות נורמליות. אפשר למזג קודקודים ופרטים של משולשים שהם קטנים מדי ולא תורמים לתמונה הסופית.

חשוב לצמצם את מספר המשולשים הקטנים כי הם יכולים להשפיע על רוחב הפס של הזיכרון. יותר משולשים מובילים ליותר נתונים שנשלחים ל-GPU. במכשיר נייד, זה יכול להשפיע על חיי הסוללה. צריכת חשמל מוגברת עלולה לגרום להגבלת מהירות השעון של המעבד הגרפי (GPU) בגלל חום, מה שמגביל את הביצועים המקסימליים שלו.

הימנעות ממשולשים ארוכים וצרים

אלה משולשים שכשמעבדים אותם בתמונה הסופית, הם קטנים מ-10 פיקסלים בממד אחד ומשתרעים על פני חלק גדול מהמסך. בדרך כלל, העיבוד של משולשים ארוכים וצרים יקר יותר מהעיבוד של משולשים אחרים.

בתמונה הבאה, כשמסתכלים על העמוד מרחוק, השוליים המשופעים שלו נראים כמו משולש ארוך ודק. השוליים המשופעים האלה לא מהווים בעיה אם רואים אותם מקרוב.

איור 11. השיפוע בעמוד הוא משולש ארוך ודק.

מומלץ להסיר משולשים ארוכים וצרים מכל האובייקטים, אם אפשר.

במקרה של עצמים מבריקים, משולשים ארוכים וצרים עלולים לגרום להבהוב אור כשהמצלמה זזה. LOD יכול לעזור להסיר משולשים ארוכים ודקים כשאובייקט רחוק מהמצלמה.

אם אפשר, כדאי לנסות לשמור על כך שכל המשולשים יהיו קרובים למשולשים שווי צלעות. כך המשולשים מקבלים שטח גדול יותר ופחות קצוות. בדרך כלל, משולשים ארוכים וצרים מניבים ביצועים נמוכים יותר בהשוואה למשולשים גדולים יותר. מידע נוסף על שטח משולש זמין במאמר טריאנגולציה.

רמת פירוט

רמת הפירוט (LOD) היא טכניקה שמפחיתה את המורכבות ככל שהאובייקטים מתרחקים מהצופה. הצורה הנפוצה ביותר של LOD כוללת כמה גרסאות של רשת, עם מספר הולך ופוחת של קודקודים. ה-LOD לא רק מצמצם את מספר הקודקודים שצריך לעבד, אלא גם מונע את הבעיה של משולשים קטנים. הוא גם נראה טוב יותר לאובייקטים שממוקמים רחוק יותר בסצנה.

מומלץ להשתמש ב-LOD בכל הזדמנות. מתמקדים בצללית של האובייקט. מומלץ להתמקד באזורים שטוחים כדי לצמצם את מספר הקודקודים. בתמונה הבאה מוצג שימוש ב-LOD, שמוחל על מודל הרובוט.

משמאל, הרובוט עם הכי הרבה פרטים ומספר המשולשים הגדול ביותר. בצד ימין, הרובוט רחוק יותר, יש בו פחות פרטים והוא מורכב מפחות משולשים.

איור 12. השוואה של מספר הקודקודים שנעשה בהם שימוש כשה-LOD משתנה.

באיור 12, קשה לראות את ההבדל בין אותו אובייקט שמורכב מ-200 משולשים או מ-2,000 משולשים מרחוק. אובייקט עם יותר משולשים מוסיף עלות גבוהה למשאבים, אבל לא משפר את המראה כשמסתכלים עליו מרחוק.

איור 13. השוואה בין מודלים רחוקים עם מספרים שונים של משולשים.

המושג LOD יכול להתייחס גם למורכבות של הצללה ולרזולוציה של טקסטורה. ברמת פירוט נמוכה יותר, יכול להיות שנעשה שימוש בחומרים שונים עם הצללות פשוטות יותר ופחות טקסטורות. כדאי גם לוודא שלטקסטורות יש מפות מיפמפ, כדי שרמות טקסטורה ברזולוציה נמוכה יותר יוחלו על אובייקטים רחוקים. השימוש באמצעים האלה ישפר את הביצועים, אבל יגדיל את נפח הנתונים.

אנחנו לא ממליצים להשתמש ב-LOD במשחקים שבהם המצלמה והאובייקטים סטטיים. היתרון הגדול ביותר של LOD הוא עבור אובייקטים שמתקרבים למצלמה ומתרחקים ממנה. אובייקטים סטטיים לא זזים, ולכן אין יתרון ל-LOD.

איור 14. סצנה עם מצלמה סטטית מהדמו הטכנולוגי של Armies שלא נעשה בה שימוש ב-LOD.

יחסי LOD

כשמפחיתים את מספר המשולשים ברמת הפירוט, צריך להשתמש ביחס עקבי. מומלץ להקטין את מספר המשולשים ב-50% בכל רמה.

אל תשתמשו ב-LOD באובייקטים פשוטים. אובייקטים שכבר יש להם מספר נמוך של משולשים לא מפיקים תועלת מ-LOD. בדוגמה הבאה מתוך הדמו הטכני של The Armies אפשר לראות איך המשחק נראה עם תמונה סטטית ואובייקטים עם מספר נמוך של משולשים.

איור 15. השוואה בין מודלים ככל שרמת הפירוט יורדת.

מוודאים שרמות הפירוט משתנות במרחקים הנכונים מהמצלמה. הניתוח צריך להתבסס על אופן השימוש בהם במשחק.

איור 16. השוואה בין המראה של מודל LOD 3 מקרוב ובין המראה שלו במרחק המיועד.

אין מספר מדויק של רמות פירוט שמתאים לאובייקט. זה תלוי בגודל של האובייקט ובחשיבות שלו. לדוגמה, לדמות במשחק פעולה או למכונית במשחק מירוצים יכולות להיות יותר רמות LOD מאשר לאובייקטים קטנים ברקע כמו עץ.

חשוב לזכור שרמת פירוט גבוהה מדי עולה במשאבי מעבד. נדרשת יותר עוצמת עיבוד כדי שהמעבד יחליט איזו רמת פירוט להציג. רמות פירוט גם צורכות זיכרון, מה שמגדיל את גודל הקובץ ואת השימוש ב-VRAM. בנוסף, לוקח יותר זמן ליצור ולאמת את מודלים של רמת פירוט (LOD).

יש שתי דרכים ליצור רשתות LOD: באופן ידני ובאופן אוטומטי.

  • אפשר ליצור רשתות LOD באופן ידני בכל תוכנת תלת-ממד.
    • כדי לעשות את זה, מסירים לולאות קצה או מצמצמים את מספר הקודקודים באובייקט התלת-ממדי.
    • כך האומן מקבל את השליטה המלאה על המוצר הסופי, אבל התהליך עשוי להימשך זמן רב יותר.
  • אפשר ליצור רשתות LOD באופן אוטומטי.
    • אפשר להשתמש בשינוי בתוך חבילת תלת-ממד כמו ProOptimizer ב-3ds Max או Generate LOD Meshes ב-Maya.
    • אפשר להשתמש בתוכנה ליצירת LOD כמו Simplygon או InstaLOD.
    • חלק ממנועי המשחקים כוללים תכונה של יצירת LOD אוטומטית, שמאפשרת לכם ליצור ולהחיל רשתות LOD.

שיטות מומלצות

יש טכניקות נוספות להפחתת המשאבים הנדרשים למשחק, תוך שמירה על איכות הגרפיקה.

החלקת קבוצות או נורמלים של קודקודים בהתאמה אישית

אפשר להשתמש בקבוצות החלקה או בנורמלים מותאמים אישית של קודקודים כדי להגדיר את הקשיחות של קצה ולשנות את המראה של מודל. קבוצת החלקה עוזרת ליצור הצללה טובה יותר בבימוי אמנותי של פוליגונים נמוכים. קבוצת החלקה משפיעה גם על פיצול של אזורים במיפוי UV ועל האיכות של מפות נורמליות כשמבצעים אפייה.

דוגמה לקבוצת החלקה. מימין, הרובוט עם קבוצת החלקה שהוחלה עליו.

איור 17. השוואה בין מודל עם קבוצת החלקה לבין מודל בלי קבוצת החלקה.

אם מטמיעים קבוצת החלקה במודל תלת-ממדי, צריך לייצא אותו מתוכנת התלת-ממד ולייבא אותו למנוע.

טופולוגיית רשת (mesh)

כשיוצרים נכס תלת-ממדי חדש, חשוב לוודא שהטופולוגיה שלו מסודרת. טופולוגיה נקייה חיונית לדמויות ולאובייקטים אחרים שמונפשים ומשתנים. הטופולוגיה לא צריכה להיות מושלמת. חשוב לזכור שמשתמשי הקצה לא יראו את מסגרת התיל, ושהמרקמים והחומרים ישפיעו יותר על המראה של המודל.

איור 18. הטופולוגיה, מסגרת התיל והגרסה הסופית של סלע מתוך הדמו הטכני של Armies.

הגזמה של צורה

אפשר להגדיל צורות מסוימות כדי להקל על הפרשנות של המודלים. ההחלטה הזו תלויה מאוד בסוג ובסגנון של המשחק. המסכים של מכשירים ניידים קטנים, ולכן קשה לצלם צורות מסוימות שהן קטנות מאוד. הגדלה של הצורות האלה יכולה לעזור למשתמשים לראות את הצורה גם מרחוק.

לדוגמה, אפשר להגדיל את הידיים של הדמויות כדי שיהיה קל יותר לראות אותן.

איור 19. דוגמה למודל שבו הפרופורציות מוגזמות כדי להמחיש את המבנה.