id: 239 slug: custom-particle-systems-for-mobile-ar-games title_ru: "Создание кастомных систем частиц для мобильных 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 за фрейм. На тайловых 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. Идеален для 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 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 месяца |
Стоимость рассчитывается после обсуждения списка эффектов и целевых устройств.





