ניתוח ביצועי משחק: איתור צווארי בקבוק של CPU ו-GPU

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

היכולות שלנו

שירותי סטודיו אחרים

יישומי VR/AR/MR מותאמים אישית

טבלו לקוחות וצוותים בחוויות דיגיטליות חדשות

פיתוח משחקי Unity

מקונספט לשחרור — משחקים שאנשים זוכרים

מידול ואנימציה בתלת-ממד

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

סימולטורי ציוד VR תעשייתיים

אמנו מפעילים על ציוד בבטחה, ללא השבתה

הוראות AR לייצור

הנחיות שלב-אחר-שלב ישירות על הציוד — ללא נייר

סימולטורי VR לבטיחות

תרגול תגובה לשעת חירום ללא צורך בהגעה לשטח

תוכניות הכשרה ב-VR/AR

הכשרת עובדים בשירות, קליטה ומיומנויות רכות ב-VR

חידוני הכשרה לעובדים

בדיקת ידע באמצעות משחקים — בקלות וללא לחץ

הוראות וידאו ארגוניות

סרטונים ברורים להכשרת העובדים והלקוחות שלכם

גיימיפיקציה עסקית

הניעו צוותים עם מכניקת משחק ב-KPI ובמשאבי אנוש

יישומי קיוסק אינטראקטיביים

מסכים אינטראקטיביים לקמעונאות, תערוכות ומשרדים

מתקני VR/AR

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

תערוכות ומוזיאונים וירטואליים

התערוכות שלכם מגיעות לכל פינה בעולם, 24/7

מסעות אירועים ומשחקי מותג

משחקים בלתי נשכחים לכנסים ולאירועי לקוחות

שאלות נפוצות

העבודות האחרונות

  • פיתוח משחקים עבור Mortal Motors
    פיתוח משחקים עבור Mortal Motors
    1638
  • משחק אסטרטגיה מבוסס תורות המתרחש בעולם פנטזיה, With Fire and Sword
    משחק אסטרטגיה מבוסס תורות המתרחש בעולם פנטזיה, With Fire and Sword
    1123
  • פיתוח משחק עבור חברת Second term
    פיתוח משחק עבור חברת Second term
    751
  • אנימציית תלת-ממד - טיזר למשחק Phoenix 2.
    אנימציית תלת-ממד - טיזר למשחק Phoenix 2.
    830

פרופילינג CPU ו-GPU למשחקים: איתור ותיקון גמגומים

פרופילינג יעיל של ביצועי משחק דורש זיהוי מוקדם של צווארי בקבוק של CPU ושל GPU כדי לחסל גמגומים ולשפר FPS. שימו לב: כשמשחק מגמגם, האינסטינקט הראשון הוא לפתוח Stats ב-Game View ולהסתכל על FPS. זה חסר תועלת. Stats מציג ערך ממוצע, לא רואה קפיצות, לא מפריד בין CPU ל-GPU, ולא מראה איזה קוד בדיוק אוכל זמן. אבחון אמיתי דורש Profiler במצב Standalone על החומרה הממוקדת. הצוות שלנו עם ניסיון של 10+ שנים ולמעלה מ-50 פרויקטים מוצלחים פותר משימות כאלה מדי יום. ב-90% מהפרויקטים, צוואר הבקבוק העיקרי הוא או overdraw או draw calls. שירותי הפרופילינג שלנו מתחילים ב-$1,500 לדוח בסיסי, וחבילות אופטימיזציה מקיפות נעות בין $5,000 ל-$20,000. לקוחות בדרך כלל רואים שיפור של 30-50% בזמני פריים לאחר אופטימיזציה. עבור משחק ארקייד למובייל, חסכנו ללקוח $10,000 בכך שזיהינו שמורכבות שיידר מיותרת גרמה ל-70% מעומס ה-GPU.

ההבדל בין "ממוצע של 42 fps" לבין "42 fps עם נפילות ל-18 בכל פריים שלישי" הוא ההבדל בין משחק נוח לבין תחושה שהמשחק שבור. וזה נראה רק דרך גרף זמן פריים, לא מונה FPS. אנחנו מבטיחים תוצאות יציבות בפלטפורמות הממוקדות.

