Реализация LiDAR-сканирования в iOS AR-приложении

Реализация LiDAR-сканирования в iOS AR-приложении Мы в TrueTech разрабатываем LiDAR-встраивание для iOS AR-приложений с 2019 года. За это время реализовали 20+ проектов, где точное сканирование пространства стало ключевым — от примерки мебели до навигации внутри помещений. Наш опыт позволяет гара

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

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

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

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

Реализация LiDAR-сканирования в iOS AR-приложении

Мы в TrueTech разрабатываем LiDAR-встраивание для iOS AR-приложений с 2019 года. За это время реализовали 20+ проектов, где точное сканирование пространства стало ключевым — от примерки мебели до навигации внутри помещений. Наш опыт позволяет гарантировать стабильную работу на устройствах с LiDAR и корректный fallback для остальных.

LiDAR-сенсор появился в iPad Pro, iPhone 12 Pro и старше. ARKit использует его данные через ARWorldTrackingConfiguration с включённым sceneReconstruction — и это меняет всё, что касается качества plane detection, окклюзии объектов и скорости инициализации сцены. По нашим замерам, LiDAR-сессия стартует в 10 раз быстрее, чем плоскостное детектирование на нон-LiDAR устройствах.

Без LiDAR ARKit определяет горизонтальные плоскости за 2–5 секунд, вертикальные — ещё дольше. С LiDAR получаем меш окружения за доли секунды. Это не маркетинг — это разница между «AR-объект появляется сразу» и «пользователь машет телефоном 10 секунд перед тем, как что-то произойдёт».

Где конкретно ломается LiDAR-интеграция

Первая проблема — ARMeshGeometry даёт слишком плотный меш. Типичный фрейм: 50 000–200 000 вершин на комнату средних размеров. Если передавать это напрямую в SceneKit или RealityKit без LOD и culling, FPS проседает уже на A14.

Решение: используем ARMeshAnchor и ARMeshGeometry.faces для разреженного меша, а для отображения — ModelEntity с MeshResource.generate(from:) только для видимых секций. ARView в RealityKit умеет делать это через sceneUnderstanding.options с флагом .occlusion — он активирует только необходимый subset меша для расчёта окклюзии, не рендеря весь.

Вторая проблема — raycast в LiDAR-режиме. ARRaycastQuery с типом .estimatedPlane работает иначе, чем .existingPlaneGeometry. На устройствах с LiDAR правильный путь: ARRaycastQuery(origin:direction:allowing:.estimatedPlane, alignment:.any) с последующим уточнением через меш. Если добавить .existingPlaneGeometry как fallback — получаем двойные хиты и артефакты размещения.

Третья — sessionWasInterrupted. Когда пользователь сворачивает приложение, LiDAR-сессия сбрасывает накопленный меш. При восстановлении нужно вызвать session.run(configuration, options: [.removeExistingAnchors, .resetSceneReconstruction]) — без .resetSceneReconstruction старые ARMeshAnchor-и накладываются на новые с дрейфом.

Как мы строим LiDAR-пайплайн

Используем RealityKit 2 как основной рендер-слой: он напрямую интегрирован с ARKit 5+ и использует Metal для рендеринга мешей без CPU-оверхеда SceneKit. Конфигурация:

let config = ARWorldTrackingConfiguration() config.sceneReconstruction = .meshWithClassification config.environmentTexturing = .automatic config.frameSemantics = [.personSegmentationWithDepth] arView.session.run(config) 

meshWithClassification включает классификацию поверхностей (пол, стена, потолок, окно, дверь) — это позволяет фильтровать ARMeshAnchor по ARMeshClassification и реагировать только на нужный тип поверхности. Для приложений с расстановкой мебели или навигацией в помещении это критично.

Для окклюзии объектов за реальными предметами включаем:

arView.environment.sceneUnderstanding.options = [.occlusion, .physics] 

.physics добавляет коллизии AR-объектов с реальными поверхностями — AR-куб падает на стол и не проваливается сквозь него.

Кейс: приложение для примерки мебели, iPhone 13 Pro. Без LiDAR-окклюзии диван «висел» поверх ног пользователя при съёмке себя. С .occlusion ноги корректно перекрывают AR-объект. Время инициализации плоскости — 0.3 секунды против 4.2 секунды на нон-LiDAR устройстве.

Как реализовать LiDAR-сканирование: пошаговый план

  1. Проверка доступности LiDAR. Вызовите ARWorldTrackingConfiguration.supportsSceneReconstruction(.mesh). Если true — используйте LiDAR-путь, иначе — plane detection.
  2. Настройка конфигурации. Включите .meshWithClassification и .environmentTexturing.automatic. Для захвата глубины добавьте .personSegmentationWithDepth.
  3. Рендеринг с окклюзией. В RealityKit включите sceneUnderstanding.options = [.occlusion, .physics]. Для пользовательского рендеринга используйте ARMeshAnchor с LOD.
  4. Raycast с LiDAR. Используйте .estimatedPlane с alignment: .any. При отсутствии LiDAR — fallback на .existingPlaneGeometry.
  5. Обработка прерываний. В sessionWasInterrupted вызовите перезапуск с опциями removeExistingAnchors и resetSceneReconstruction.

Что LiDAR даёт по сравнению с plane detection

Критерий С LiDAR Без LiDAR (plane detection)
Время инициализации сцены 0.2–0.5 с 2–5 с
Качество окклюзии Полное, с учётом глубины Отсутствует или приблизительное
Определение вертикальных поверхностей Мгновенно Затруднено
Нагрузка на CPU/GPU Высокая (но оптимизируемая) Умеренная

Fallback для устройств без LiDAR

LiDAR есть только с iPhone 12 Pro. Для широкого охвата пишем два пути:

if ARWorldTrackingConfiguration.supportsSceneReconstruction(.mesh) { // LiDAR path } else { // Plane detection fallback config.planeDetection = [.horizontal, .vertical] } 

Это не просто if — это разные UX-сценарии. На нон-LiDAR устройствах показываем индикатор «наведите на поверхность», на LiDAR — сразу предлагаем разместить объект.

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

  • Настройка ARWorldTrackingConfiguration с sceneReconstruction и классификацией поверхностей
  • Реализация окклюзии и физики через RealityKit sceneUnderstanding
  • Оптимизация рендеринга меша (LOD, frustum culling, разреженный меш)
  • Корректный raycast с LiDAR и fallback для нон-LiDAR устройств
  • Обработка прерываний сессии и восстановление состояния
  • Тестирование на реальных устройствах (iPhone 12 Pro+, iPad Pro)

Сроки

Сложность Сроки
Базовая LiDAR-интеграция с окклюзией 1–2 недели
Полноценный пайплайн + fallback + оптимизация 3–5 недель
Кастомные классификаторы поверхностей + AR-физика 6–8 недель

Стоимость рассчитывается индивидуально после анализа требований к AR-сцене и целевых устройств. Свяжитесь с нами для консультации — мы поможем оценить объём работ и предложим оптимальное решение. Получите расчёт за 1 день.

Ссылка на Apple-документацию по ARWorldTrackingConfiguration [Apple Developer Documentation: ARWorldTrackingConfiguration](https://developer.apple.com/documentation/arkit/arworldtrackingconfiguration)
Что такое LiDAR? LiDAR (Light Detection and Ranging) — технология измерения расстояний с помощью лазерных импульсов. Подробнее на [Wikipedia](https://en.wikipedia.org/wiki/Lidar).