Интеграция ARKit в iOS: трекинг, окклюзия, Face Tracking

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

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

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

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Интеграция ARKit в iOS: трекинг, окклюзия, Face Tracking
Сложный
~3-5 дней
Часто задаваемые вопросы

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

Этапы разработки

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

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    858
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    744
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1160
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1034
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    968
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    562

Интеграция ARKit: от трекинга до Face Tracking

В нашей практике мы сталкиваемся с тем, что ARKit — не просто наложение 3D-объектов на камеру. Это связка из LiDAR-сканера, Visual Inertial Odometry и нейросетевых моделей для понимания сцены, которая при неправильном использовании даёт нестабильный tracking, артефакты окклюзии и крэш при ARSession в background. Ниже разберём ключевые проблемы и способы их решения, опираясь на опыт ARKit-разработки в реальных проектах.

Почему трекинг срывается в тёмных сценах?

Трекинг падает при плохом освещении. ARWorldTrackingConfiguration строит карту по точкам интереса (feature points) — в тёмных помещениях или на однотонных поверхностях tracking деградирует до ARCamera.TrackingState.limited(.insufficientFeatures). Игнорировать этот state нельзя: если не показывать пользователю, что нужно осветить сцену, anchors начинают дрейфовать, и 3D-объект улетает в сторону. Правильно — подписываться на session(_:cameraDidChangeTrackingState:) и показывать соответствующую инструкцию.

Как ускорить обнаружение плоскостей?

Плоскости обнаруживаются с задержкой. ARPlaneDetection.horizontal находит пол за 2–4 секунды при хорошем освещении. Если пользователь пытается разместить объект раньше — промах. Частое решение: делать plane detection опциональным и добавлять raycast против ARMeshAnchor с LiDAR — на iPhone 12 Pro+ это даёт точность попадания ~1 см без ожидания. Сравнение: raycast обеспечивает на 40% более стабильные результаты, чем устаревший hitTest.

Что делать с окклюзией без LiDAR?

Окклюзия работает только с LiDAR. ARView.environment.sceneUnderstanding.options с .occlusion — исключительно на устройствах с LiDAR (Pro-серия с iPhone 12). На iPhone без LiDAR объект всегда поверх реального мира. Нужно чекать ARWorldTrackingConfiguration.supportsSceneReconstruction(.mesh) при старте и деградировать gracefully: отключать окклюзию и использовать полупрозрачные тени.

Как настроить Image Tracking?

ARImageTrackingConfiguration с maximumNumberOfTrackedImages = 4 — для маркерного AR. Референсные изображения загружаем из ARReferenceImage с физическим размером. physicalWidth критичен — ARKit использует его для вычисления дистанции и масштаба. Неверный размер = объект висит не там где надо.

let referenceImage = ARReferenceImage(
    cgImage,
    orientation: .up,
    physicalWidth: 0.15 // 15 см в реальном мире
)
config.trackingImages = [referenceImage]

Как использовать Face Tracking?

ARFaceTrackingConfiguration работает только на устройствах с TrueDepth-камерой (Face ID). Доступно 52 blend shape коэффициента через ARFaceAnchor.blendShapes — от .jawOpen до .eyeBlinkLeft. На этом строим виртуальные примерки, AR-аватары и Liveness Detection.

func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
    guard let faceAnchor = anchors.first as? ARFaceAnchor else { return }
    let jawOpen = faceAnchor.blendShapes[.jawOpen]?.floatValue ?? 0
    // Управляем анимацией персонажа
}

Как повысить производительность AR-приложения?

ARKit + RealityKit нагружают GPU и CPU одновременно. Инструменты диагностики: Xcode Reality Composer Pro для превью сцены, GPU Frame Capture для анализа draw calls, Metal System Trace в Instruments для диагностики GPU bubbles.

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

  • USDZ с > 100K полигонов на середнячке — просадка до 30 FPS.
  • Несколько ModelEntity без инстансинга копируют геометрию в памяти.
  • arView.renderOptions — отключение .disableDepthOfField и .disableMotionBlur даёт +15% FPS на старых устройствах.

Сравнение конфигураций трекинга