איך להבחין בין צוואר בקבוק של CPU לבין צוואר בקבוק של GPU?

השאלה הראשונה בכל אופטימיזציה: איפה צוואר הבקבוק. אם ה-CPU נתקע → ה-GPU ממתין. אם ה-GPU נתקע → ה-CPU ממתין. ערבוב שיטות אופטימיזציה בלי להבין את זה הוא בזבוז זמן.

אבחון ב-Unity Profiler: פתחו את מודול CPU Usage, חפשו Gfx.WaitForPresent או Graphics.PresentAndSync. אם הסמנים האלה לוקחים 8+ אלפיות השנייה מתוך תקציב הפריים של 16.6 אלפיות השנייה, אתם GPU-bound. ה-CPU כבר שלח הכל ל-GPU וממתין.

אם PlayerLoop, Physics.Processing או הסקריפטים שלכם לוקחים את רוב זמן הפריים, ו-Gfx.WaitForPresent מינימלי — אתם CPU-bound.

אלה נתיבי אופטימיזציה שונים מהותית. GPU-bound: הפחיתו מורכבות שיידר, overdraw, fill rate ו-bandwidth. CPU-bound: בצעו אופטימיזציה לסקריפטים, השתמשו ב-Job System, הפחיתו קריאות Update(). Draw calls מאוגדים יכולים להפחית את עומס ה-CPU בעד 80% בהשוואה ללא איגוד — שיפור של פי 5 ביעילות draw calls.

פרופילינג CPU מעמיק

Deep Profile ב-Unity הוא כלי חזק אבל עם תקורה: הוא מתעד כל קריאת מתודה ומאט את המשחק עצמו. השתמשו בו רק לאבחון ממוקד של תת-מערכת ספציפית, לא כמצב קבוע.

בפרופיל CPU, אנו בוחנים את הדברים הבאים:

  • הקצאות Managed heap ב-Update(). סמן צבעוני ב-Profiler — GC.Alloc. כל הקצאה בנתיב חם (Update, FixedUpdate, OnCollisionEnter) עלולה לגרום ל-GC.Collect בעתיד. GC.Collect במכשירים ניידים — קפיצה של 2–20 אלפיות השנייה. מתוקן על ידי שמירת הפניות במטמון, object pools, string interning, החלפת LINQ בלולאות ידניות.
  • Physics.Processing לוקח > 4 אלפיות השנייה. Colliders מורכבים מדי (Mesh Collider במקום Capsule), Fixed Timestep קטן מדי, יותר מדי Rigidbody עם ContinuousCollisionDetection. הצעד הראשון — Physics Debugger: הדמיית מצב השינה של כל Rigidbody, מצאו כאלה שלא ישנים ללא סיבה.
  • NavMesh.CalculatePath בכל פריים עבור 40 סוכנים. NavMeshAgent מתעדכן כברירת מחדל בכל FixedUpdate. עבור מספר גדול של סוכנים — חלקו לקבוצות עם עדכון כל N פריימים בהתאם למרחק מהשחקן.

באיזה כלי כדאי להשתמש: RenderDoc או Unity Frame Debugger?

RenderDoc הוא חובה לכל פרופילינג GPU רציני. מתחבר ל-Android/PC, לוכד פריים בודד, מציג כל draw call עם זמן GPU, טקסטורות קלט/פלט, מצב pipeline. כאן אתם רואים איזה שיידר אוכל 60% מזמן ה-GPU. RenderDoc נותן פי 10 יותר פרטים מאשר ה-Frame Debugger המובנה — עלייה של 900% בגרנולריות האבחון.

Unity Frame Debugger — קל יותר לשימוש אבל פחות מפורט. מציג סדר רינדור, למה אובייקטים לא מאוגדים, מצבי render target. מספיק לאבחון ראשוני.

