Оптимизация производительности AR-приложения под ключ

AR-приложение на ARKit греет iPhone 12 до 45°C за 8 минут сессии и разряжает батарею на 1% в минуту. Frame rate — 45–50 FPS вместо 60. Это не «немного тормозит» — это приложение, которым нельзя пользоваться. За 5 лет мы оптимизировали более 50 AR-проектов — от мебельных каталогов до промышленных виз

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Оптимизация производительности AR-приложения под ключ
Сложный
~3-5 дней

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

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

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

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    597

AR-приложение на ARKit греет iPhone 12 до 45°C за 8 минут сессии и разряжает батарею на 1% в минуту. Frame rate — 45–50 FPS вместо 60. Это не «немного тормозит» — это приложение, которым нельзя пользоваться. За 5 лет мы оптимизировали более 50 AR-проектов — от мебельных каталогов до промышленных визуализаций — и знаем, как выжать максимум из железа.

Оптимизация AR — особая дисциплина: нельзя пожертвовать качеством трекинга ради FPS, нельзя убрать освещение и потерять реализм, нужно работать одновременно с CPU (ARKit/ARCore обработка), GPU (рендеринг) и Neural Engine (если есть ML-модели). Мы гарантируем результат: стабильные 60 FPS и экономию батареи до 30%.

Почему AR-приложение греется и теряет FPS?

ARKit/ARCore работают непрерывно: захват кадра с камеры → feature detection → плоскостная оценка → обновление мировой модели → рендеринг. Каждый этап — вычислительная нагрузка. На iPhone ARKit использует Neural Engine для плоскостного трекинга, что сильно разгружает CPU/GPU. На Android ARCore — тяжелее для GPU на устройствах без NPU.

Типичные узкие места:

  • Загрузка тяжёлых 3D-моделей в ARSCNView без оптимизации: SCNNode с 500K полигонов без LOD, текстуры 4096×4096 без mipmapping. GPU рендерит одинаково детально объект на переднем плане и в 10 метрах от камеры.
  • Включённые фичи трекинга, которые не используются. ARWorldTrackingConfiguration с isAutoFocusEnabled = true и environmentTexturing = .automatic без реальной необходимости — постоянная нагрузка на систему.
  • Физика в SCNScene с SCNPhysicsBody на каждом объекте при десятках AR-объектов — физический движок SceneKit не оптимизирован для мобильных AR-сцен с большим количеством тел.

Как мы оптимизируем ARKit: конфигурация сессии и рендеринг

Конфигурация сессии

let configuration = ARWorldTrackingConfiguration() // Включаем только то что реально нужно configuration.planeDetection = [.horizontal] // не .vertical если не нужно configuration.isAutoFocusEnabled = false // фиксированный фокус — меньше нагрузки configuration.environmentTexturing = .none // отключаем если нет PBR-материалов // Для простых сцен — lighter tracking let simpleConfig = AROrientationTrackingConfiguration() // только ориентация, без world tracking 

Для приложений где нужен только face tracking — ARFaceTrackingConfiguration вместо ARWorldTrackingConfiguration. Разница в нагрузке на CPU — ощутима.

Рендеринг через Metal вместо SceneKit

ARSCNView удобен, но для сложных сцен MTKView + кастомный Metal-рендерер даёт полный контроль над draw calls. SceneKit добавляет overhead на управление нодами и физику. С ARSession + MTKView:

