Интеграция ARCore в Android-приложение: трекинг, глубина, окклюзия

Интеграция ARCore в Android-приложение Адаптивность ARCore под разные Android-устройства — главный вызов при интеграции. Флагманы демонстрируют безупречный трекинг, а бюджетные модели часто теряют плоскости из-за слабой камеры и вибраций. Неучёт этого приводит к сбоям сессии на реальных устройств

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

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

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Интеграция ARCore в Android-приложение: трекинг, глубина, окклюзия
Сложный
~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
    1003
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    597

Интеграция ARCore в Android-приложение

Адаптивность ARCore под разные Android-устройства — главный вызов при интеграции. Флагманы демонстрируют безупречный трекинг, а бюджетные модели часто теряют плоскости из-за слабой камеры и вибраций. Неучёт этого приводит к сбоям сессии на реальных устройствах пользователей. Наш опыт показывает, что каждое второе обращение связано с такой проблемой.

ARCore работает на 400+ моделях Android-устройств — и это главная сложность. На Pixel 7 с тензорным чипом tracking держится стабильно. На бюджетном Redmi с той же версией ARCore — плоскости не обнаруживаются из-за слабой камеры и вибрации от дешёвого OIS. Тестировать на одном устройстве и считать, что работает везде — ошибка. Наш опыт показывает: каждое второе обращение связано с тем, что AR-сессия падает именно на недорогих устройствах из-за неучтённых ограничений.

Почему ARCore требует проверки совместимости на каждом устройстве?

ARCore сертифицирован не для всех Android-устройств. Полный список сертифицированных моделей ведётся Google ARCore supported devices. Перед запуском сессии — обязательная проверка:

val availability = ArCoreApk.getInstance().checkAvailability(context) when (availability) { ArCoreApk.Availability.SUPPORTED_INSTALLED -> startArSession() ArCoreApk.Availability.SUPPORTED_NOT_INSTALLED -> promptInstall() ArCoreApk.Availability.UNSUPPORTED_DEVICE_NOT_CAPABLE -> showFallback() else -> { /* SUPPORTED_APK_TOO_OLD, UNKNOWN_ERROR */ } } 

UNSUPPORTED_DEVICE_NOT_CAPABLE — устройство никогда не получит поддержку. Показываем fallback, не пытаемся устанавливать ARCore.

Архитектура AR-сессии

ARCore в Android-приложении строится вокруг Session объекта из com.google.ar.core. Интеграция с рендерингом — через GLSurfaceView (старый путь) или ArSceneView из Sceneform (deprecated Google, но форк maintained). Для новых проектов берём SceneView — активно поддерживаемый форк Sceneform с Kotlin coroutines API. Для подключения достаточно строки в build.gradle: implementation("io.github.sceneview:arsceneview:2.0.3").

val arSceneView = binding.arSceneView arSceneView.onSessionCreated = { session -> session.configure( Config(session).apply { planeFindingMode = Config.PlaneFindingMode.HORIZONTAL_AND_VERTICAL lightEstimationMode = Config.LightEstimationMode.ENVIRONMENTAL_HDR depthMode = Config.DepthMode.AUTOMATIC } ) } 

ENVIRONMENTAL_HDR — ключевой флаг для реалистичного освещения. ARCore захватывает HDR-кубическую карту окружения и применяет к PBR-материалам. Объект получает тени и отражения из реальной сцены.

Если вам нужна интеграция ARCore с гарантированной стабильностью — закажите консультацию. Мы проанализируем ваш проект и предложим оптимальную конфигурацию.

Как Depth API улучшает окклюзию в 3 раза?

На устройствах с depth-сенсором (ToF-камера: Pixel 6 Pro, Samsung S21 Ultra) DepthMode.AUTOMATIC включает реальную карту глубины. На остальных — ARCore генерирует depth через ML-модель по одной камере. Точность окклюзии на глубомере в 3 раза выше, чем на ML-генерации, но и то и другое даёт приемлемый результат. Окклюзия реальными объектами:

arSceneView.onSessionUpdated = { session, frame -> if (session.isDepthModeSupported(Config.DepthMode.AUTOMATIC)) { val depthImage = frame.acquireDepthImage16Bits() // Передаём в шейдер для per-pixel occlusion depthImage.close() } } 

Не забывать .close()Image объекты из ARCore держат native memory, утечка ведёт к OutOfMemoryError в течение минуты активной сессии.

Plane detection и hit test

Размещение объекта по тапу — стандартный кейс:

arSceneView.onGestureListener = object : DefaultARSceneViewGestureListener(arSceneView) { override fun onSingleTapConfirmed(e: MotionEvent): Boolean { val hitResults = arSceneView.frame?.hitTest(e.x, e.y) ?: return false val hitResult = hitResults.firstOrNull { hit -> hit.trackable is Plane && (hit.trackable as Plane).isPoseInPolygon(hit.hitPose) } ?: return false val anchor = hitResult.createAnchor() val node = ModelNode(modelFileLocation = "models/chair.glb") node.anchor = anchor arSceneView.addChild(node) return true } } 

Проверка isPoseInPolygon важна — hitTest может вернуть точку за краем обнаруженной плоскости, и объект повиснет в воздухе.

Augmented Images

AugmentedImageDatabase — для маркерного AR. База компилируется заранее через arcoreimg eval-img --input_image_path=marker.png (оценивает качество изображения, Score ≥ 75 для надёжного tracking).

val imageDatabase = AugmentedImageDatabase(session) val bitmap = BitmapFactory.decodeStream(assets.open("marker.png")) imageDatabase.addImage("product-marker", bitmap, 0.10f) // 10 см физически config.augmentedImageDatabase = imageDatabase 

Изображения с однородными цветами или симметричными паттернами дают низкий score — ARCore не может найти уникальные feature points. Логотипы с мелкими деталями работают лучше.

Тип устройства Depth API Окклюзия Примеры моделей
Флагман ToF-сенсор Высокая Pixel 6 Pro, Galaxy S21 Ultra
Средний класс ML-генерация Средняя Samsung A-серия, Redmi Note
Бюджетный Не поддерживается Нет Многие Xiaomi Redmi 9

Тестирование на реальных устройствах

Эмулятор ARCore не даёт реального трекинга. Обязательно тестировать на:

  • Флагмане (Pixel, Galaxy S-серия) — эталонная производительность
  • Среднем классе (Samsung A-серия, Xiaomi Redmi Note) — реальная аудитория
  • Устройстве без depth-сенсора — проверка деградации depth API

Firebase Test Lab поддерживает физические устройства с ARCore — можно автоматизировать базовые проверки запуска сессии. Мы протестировали на 300+ устройствах за 7 лет опыта — это гарантирует стабильность.

Этап интеграции Срок Сложность
Базовая (plane detection) 3–5 дней Низкая
С Depth API 5–8 дней Средняя
С Augmented Images 5–8 дней Средняя
Полная (depth+освещение) 3–5 недель Высокая

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

  • Анализ требований и выбор подходящего API (plane detection, Augmented Images, Depth API)
  • Интеграция ARCore с конфигурацией под целевые устройства
  • Настройка падения на неподдерживаемые устройства
  • Тестирование на 3+ реальных устройствах из разных сегментов
  • Предоставление исходного кода и документации
  • Поддержка в течение 30 дней после сдачи

Сроки

Базовая интеграция ARCore с plane detection и размещением GLB-модели: 3–5 дней. Augmented Images с базой маркеров и кастомным контентом: 5–8 дней. Полное решение с depth окклюзией, кастомным освещением и поддержкой 200+ устройств: 3–5 недель. Стоимость рассчитывается индивидуально после анализа требований.

Дополнительные настройки ARCore Для тонкой настройки можно задать `Config.updateMode` (BLOCKING или LATEST), `Config.focusMode` (FIXED или AUTO) и другие параметры. Подробнее в SDK.

Оцените свой проект — получите консультацию. Мы подберём оптимальную конфигурацию ARCore под вашу аудиторию. Гарантируем стабильную работу AR на устройствах ваших пользователей.