Тип трекинга Конфигурация Требования к устройству Точность
World Tracking ARWorldTrackingConfiguration A9+ (iPhone 6s+) Высокая (с LiDAR ~1 см)
Image Tracking ARImageTrackingConfiguration A9+ Зависит от маркера
Face Tracking ARFaceTrackingConfiguration TrueDepth (Face ID) 52 blend shapes
Body Tracking ARBodyTrackingConfiguration A12+ (iPhone XS+) Скелет 19 joints

Оптимизации производительности

Оптимизация Прирост FPS Условия
Отключить Depth of Field +15% iPhone XR и старше
Отключить Motion Blur +10% Все устройства
Использовать instancing -50% памяти Много одинаковых объектов

Пошаговая инструкция по размещению объекта

  1. Запустить сессию ARWorldTrackingConfiguration с включённым planeDetection и environmentTexturing.
  2. Дождаться события session(_:didAdd:) или выполнить raycast из центра экрана.
  3. Создать ARAnchor с результатом raycast.
  4. Загрузить USDZ-модель через ModelEntity.loadModel.
  5. Создать AnchorEntity с привязкой к anchor.
  6. Добавить AnchorEntity в сцену.

Пример кода размещения по raycast

let query = arView.makeRaycastQuery(
    from: arView.center,
    allowing: .estimatedPlane,
    alignment: .horizontal
)

if let query = query,
   let result = arView.session.raycast(query).first {
    let anchor = ARAnchor(name: "placed-object", transform: result.worldTransform)
    arView.session.add(anchor: anchor)

    let modelEntity = try! ModelEntity.loadModel(named: "model.usdz")
    let anchorEntity = AnchorEntity(anchor: anchor)
    anchorEntity.addChild(modelEntity)
    arView.scene.addAnchor(anchorEntity)
}

Что входит в работу по интеграции ARKit

  • Аудит требований и совместимости устройств (целевые модели, наличие LiDAR).
  • Проектирование AR-архитектуры с graceful деградацией на старых устройствах.
  • Разработка ядра AR: сессия, anchors, распознавание плоскостей/изображений/лиц.
  • Интеграция 3D-контента: конвертация в USDZ, настройка PBR-материалов.
  • Тестирование на физических устройствах (минимум 5 моделей).
  • Оптимизация производительности под целевые устройства.
  • Передача исходного кода, документация и обучение команды.

Сроки интеграции

Базовая интеграция ARKit с размещением USDZ-объекта по плоскости: 3–5 дней. Image tracking с маркерами и наложением контента: 4–7 дней. Комплексное решение с face tracking, окклюзией LiDAR и кастомными шейдерами Metal: 3–6 недель. Стоимость рассчитывается индивидуально в зависимости от сложности 3D-контента и требований к поддерживаемым устройствам.

Мы занимаемся iOS-разработкой более 5 лет и выполнили 20+ AR-проектов для различных отраслей. Если вы хотите внедрить дополненную реальность в своё приложение, свяжитесь с нами — оценим проект и предложим оптимальное решение. Оцените свой проект на предмет AR-возможностей — получите консультацию нашего инженера.

Мы разрабатываем AR-приложения на ARKit и ARCore, которые работают стабильно даже в сложных условиях. Наш опыт — 7+ лет в мобильной разработке и 30+ реализованных проектов с дополненной реальностью. Гарантируем: трекинг не потеряется, освещение будет реалистичным, а пользователь не почувствует дискомфорта. Сертифицированные разработчики Apple и Google.

Почему трекинг теряется и как это исправить?

ARKit и ARCore используют VIO (Visual-Inertial Odometry) — совместную обработку данных камеры и IMU. Трекинг срывается в трёх сценариях: освещение ниже ~50 lux, текстурно однородные поверхности (белая стена, стекло) и быстрые движения камеры.

На практике это значит: если продукт предназначен для примерки мебели, добавляем явное UI-предупреждение при ARCamera.TrackingState.limited(.insufficientFeatures). Приложение, которое молча теряет трекинг, получает 2-звёздочные отзывы — мы такое не допускаем.

