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

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

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

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

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

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

Интеграция 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 на устройствах ваших пользователей.

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

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

  • Разработка мобильного приложения для компании FEEDME
    Разработка мобильного приложения для компании FEEDME
    1010
  • Разработка мобильного приложения для компании XOOMER
    Разработка мобильного приложения для компании XOOMER
    903
  • Разработка мобильного приложения для компании RHL
    Разработка мобильного приложения для компании RHL
    1332
  • Разработка мобильного приложения для компании ZIPPY
    Разработка мобильного приложения для компании ZIPPY
    1180
  • Разработка мобильного приложения для компании Affhome
    Разработка мобильного приложения для компании Affhome
    1107
  • Разработка мобильного приложения для компании FLAVORS
    Разработка мобильного приложения для компании FLAVORS
    714