Платформа ARCore — решение Google для дополненной реальности на Android, использующее камеру и инерциальные датчики смартфона для отслеживания положения в пространстве. По данным Google AR Developers, 2025, платформа поддерживает Motion Tracking, Environmental Understanding и Light Estimation — три базовые технологии для размещения виртуальных объектов в реальном окружении. Кроссплатформенная архитектура позволяет разработчикам создавать AR-приложения для Android, iOS, Unity и Unreal Engine с единой кодовой базой.
Главное
ARCore — это платформа дополненной реальности от Google, анонсированная в 2018 году как преемник Project Tango в более лёгком и доступном формате. В отличие от Tango, который требовал специализированные сенсоры глубины, ARCore работает на стандартных Android-смартфонах, используя только камеру и инерциальные датчики (IMU).
ARCore использует три ключевые технологии: Motion Tracking для отслеживания положения устройства, Environmental Understanding для обнаружения горизонтальных и вертикальных плоскостей и Light Estimation для корректировки освещения виртуальных объектов под реальное окружение. Эти три технологии позволяют размещать AR-объекты, которые выглядят естественно на любой поверхности.
По данным Google I/O 2024, ARCore поддерживается на более чем 1 миллиарде Android-устройств, включая смартфоны Samsung, Xiaomi, Huawei, OnePlus, Google Pixel и других. Платформа интегрирована с Google Play Services for AR, что позволяет обновлять ARCore через Google Play Store независимо от версии Android.
За шесть версий ARCore прошёл значительную эволюцию: ARCore 1.0 — базовое отслеживание и распознавание плоскостей; ARCore 1.2 — вертикальные плоскости и Augmented Images; ARCore 1.7 — Cloud Anchors для многопользовательских сессий; ARCore 1.10 — Augmented Faces для отслеживания мимики лица.
ARCore 1.20+ включает Scene Semantic Understanding — распознавание категорий объектов (пол, потолок, стена, мебель, растение, дверь) через ML-модель TensorFlow Lite на устройстве. Street View Geometry API позволяет использовать карты глубины Google Street View для AR-навигации на открытом воздухе.
// Инициализация ARCore сессии
val session = Session(context)
val config = Config(session)
config.lightEstimationMode =
Config.LightEstimationMode.ENVIRONMENTAL_HDR
config.planeFindingMode =
Config.PlaneFindingMode.HORIZONTAL_AND_VERTICAL
session.configure(config)
// Обработка кадра
val frame = session.update()
val pointCloud = frame.acquirePointCloud()
val planes = session.getAllTrackables(
Plane::class.java
)
ARCore использует гибридный подход: IMU (инерциальный измерительный модуль) предсказывает положение устройства с высокой частотой (до 1000 Гц), а визуальная одометрия корректирует ошибки на основе анализа характерных точек с камеры с частотой 30–60 Гц. Этот подход обеспечивает точность отслеживания около 1–2 сантиметров в стационарных условиях.
Процесс Environmental Understanding работает в три этапа: сначала ARCore находит характерные точки (feature points) на изображении с камеры, затем определяет скопления точек, лежащих на одной плоскости, и аппроксимирует их в полигон. После распознавания плоскости ARCore создаёт Trackable-объект типа Plane, который обновляется по мере получения новых кадров.
По данным Google, ARCore определяет плоскость размером от 10x10 сантиметров на расстоянии до 1 метра от камеры. Для средних помещений (комната 20 м²) полное сканирование плоскостей занимает около 2–4 секунд. При использовании Depth API с поддержкой ToF-сенсора точность распознавания повышается на 40%.
Depth API — технология ARCore, которая строит карту глубины сцены на основе стереоанализа изображения с камеры. На устройствах с ToF-сенсором (Time-of-Flight) карта глубины получается мгновенно с точностью до 2 см. На устройствах без глубиномера Depth API использует машинное обучение для оценки глубины по одному кадру, что даёт точность около 10 см.
Scene Mesh — трёхмерная сетка окружения, которую ARCore строит в реальном времени. Сетка используется для физики столкновений, окклюзии виртуальных объектов и наложения теней. Scene Mesh доступен на устройствах с OpenGL ES 3.1 и поддержкой Depth API, включает до 500 тысяч полигонов на кадр.
// Получение карты глубины
val depthImage = frame.acquireDepthImage16Bits()
// Размещение объекта на распознанной плоскости
val hitResult = frame.hitTest(x, y)
.firstOrNull { it.trackable is Plane }
hitResult?.let { result ->
val anchor = session.createAnchor(
result.hitPose
)
val model = ModelRenderable.builder()
.setSourceId(R.raw.my_model)
.build()
.exceptionally { null }
AnchorNode(anchor).apply {
this.renderable = model.get()
}
}
Хотя ARCore и ARKit решают одни и те же задачи — отслеживание положения, распознавание плоскостей и оценку освещения — их подходы и экосистемы различаются. ARCore отдаёт приоритет кроссплатформенности и совместимости, тогда как ARKit использует глубокую интеграцию с аппаратным обеспечением Apple.
Ключевые отличия: ARCore работает на Android и iOS через ARCore SDK, ARKit — только на iOS. ARCore использует Cloud Anchors для синхронизации через Firebase, ARKit — ARWorldMap для прямого обмена между устройствами. ARCore с Depth API поддерживает ToF-сенсоры, ARKit с LiDAR — лазерное сканирование с точностью до 3 см.
По данным сравнительных тестов Google 2024, точность отслеживания ARCore на устройствах с гироскопом и ToF-сенсором сопоставима с ARKit на iPhone с LiDAR — погрешность не превышает 2 см на расстоянии 2 метров. На устройствах без ToF ARCore уступает ARKit по скорости инициализации: 3 секунды против 0.5 секунды.
Выбор между ARCore и ARKit зависит от целевой аудитории: если приложение предназначено только для iOS — ARKit даёт лучшую производительность и доступ к эксклюзивным функциям LiDAR. Если нужна поддержка обеих платформ — ARCore с ArcoreiOS SDK позволяет использовать единую кодовую базу с минимальными платформенными различиями, хотя с потерей некоторых аппаратных возможностей каждой платформы.
| Характеристика | ARCore | ARKit |
|---|---|---|
| Платформа | Android + iOS + Unity/Unreal | iOS только |
| Датчик глубины | ToF (опционально) | LiDAR (Pro модели) |
| Синхронизация | Cloud Anchors (Firebase) | ARWorldMap (Multipeer) |
| Отслеживание лица | Augmented Faces | Face Tracking (TrueDepth) |
| Точность VIO | 1–3 см | 0.5–1 см |
Интеграция ARCore начинается с добавления зависимости Google Play Services for AR в build.gradle: com.google.ar:core. Приложение должно проверить доступность ARCore на устройстве через ArCoreApk.checkAvailability() — если ARCore не установлен, предложить пользователю установить его из Google Play Store.
Базовый проект ARCore включает: создание Session и Config, настройку SurfaceView для отображения камеры, запуск сессии через session.resume() и обработку кадров через session.update(). Для рендеринга 3D-объектов используется Sceneform SDK (библиотека Google на основе Filament) или Unity/Unreal для сложных сцен.
Google рекомендует Sceneform для Kotlin-приложений — он предоставляет готовые компоненты: ModelRenderable для загрузки 3D-моделей (OBJ, glTF, FBX), ViewRenderable для встраивания Android View в AR-сцену и MotionEvent для обработки касаний. Sceneform автоматически управляет жизненным циклом AR-сессии и освобождением ресурсов.
ARCore может терять отслеживание при недостаточном освещении, однотонных поверхностях или быстрых движениях устройства. Состояние отслеживания доступно через frame.getTrackingState() — значения TRACKING, PAUSED и STOPPED. При переходе в PAUSED рекомендуется приостанавливать рендеринг и показывать пользователю рекомендации: "Медленнее перемещайте устройство" или "Перейдите в более освещённое место".
Для автоматического восстановления после сбоя ARCore поддерживает релокализацию на основе сохранённой карты характерных точек. Разработчик может сохранять карту через session.serialize() и восстанавливать через session.deserialize() — это полезно для long-running AR-опыта, где пользователь возвращается в то же физическое пространство. Восстановление карты занимает 1–2 секунды при условии, что окружение не изменилось существенно.
class ARCoreActivity : AppCompatActivity() {
private lateinit var session: Session
override fun onResume() {
super.onResume()
when (ArCoreApk.getInstance()
.checkAvailability(this)
) {
ArCoreApk.Availability.SUPPORTED_INSTALLED -> {
session = Session(this)
session.resume()
}
else -> {
showInstallPrompt()
}
}
}
}
Часто задаваемые вопросы
ARCore поддерживается на более чем 1 миллиарде Android-устройств, включая Google Pixel 2+, Samsung Galaxy S7+, Xiaomi Mi 8+, Huawei P20+, OnePlus 6+, Sony Xperia XZ2+ и многие другие. Полный список сертифицированных устройств опубликован на сайте developers.google.com/ar/devices.
Базовые функции ARCore — Motion Tracking и Environmental Understanding — не требуют интернета. Cloud Anchors и Augmented Images с облачными ссылками требуют соединения. Depth API и Scene Mesh работают полностью на устройстве без подключения к сети.
Да, ARCore можно использовать с OpenGL ES 3.1 напрямую, с Unity или Unreal Engine. Sceneform — рекомендуемый вариант для простых проектов на Kotlin, но он не обязателен. Для сложных 3D-сцен с реалистичной физикой лучше использовать игровые движки с поддержкой ARCore SDK.
ARCore оптимизирован для помещений с достаточным освещением (100–500 люкс). На улице при ярком солнце точность отслеживания может снижаться из-за пересвета камеры. Для наружной работы Google рекомендует использовать Street View Geometry API, предоставляющий карты глубины для городских локаций.
Scene Viewer — это готовый UI-компонент Google для просмотра 3D-моделей в AR без написания кода, работающий через WebXR. ARCore — полноценный SDK для создания кастомного AR-опыта с программным управлением всеми аспектами сессии, отслеживания и рендеринга.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также