Уявіть: ви запускаєте AR-гру з ефектом вибуху на 2000 частинок. На iPhone 13 — 45 FPS, на Adreno 618 — 22 FPS. Знайома ситуація? Ми 5+ років займаємося мобільною AR-розробкою і знаємо, як вичавити максимум з обмеженого заліза. У цій статті розберемо, чому стандартні системи частинок «просаджують» і як це виправити.
Чому продуктивність падає в AR-частинках?
Overdraw — головний ворог на мобільних GPU. Кожна напівпрозора частинка перекриває попередню, і GPU виконує blending для кожного перекриття. 500 частинок з Alpha Blend в режимі Overlay — це потенційно 500 × (середнє перекриття) операцій blending за фрейм. На тайлових GPU (Adreno, Mali) overdraw >3x в зоні ефекту — помітний удар по GPU time.
Рішення — Additive blending замість Alpha Blend там, де це можливо. Additive не читає destination buffer — тільки пише додавання, що швидше. Для вогню, світіння, магічних ефектів — ідеально. Для диму та реалістичних хмар — Additive виглядає неприродно, там потрібен Alpha Blend з обмеженою кількістю частинок.
Collision з AR-поверхнею — дорога операція. Particle System → Collision → Type: World з Collision Quality: High змушує кожну частинку проходити фізичний raycast кожен фрейм. 1000 частинок з World Collision = 1000 raycasts/фрейм. На мобілі це катастрофа.
Для AR-сцен краще працює Collision Type: Planes — задаємо кілька площин вручну, що відповідають AR-поверхням. Площини оновлюємо від ARPlane компонентів з AR Foundation при виявленні нових поверхонь. Не всі фізичні деталі, але продуктивність в 10 разів краща.
Draw Calls від багатьох Renderer-ів. Кілька Particle System з різними матеріалами — це кілька Draw Calls, які не батчаться. GPU Instancing для Particle System вмикається через Material.enableInstancing = true, але працює тільки коли частинки не прозорі або Additive — для Alpha Blend GPU Instancing неефективний через вимогу сортування.
Як ми оптимізуємо системи частинок під мобільні AR-ігри?
Покроковий план оптимізації:
- Аналіз поточних ефектів і виявлення вузьких місць через Profiler.
- Вибір стратегії blending: замінюємо Alpha Blend на Additive де можливо.
- Оптимізація collision: перехід на Planes Collision замість World.
- Об'єднання матеріалів і включення GPU Instancing.
- Профілювання на цільових пристроях і фінальне налаштування.
Visual Effect Graph (VFX Graph) — обчислення частинок на GPU. Ідеальний для PC і консолей, але на мобілі підтримка обмежена: вимагає Compute Shader, який доступний тільки на Metal (iOS A12+) і Vulkan (Android API 28+). Старі пристрої не потягнуть. Якщо таргет — mid-range Android, VFX Graph не підходить.
Burst Compiler + Job System для CPU частинок. Якщо частинки керуються скриптом (не стандартною Particle System), можна перенести логіку на IJobParallelFor з Burst. Це дає 5–15x прискорення обчислень порівняно з Mono, звільняючи головний потік.
LOD для систем частинок через ParticleSystemRenderer.maxParticleSize і динамічне зниження emission.rateOverTime залежно від відстані до AR-об'єкта. На дистанції >3 метрів від AR-маркера знижуємо кількість частинок вдвічі — непомітно візуально, але знижує overdraw.
Texture Sheet Animation замість кількох текстур. Один Sprite Sheet 512x512 з 16 кадрами анімації замість 16 окремих текстур — один Material, одна texture sample, працює в рамках одного Draw Call.
Наш досвід: AR-гра для iOS з ефектами магії на AR Foundation. Спочатку три Particle System на один ефект з Alpha Blend, World Collision, Sub-Emitters — iPhone 12 тримав 45–50 FPS замість цільових 60. Після переходу на Additive + Planes Collision + об'єднання в один Renderer з Texture Sheet — 60 FPS stable. Візуальна якість знизилася незначно, що пройшло непоміченим у плейтестах. Правильна оптимізація економить час і бюджет проекту.
Інтеграція з AR Foundation
Частинки повинні коректно взаємодіяти з AR-оточенням:
- Позиціювання ефектів на ARPlane через Pose з ARRaycastHit
- Occlusion: частинки повинні ховатися за реальними об'єктами. Реалізується через ARKit/ARCore Occlusion (AROcclusionManager) — при включеному Human/Environment Occlusion частинки автоматично маскуються глибиною реального світу
- Освітлення: AREnvironmentProbeManager генерує Light Probe з оточення в реальному часі — частинки з Lighting Mode: Scene Color підхоплюють реальне освітлення, що покращує вписаність ефекту в AR-сцену
Що входить в роботу
| Етап | Результат |
|---|---|
| Аналіз вимог | Список ефектів, цільові пристрої, вимоги до visual fidelity |
| Технічне проєктування | Вибір Particle System vs VFX Graph, стратегія по overdraw, collision approach |
| Розробка ефектів | Створення з оптимізацією «з нуля», не переробка під обмеження post-factum |
| Профілювання | Unity Profiler + Xcode Instruments / Android GPU Inspector на цільових пристроях |
| Інтеграція з AR Foundation | Прив'язка до AR-поверхонь, occlusion, освітлення |
| Документація та навчання | Вихідники, інструкція з налаштування, консультація команди |
Вартість розробки розраховується індивідуально після обговорення списку ефектів і цільових пристроїв. Гарантуємо підтримку протягом місяця після здачі проєкту.
| Кількість ефектів | Орієнтовні терміни |
|---|---|
| 3–5 базових ефектів | 1–2 тижні |
| 10–15 ефектів з AR-інтеграцією | 3–5 тижнів |
| Складні системи з GPU Instancing і VFX Graph | 1–2 місяці |
Зв'яжіться з нами для отримання консультації з оптимізації частинок під ваше обладнання. Ми допоможемо досягти стабільних 60 FPS навіть на середніх мобільних пристроях. Замовте оцінку вашого проєкту — ми підготуємо технічну пропозицію.






