id: 239 slug: custom-particle-systems-for-mobile-ar-games title_ua: "Створення кастомних систем частиць для мобільних AR-ігор" tags: [vr-ar]
Створення кастомних систем частиць для мобільних AR-ігор
Стандартний Particle System у Unity з 500 частинками та одним Renderer — це нормально для мобільного AR. Але як тільки додаєш ефект вибуху з 2000 частинками, кількома текстурами в Sub-Emitters та Collision з AR-поверхнею — Adreno 618 упадає до 22 FPS, а iPhone 13 дихає рівно. Оптимізація систем частиць у AR — це робота з обмеженнями конкретного залізо, а не просто «зроби красиво».
Де теряється продуктивність у AR-частицях
Overdraw — головний ворог на мобільних GPU. Кожна напівпрозора частинка перекриває попередню, й GPU виконує blending для кожного перекриття. 500 частиць з Alpha Blend у режимі Overlay — це потенційно 500 × (середнє перекриття) операцій blending за кадр. На tiled 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 неефективна через вимогу сортування.
Кастомні підходи та інструменти
Visual Effect Graph (VFX Graph) — обчислення частиць на GPU. Ідеальна для ПК та консолей, але мобільна підтримка обмежена: потрібна 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 512×512 з 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 місяці |
Вартість розраховується після обговорення списку ефектів та цільових пристроїв.





