Построение 3D-сетки окружения в AR (Scene Reconstruction)

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

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

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

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Построение 3D-сетки окружения в AR (Scene Reconstruction)
Сложный
~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

Мы интегрируем Scene Reconstruction в AR-приложения, когда требуется точное взаимодействие с реальным окружением. Без LiDAR на устройствах (iPhone 12 Pro и новее, iPad Pro 2020+) реконструкция сцены невозможна — только детекция плоскостей. Типичная проблема: после интеграции ARKit с sceneReconstruction = .mesh приложение тормозит, потому что каждая вершина меша пересоздаётся каждый кадр. Мы решаем это, работая напрямую с Metal буферами и обновляя только изменившиеся анкоры. В одном проекте для склада мы обрабатывали до 30 000 вершин на кадр, сохраняя 60 FPS. Разберём технические детали.

Как устроена реконструкция сцены?

ARMeshAnchor накапливает геометрию комнаты в реальном времени. ARMeshGeometry хранит вершины, нормали и индексы треугольников. Обновляется через делегат session(_:didUpdate:) — каждый кадр ARKit может присылать десятки обновлённых анкоров. Наивная реализация, пересоздающая MeshResource на каждый update, убивает 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 каждый раз — патчим существующий
}

Почему классификация поверхностей критична для AR?

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

Тип поверхности Описание Применение
floor Пол Построение NavMesh, расположение объектов
wall Стена Окклюзия, коллизии
ceiling Потолок Освещение (обычно игнорируется)
door Дверь Навигация через проёмы
window Окно Специальные эффекты
seat Сиденье Взаимодействие (сесть)
table Стол Размещение объектов
none Неизвестный объект Препятствия (стеллажи, паллеты)

Как мы избегаем просадок производительности?

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

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

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

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

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

Параметр Scene Reconstruction Plane Detection Only
Детализация геометрии ~30 000 вершин 4 плоскости
Окклюзия Точная, на основе меша Приблизительная, с артефактами
Физика CollisionComponent с геометрией Только плоскости
Поддержка LiDAR Обязательна Не требуется

Что входит в нашу работу?

  • Анализ требований и выбор стека (ARKit/RealityKit/Metal).
  • Настройка сессии с включением реконструкции сцены.
  • Разработка визуализации меша (отладка и продакшен).
  • Интеграция данных меша: окклюзия, физика, raycast.
  • Оптимизация производительности (пулинг обновлений, буферизация).
  • Тестирование на устройствах с LiDAR и fallback для нон-LiDAR.
  • Документация и обучение команды.

Процесс работы: от идеи до деплоя

  1. Аналитика — обсуждаем сценарии использования и определяем необходимые данные (окклюзия, навигация, физика).
  2. Проектирование — выбираем архитектуру (компонентная система, связка ARView и Metal).
  3. Реализация — пишем код на Swift, используем паттерн делегата для обновлений.
  4. Тестирование — проверяем на реальных устройствах в различных условиях (освещение, зеркала).
  5. Деплой — публикуем в App Store, настраиваем TestFlight для бета-тестеров.

Сроки и как начать

Базовая интеграция с визуализацией меша занимает 1–2 недели. Если нужны классификация поверхностей, физические коллизии и навигация на основе меша — 4–6 недель. Стоимость рассчитывается после детального обсуждения требований. Свяжитесь с нами для консультации — получите оценку вашего проекта. Также вы можете заказать предварительный анализ вашего 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-идею.