במכשירים ניידים — ARM Streamline (Mali) או Snapdragon Profiler (Adreno). הם מציגים מדדים שאינם זמינים ב-Unity: bandwidth זיכרון, ניצול ALU, שיעור החטאות של מטמון טקסטורות, ותפוקת משולשים. החטאות מטמון טקסטורות (הרבה טקסטורות קטנות במקום אטלס) או bandwidth גבוה (טקסטורות ללא mipmaps) הם לעתים קרובות הגורם האמיתי להאטות במקומות שבהם Draw Calls נראו תקינים. שימוש באטלס טקסטורות יכול להפחית את שיעור ההחטאות פי 3 בהשוואה לטקסטורות בודדות.

מקרה אמיתי: משחק ריצה ארקייד למובייל, 45 fps על Snapdragon 730. פרופיל CPU נקי, סקריפטים < 3 אלפיות השנייה. GPU — fill rate גבוה באופן חשוד לפי Snapdragon Profiler. RenderDoc הראה: שיידר עיוות מותאם אישית על מים שדגם GrabPass (Screen Space Texture) בכל פריים, בנוסף למיקום ב-Transparent queue מעל שלוש שכבות אחרות עם blending. החלפת GrabPass בטקסטורת cubemap אפויה מראש לרקע + הורדת רשת המים ב-Z-order הסירה 11 אלפיות השנייה מזמן ה-GPU. תוצאה: 58–60 fps יציבים.

מידע נוסף על הגדרת RenderDoc ל-Android 1. הורידו את RenderDoc מהאתר הרשמי. 2. הפעילו Developer options במכשיר. 3. ב-Unity, בחרו Build Settings -> Development Build וחברו את המכשיר. 4. הפעילו את האפליקציה, ואז ב-RenderDoc בחרו את התהליך ובצעו לכידה.

תהליך פרופילינג

ראשית, הגדירו מדדי מטרה: תקציב fps (30/60/120), זמן פריים מקובל (16.6/8.3 אלפיות השנייה), פלטפורמה. בלי מדדי מטרה, לא ברור מה נחשב "טוב מספיק."

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

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

השוואת כלי פרופילינג GPU

כלי פלטפורמה רמת פירוט מורכבות
RenderDoc PC, Android, Nintendo Switch מקסימלית (כל draw call) בינונית
Unity Frame Debugger כל פלטפורמות Unity בינונית (סדר רינדור) נמוכה
ARM Streamline Mali GPU מקצועית (bandwidth, מטמון, ALU) גבוהה
Snapdragon Profiler Adreno GPU מקצועית (fill rate, ALU, bandwidth) גבוהה

מה כלול בעבודת פרופילינג

לאחר הביקורת, אתם מקבלים:

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

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

הערכות זמנים

היקף המשימה זמן משוער
פרופילינג CPU/GPU + דוח (1–2 סצנות) 2–4 ימים
ביקורת מעמיקה + תיקון 3 צווארי הבקבוק המובילים 1–2 שבועות
אופטימיזציה מקיפה לפלטפורמה ספציפית 3–8 שבועות

העלות נקבעת לאחר לימוד הפרויקט והפלטפורמות הממוקדות. חבילות האופטימיזציה שלנו מתחילות ב-$2,500 לביקורת מלאה של 3 סצנות.

החשיבות הקריטית של פרופילינג לביצועים

בלי פרופילינג, אתם מבזבזים זמן על ניחושים. במקום לבצע אופטימיזציה לצווארי בקבוק אמיתיים, אתם עשויים לשפר משהו שלא צריך את זה. סטטיסטיקות מראות: עד 70% מבעיות ביצועי המשחק קשורות להערכה שגויה של צוואר הבקבוק. בניסיון של 10+ שנים, ראינו שכל משחק שני בשלב הליטוש הסופי יש לו גמגומים נסתרים שנחשפים רק על ידי פרופילינג על חומרת המטרה. הניסיון שלנו מבטיח FPS יציב ללא עלויות מיותרות. יתר על כן, אופטימיזציה מונחית פרופילר מפחיתה את זמן הפיתוח בעד 40% בהשוואה לגישות של ניסוי וטעייה, ומניבה החזר השקעה פי 3.

Unity Profiler Documentation — תיעוד רשמי עבור Profiler.