תארו לעצמכם שאתם משיקים משחק AR עם אפקט פיצוץ של 2000 חלקיקים. באייפון 13 אתם מקבלים 45 FPS; על Adreno 618 רק 22 FPS. נשמע מוכר? עם ניסיון של 5+ שנים בפיתוח AR למובייל (שלחנו למעלה מ-50 פרויקטי AR ללקוחות כמו אולפני גיימינג וארגונים), אנחנו יודעים איך לחלץ ביצועים מקסימליים מחומרה מוגבלת. במאמר זה, נפרק למה מערכות חלקיקים סטנדרטיות נחנקות ואיך לתקן את זה.
למה הביצועים יורדים בחלקיקי AR
Overdraw הוא האויב העיקרי במעבדי GPU ניידים. כל חלקיק חצי-שקוף חופף לקודמו, ומאלץ את ה-GPU לבצע blending עבור כל חפיפה. 500 חלקיקים עם Alpha Blend במצב Overlay פירושו פוטנציאלית 500 × (ממוצע חפיפות) פעולות blending לכל פריים. במעבדי GPU מבוססי-אריחים (Adreno, Mali), overdraw >3x באזור האפקט הוא פגיעה ניכרת בזמן ה-GPU.
הפתרון שלנו: שימוש ב-Additive blending במקום Alpha Blend בכל מקום אפשרי. Additive לא קורא את ה-buffer של היעד—הוא רק כותב חיבור, מהיר פי 2. לאש, זוהר ואפקטים קסומים זה אידיאלי. לעשן ועננים ריאליסטיים, Additive נראה לא טבעי, אז אנחנו נשארים עם Alpha Blend אבל מגבילים את מספר החלקיקים.
התנגשות עם משטחי AR היא יקרה. Particle System → Collision → Type: World עם Collision Quality: High מאלץ כל חלקיק לבצע raycast פיזי בכל פריים. 1000 חלקיקים עם World Collision = 1000 raycasts לפריים. במובייל, זה קטסטרופלי.
הגישה שלנו: שימוש ב-Collision Type: Planes. אנחנו מגדירים ידנית כמה מישורים התואמים למשטחי AR, ומעדכנים אותם מרכיבי ARPlane ב-AR Foundation כשמתגלים משטחים חדשים. לא כל הפרטים הפיזיים נתפסים, אבל הביצועים משתפרים פי 10.
Draw Calls ממספר renderers: כמה מערכות Particle Systems עם חומרים שונים יוצרות מספר Draw Calls שלא ניתן לאחד. GPU Instancing עבור Particle System מופעל דרך Material.enableInstancing = true, אבל עובד רק עבור חלקיקים אטומים או Additive—עבור Alpha Blend זה לא יעיל בגלל דרישות מיון.
איך אנחנו מייעלים מערכות חלקיקים למשחקי AR ניידים
תוכנית האופטימיזציה שלנו שלב אחר שלב:
- פרופילינג של האפקטים הקיימים כדי לזהות צווארי בקבוק באמצעות Unity Profiler.
- בחירת אסטרטגיית blending: החלפת Alpha Blend ב-Additive היכן שאפשר.
- אופטימיזציה של התנגשות: מעבר מ-World ל-Planes Collision.
- מיזוג חומרים והפעלת GPU Instancing.
- פרופילינג במכשירי יעד וסיום כוונון.
Visual Effect Graph (VFX Graph) מחשב חלקיקים על ה-GPU. אידיאלי למחשבים אישיים וקונסולות, אבל במובייל התמיכה מוגבלת: דורש Compute Shaders, זמין רק ב-Metal (iOS A12+) ו-Vulkan (Android API 28+). מכשירים ישנים יותר לא יתמודדו עם זה. אם היעד שלכם כולל אנדרואיד בינוני, VFX Graph לא מתאים.
Burst Compiler + Job System לחלקיקי CPU: אם חלקיקים נשלטים על ידי סקריפט (לא Particle System סטנדרטי), אנחנו מעבירים את הלוגיקה ל-IJobParallelFor עם Burst. זה נותן האצה של פי 5–15 לעומת Mono, ומשחרר את ה-thread הראשי.
LOD עבור מערכות חלקיקים דרך ParticleSystemRenderer.maxParticleSize והפחתה דינמית של emission.rateOverTime בהתבסס על מרחק לאובייקט ה-AR. במרחקים >3 מטרים מסמן ה-AR, אנחנו חותכים את מספר החלקיקים בחצי—בלתי מורגש ויזואלית אבל מפחית overdraw ב-30%.
Texture Sheet Animation במקום מספר טקסטורות. Sprite Sheet אחד בגודל 512x512 עם 16 פריימים של אנימציה מחליף 16 טקסטורות נפרדות—חומר אחד, דגימת טקסטורה אחת, בתוך Draw Call אחד.
מקרה אמיתי: משחק AR ל-iOS עם אפקטים קסומים על AR Foundation. בהתחלה שלוש מערכות Particle Systems לכל אפקט עם Alpha Blend, World Collision ו-Sub-Emitters—אייפון 12 רץ ב-45–50 FPS מול יעד של 60 FPS. אחרי מעבר ל-Additive + Planes Collision + מיזוג ל-Renderer אחד עם Texture Sheet—60 FPS יציב. הירידה באיכות הוויזואלית הייתה מינימלית, ולא הבחינו בה בבדיקות משחק. אופטימיזציה נכונה חוסכת זמן ותקציב בפרויקט.
אינטגרציה עם AR Foundation
חלקיקים חייבים ליצור אינטראקציה נכונה עם סביבת ה-AR:
- מיקום אפקטים על ARPlane באמצעות Pose מ-ARRaycastHit.
- Occlusion: חלקיקים צריכים להסתתר מאחורי אובייקטים אמיתיים. מיושם דרך ARKit/ARCore Occlusion (AROcclusionManager)—עם Human/Environment Occlusion מופעל, חלקיקים מוסווים אוטומטית על ידי עומק העולם האמיתי.
- תאורה: AREnvironmentProbeManager מייצר Light Probe בזמן אמת מהסביבה—חלקיקים עם Lighting Mode: Scene Color קולטים תאורה אמיתית, ומשפרים את תחושת ההתעמקות של האפקט בסצנת ה-AR.
מה כלול
| שלב | תוצר |
|---|---|
| ניתוח דרישות | רשימת אפקטים, מכשירי יעד, דרישות נאמנות ויזואלית |
| עיצוב טכני | בחירה בין Particle System ל-VFX Graph, אסטרטגיית overdraw, גישת התנגשות |
| פיתוח אפקטים | יצירה עם אופטימיזציה מההתחלה, לא שיפוץ רטרואקטיבי |
| פרופילינג | Unity Profiler + Xcode Instruments / Android GPU Inspector במכשירי יעד |
| אינטגרציית AR Foundation | עיגון למשטחי AR, occlusion, תאורה |
| תיעוד והדרכה | קבצי מקור, מדריך התקנה, ייעוץ לצוות |
העלות מחושבת באופן אישי לאחר דיון ברשימת האפקטים ומכשירי היעד. טווח טיפוסי: $500–$2000 לאפקט. אנחנו מבטיחים תמיכה לחודש אחד לאחר המסירה.
| מספר אפקטים | לוח זמנים משוער |
|---|---|
| 3–5 אפקטים בסיסיים | 1–2 שבועות |
| 10–15 אפקטים עם אינטגרציית AR | 3–5 שבועות |
| מערכות מורכבות עם GPU Instancing ו-VFX Graph | 1–2 חודשים |
צרו קשר לייעוץ על אופטימיזציית חלקיקים לחומרה שלכם. אנחנו נעזור להשיג 60 FPS יציב אפילו במכשירים ניידים בינוניים. בקשו הערכת פרויקט—נכין הצעה טכנית.