func session(_ session: ARSession, didUpdate frame: ARFrame) { let commandBuffer = commandQueue.makeCommandBuffer()! // Рендерим captured image (камера) renderCapturedImage(frame.capturedImage, commandBuffer: commandBuffer) // Рендерим AR-контент renderVirtualContent(frame, commandBuffer: commandBuffer) commandBuffer.present(drawable) commandBuffer.commit() } 

Это даёт 20–30% прирост FPS на сценах с 10+ AR-объектами по сравнению с ARSCNView.

Culling и LOD

SCNNode.isHidden = true для объектов вне поля зрения — SceneKit не рендерит скрытые ноды, но выполняет physics и update. Правильно — убирать объекты из сцены: node.removeFromParentNode().

// Frustum culling вручную func shouldRenderNode(_ node: SCNNode, camera: ARCamera) -> Bool { let screenPoint = camera.projectPoint(node.worldPosition, orientation: .portrait, viewportSize: viewportSize) return screenPoint.x > -0.1 && screenPoint.x < 1.1 && screenPoint.y > -0.1 && screenPoint.y < 1.1 } 

Что делать с ARCore: сессия и рендеринг

Session config

val config = Config(session) config.planeFindingMode = Config.PlaneFindingMode.HORIZONTAL_ONLY config.lightEstimationMode = Config.LightEstimationMode.DISABLED // +15% battery config.depthMode = Config.DepthMode.DISABLED // если глубина не нужна session.configure(config) 

LightEstimationMode.ENVIRONMENTAL_HDR — самый дорогой режим, даёт реалистичные отражения. На устройствах без Depth API (большинство mid-range) использовать только если это ключевая фича.

Rendering через Filament

ARCore-приложения с Filament (Google's PBR renderer) рендерят PBR-материалы через Vulkan на поддерживаемых устройствах — заметно быстрее чем через OpenGL ES. Готовый пример — arcore-android-sdk samples с Filament-интеграцией.

Как добиться стабильных 60 FPS в AR?

Ключевые шаги:

  • Отключить неиспользуемые функции трекинга (environmentTexturing, autoFocus, depth mode).
  • Перейти на низкоуровневый рендеринг (Metal или Vulkan).
  • Применить LOD и culling к 3D-моделям.
  • Сжать текстуры (ASTC, ETC2).
Параметр конфигурации Влияние на производительность Рекомендация
planeDetection Среднее: поиск плоскостей нагружает CPU Включать только нужные типы (horizontal/vertical)
environmentTexturing Высокое: динамическое освещение через HDR Отключать, если не используется PBR
depthMode Высокое: обработка глубины (ARCore) Отключать, если не нужна окклюзия
lightEstimationMode Среднее-высокое: ENVIRONMENTAL_HDR самый дорогой Использовать DISABLED или AMBIENT_INTENSITY
isAutoFocusEnabled Низкое: автофокус камеры Отключать для фиксированного фокуса

Сравнение подходов ARKit vs ARCore

Параметр ARKit (iOS) ARCore (Android)
Работа с трекингом Использует Neural Engine для плоскостного трекинга — меньше нагрузка на CPU Зависит от наличия Depth API; без него нагрузка на GPU выше
Основной рендеринг Metal — низкоуровневый контроль, SceneKit — быстрое прототипирование Vulkan (через Filament) или OpenGL ES
Рекомендуемый FPS 60 FPS легко достижимы на iPhone 11+ после оптимизации 30–60 FPS в зависимости от устройства
Типичные проблемы Нагрев из-за высокой частоты кадров + трекинг Фрагментация устройств, разная поддержка Depth API

Кейс: AR мебельный каталог

Из нашей практики: клиент — приложение для просмотра мебели в AR. Диваны и столы — 3D-модели от дизайнеров, по 800K–1.2M полигонов каждый. На iPhone 13 — 24 FPS при размещении 2 объектов. Проблема очевидна.

Работа: экспорт моделей через Blender с decimation до 50K полигонов для AR-версии (потеря детализации незаметна с расстояния 1–2 метра на телефоне). Конвертация текстур из PNG 4096×4096 в ASTC 2048×2048. Добавление LOD: высокая детализация для объектов ближе 1.5 метра, средняя — дальше. Результат: 58–60 FPS стабильно, температура нормализовалась. Клиент сэкономил около $5 000 на доработках, избежав полного переписывания приложения.

Как проходит оптимизация: пошаговый процесс

  1. Аудит производительности — профилирование на реальных устройствах (iPhone 12, Pixel 6 и т.д.), замер FPS, температуры, расхода батареи. Фиксация baseline.
  2. Анализ и планирование — выявление узких мест, составление плана доработок с приоритетами.
  3. Доработка — оптимизация конфигурации сессии, рендеринга, 3D-моделей.
  4. Тестирование — повторное профилирование, сравнение с baseline, корректировка.
  5. Деплой и поддержка — внедрение изменений, консультации.

Что входит в работу по оптимизации AR-приложения

  • Аудит производительности на целевых устройствах.
  • Оптимизация конфигурации сессии (отключение ненужных фич, настройка параметров).
  • Оптимизация рендеринга (переход на Metal/Filament, LOD, culling, сжатие текстур).
  • Документация с отчётом и рекомендациями.
  • Поддержка после внедрения.

Сроки и как начать

  • Аудит производительности — 2–3 дня.
  • Оптимизация рендеринга и конфигурации сессии — 1–2 недели.
  • Если нужна оптимизация 3D-моделей — дополнительно, зависит от количества ассетов.

Стоимость оптимизации рассчитывается индивидуально, экономия бюджета может достигать 30%. Получите консультацию по оптимизации вашего AR-приложения — свяжитесь с нами для бесплатной оценки проекта. Закажите аудит производительности AR-приложения уже сегодня.

Типичные ошибки при оптимизации AR
  • Пытаться оптимизировать рендеринг, не замерив baseline.
  • Использовать максимальную конфигурацию трекинга для простых сцен.
  • Забывать про LOD и mipmapping для 3D-моделей.
  • Не проверять производительность на разных поколениях устройств.

Согласно документации Apple: ARKit Best Practices