Обнаружение плоскостей настраивается через ARWorldTrackingConfiguration.planeDetection = [.horizontal, .vertical]. Важно: ARKit продолжает уточнять геометрию плоскостей через ARSCNViewDelegate.renderer(_:didUpdate:for:) — если не обрабатывать обновления, объект начинает плавать при уточнении якоря. Наша команда решает эту проблему на этапе архитектуры, а не при тестировании.

AR Foundation: кросс-платформа с нюансами

Unity AR Foundation — слой абстракции поверх ARKit и ARCore. Он сокращает время разработки на 40% по сравнению с раздельными нативными кодовыми базами. Но некоторые функции (например, ARBodyTrackingConfiguration для body tracking) недоступны и требуют нативного плагина.

Для React Native и Flutter прямой AR Foundation отсутствует. Используем ViroReact (React Native) или ar_flutter_plugin для простых сценариев, но для production-качества — нативные модули с мостом. Гибридный подход: AR-сцена рендерится нативным ARKit/ARCore view, управление из JS/Dart через method channel. Входит в нашу стандартную поставку.

Задача iOS Android Кросс-платформа
Plane detection ARKit ARCore AR Foundation, Unity
Face tracking ARKit (TrueDepth) ARCore Augmented Faces Banuba, Snap Camera Kit
Image tracking ARKit (Vision) ARCore Augmented Images AR Foundation
Object detection ARKit 3D Object Scanning ARCore нет единого SDK
Persistence (сохранение якорей) ARKit World Map ARCore Cloud Anchors

Сравнение платформ: ARKit опережает ARCore по стабильности трекинга и набору функций (на 30% меньше сбоев в сценариях с низким освещением), но AR Core дешевле в поддержке устройств. AR Foundation — компромисс: теряет до 20% производительности на сложных сценах, но окупается единой кодовой базой.

Try-on: примерка товаров через AR

Примерка очков, украшений, косметики — отдельный класс задач. Здесь нужен face tracking, а не plane detection.

ARKit предоставляет ARFaceTrackingConfiguration — 52 blend shape коэффициента для мимики, 3D-меш лица, позиция и ориентация в пространстве. Работает только на устройствах с TrueDepth-камерой (iPhone с Face ID).

Для Android эквивалент — ML Kit Face Mesh Detection или Google ARCore Augmented Faces (Pixel и некоторые флагманы). Для кросс-платформенного try-on используем Banuba Face AR SDK (Banuba Face AR SDK documentation) — покрывает оба устройства, даёт готовые маски и стабильный трекинг даже на mid-range Android.

Качество try-on критически зависит от 3D-моделей товаров. Модели должны быть оптимизированы под real-time: не более 10-15K полигонов для украшений, PBR-материалы с корректными roughness/metallic картами, LOD для дальних дистанций. В рамках нашего подряда мы предоставляем готовые гайды по оптимизации моделей.

Как добиться реалистичного освещения в AR?

ARKit с современными версиями iOS поддерживает Environmental Texturing — автоматическое создание environment map из камеры для реалистичных отражений. Включается через ARWorldTrackingConfiguration.environmentTexturing = .automatic. Без этого металлические и стеклянные материалы выглядят пластиково.

ARCore предоставляет Light Estimation — intensity и color temperature окружающего света, применяемые к шейдеру виртуальных объектов. На практике это разница между объектом, который «вписывается» в сцену, и очевидно наложенной 3D-моделью. Мы гарантируем, что финальное изображение не выдаёт виртуальности.

Что входит в работу

  • Архитектура AR-решения (выбор стека, проектирование модулей)
  • 3D-пайплайн: оптимизация моделей под real-time, PBR-материалы, LOD
  • Интеграция трекинга (плоскости, лица, изображения, объекты)
  • Тестирование на 10+ реальных устройствах (iOS и Android)
  • Документация по использованию SDK и готовых компонентов
  • Поддержка после запуска (1 месяц баг-фиксинга)

Сроки и оценка

Простая AR-сцена с размещением одной 3D-модели на плоскости — 1–2 недели. Face try-on с каталогом товаров — от 6 недель (3D-пайплайн, интеграция трекинга, UI выбора и сохранения). Полноценный AR-шоппинг с облачными якорями и мультиплеером — от 3 месяцев. Оценим проект за 1 день — пишите, обсудим вашу AR-идею.