Реализация построения 3D-сетки окружения (Scene Reconstruction) в AR

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

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

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

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Реализация построения 3D-сетки окружения (Scene Reconstruction) в AR
Сложный
~5 дней
Часто задаваемые вопросы

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

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

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

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Реализация построения 3D-сетки окружения (Scene Reconstruction) в AR

Scene Reconstruction — это не просто «AR видит пол». Это живой меш окружения, который ARKit обновляет в реальном времени по мере движения камеры. ARMeshAnchor накапливает геометрию комнаты, поверхности классифицируются, а приложение получает данные, с которыми можно работать: детектировать препятствия, строить навигационные графы, запускать физическую симуляцию.

Реализовать это так, чтобы не убить производительность — отдельная задача.

Архитектура меша и главные ловушки

ARMeshGeometry хранит вершины, нормали и индексы треугольников. Обновляется через делегат session(_:didUpdate:) — каждый кадр ARKit может присылать десятки обновлённых ARMeshAnchor. Наивная реализация, которая на каждый update пересоздаёт MeshResource или SCNGeometry, убивает main thread за секунды.

Правильный подход: обновляем меш только для изменившихся анкоров, используем MDLMesh как промежуточный формат и передаём данные в Metal буферы напрямую. В RealityKit это выглядит так:

func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
    for anchor in anchors.compactMap({ $0 as? ARMeshAnchor }) {
        updateMeshVisualization(for: anchor)
    }
}

func updateMeshVisualization(for anchor: ARMeshAnchor) {
    let geometry = anchor.geometry
    // Работаем с geometry.vertices, geometry.faces напрямую
    // Не создаём новый MeshResource каждый раз — патчим существующий
}

Вторая ловушка — классификация поверхностей. ARMeshClassification даёт: .floor, .ceiling, .wall, .door, .window, .seat, .table, .none. Но классификация работает только при sceneReconstruction = .meshWithClassification и только на устройствах с LiDAR. Без проверки ARWorldTrackingConfiguration.supportsSceneReconstruction(.meshWithClassification) — краш или молчаливое игнорирование.

Третья — координаты меша в мировом пространстве. ARMeshGeometry.vertices дают локальные координаты относительно ARMeshAnchor.transform. Чтобы получить мировые координаты, нужно умножить каждую вершину на матрицу трансформации анкора. Забыли — меш рендерится в неправильном месте.

Как мы строим Scene Reconstruction

Базовый стек: ARKit 5+ + RealityKit 2 + Metal. SceneKit не используем для меша — он не оптимизирован под динамические геометрии.

Настройка сессии:

let config = ARWorldTrackingConfiguration()
config.sceneReconstruction = .meshWithClassification
arView.debugOptions = [.showSceneUnderstanding] // для отладки
arView.session.run(config)

Для визуализации меша в режиме отладки рисуем wireframe через arView.debugOptions. В продакшене видимость меша отключаем, но используем его данные для:

  • Окклюзии — объекты за стенами не видны
  • ФизикиCollisionComponent взаимодействует с реальной геометрией
  • Raycast — точное попадание в реальные поверхности, не только в плоскости

Кейс из практики: навигационное AR-приложение для склада. Нужно было детектировать препятствия (стеллажи, паллеты) и строить маршрут. Использовали Scene Reconstruction для построения occupancy grid: каждую вершину меша с классификацией .none (нераспознанный объект) добавляли в граф препятствий. NavMesh обновлялся каждые 2 секунды — баланс между актуальностью и нагрузкой на CPU. На iPad Pro M2 это держит 60 FPS без просадок.

Fallback и диагностика

На нон-LiDAR устройствах Scene Reconstruction недоступен. Предлагаем деградацию до plane detection с manual mesh capture через ARPlaneAnchor. Это хуже, но лучше чем пустой экран.

Для диагностики качества меша — ARView.debugOptions.insert(.showSceneUnderstanding): зелёный wireframe показывает, что ARKit видит. Полезно при тестировании в нестандартных средах (глянцевые полы, зеркала — LiDAR работает плохо из-за отражения).

Сроки

Базовая интеграция с визуализацией меша — 1–2 недели. Если нужны классификация поверхностей, физические коллизии и навигация на основе меша — 4–6 недель. Стоимость рассчитывается после детального обсуждения требований.