Кастомные VFX-частицы для мобильных AR: оптимизация под Unity

Представьте: вы запускаете AR-игру с эффектом взрыва на 2000 частиц. На iPhone 13 — 45 FPS, на Adreno 618 — 22 FPS. Знакомая ситуация? Мы 5+ лет занимаемся мобильной AR-разработкой и знаем, как выжать максимум из ограниченного железа. В этой статье разберём, почему стандартные системы частиц «просед

Наши компетенции

Другие услуги студии

VR/AR/MR приложения на заказ

Впечатляйте клиентов и обучайте команду в виртуальной реальности

Разработка игр на Unity

От идеи до релиза — игры, которые запоминаются

3D-моделирование и анимация

Оживим ваш продукт в объёмной графике и анимации

VR-тренажёры промышленного оборудования

Тренируем операторов на технике без риска и простоя

AR-инструкции для производства

Пошаговые подсказки прямо на оборудовании — без бумаги

Safety-тренажёры

Отработка ЧС и техники безопасности без выхода на объект

VR/AR-тренинги

Обучаем персонал сервису, адаптации и soft skills в VR

Обучающие викторины

Проверка знаний в формате игры — легко и без стресса

Корпоративные видеоинструкции

Понятные ролики для обучения сотрудников и клиентов

Геймификация бизнес-процессов

Мотивируем команду через игровые механики в KPI и HR

Приложения для инфокиосков

Интерактивные экраны для магазинов, стендов и офисов

VR/AR-инсталляции

Wow-эффект для брендов на выставках, ивентах и в шоу-румах

Виртуальные выставки и музеи

Ваша экспозиция доступна из любой точки мира — 24/7

Event-квесты и брендированные игры

Запоминающиеся игры для конференций и клиентских ивентов

Часто задаваемые вопросы

Последние работы

  • image_games_mortal_motors_495_0.webp
    Разработка игры для компании Mortal Motors
    1505
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Пошаговая стратегия в фэнтези сеттинге With Fire And Sword
    1006
  • image_games_second_team_604_0.webp
    Разработка игры для компании Second term
    635
  • image_games_phoenix_ii_606_0.webp
    3D-анимация — тизер для игры phoenix 2.
    716
  • image_training-quizzes_kids_shopping_quiz_614_0.webp
    Обучающая викторина для детей «Покупки в магазине»
    95

Представьте: вы запускаете 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-игры?

Пошаговый план оптимизации:

  1. Анализ текущих эффектов и выявление узких мест через Profiler.
  2. Выбор стратегии blending: заменяем Alpha Blend на Additive где возможно.
  3. Оптимизация collision: переход на Planes Collision вместо World.
  4. Объединение материалов и включение GPU Instancing.
  5. Профилирование на целевых устройствах и финальная настройка.

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 даже на средних мобильных устройствах. Закажите оценку вашего проекта — мы подготовим техническое предложение.

Unity Particle System Optimization