AR-приложение должно понять окружение за миллисекунды: где пол, где стены, что за предметы в кадре, как падает свет. Без этого виртуальный объект «плавает» в воздухе, не отбрасывает тени и выглядит неестественно. Термин Scene Understanding объединяет фундамент, на котором строится весь AR-опыт. Мы с этим работаем уже 10+ лет и видели проекты, где occlusion «сломал» UX — дорогостоящие ошибки на этапе прототипирования. Финансовые риски при некорректном scene understanding могут составлять до 60% бюджета AR-проекта.
Что такое scene understanding и почему это важно?
Scene understanding объединяет несколько CV-задач: детекцию плоскостей, оценку глубины, семантическую сегментацию и оценку освещения. Каждая из них критична для реалистичного AR. Например, без корректной глубины occlusion — виртуальный объект не сможет прятаться за реальными предметами. Сравните: LiDAR даёт глубину с точностью ±1–2 см, а monocular depth — ±5–10 см, что в 5 раз хуже на близких дистанциях. Поэтому для сценариев с мелкими объектами обязателен LiDAR или кастомная нейросеть.
Как решается проблема occlusion?
Отметим: когда 3D-персонаж проходит сквозь реальный стол, пользователь сразу теряет доверие. Корректный occlusion требует depth ordering: для каждого пикселя знать, что ближе — виртуальный объект или реальная поверхность. Решение: depth estimation (LiDAR или нейронная сеть) создаёт occlusion mask. Пиксели, где реальная глубина меньше виртуальной, рендерятся реальными. Это требует синхронизации depth и RGB потоков с джиттером менее 5 ms. На устройствах без LiDAR мы используем monocular depth (MiDaS v3.1) + semantics для уточнения границ объектов. Точность ниже, но для крупных объектов — приемлемо.
Как мы строим семантическое понимание сцены?
Семантическая сегментация — классификация каждого пикселя (пол, стена, стул, человек). Модели: SegFormer, Mask2Former, обученные на ADE20K или ScanNet. На производстве мы часто дообучаем их под конкретные категории заказчика через fine-tuning на 100–500 размеченных кадрах.
Плоскостная детекция — нахождение горизонтальных и вертикальных плоскостей. ARKit / ARCore делают это из коробки, но для наклонных поверхностей или скруглённых стен нужны кастомные RANSAC-алгоритмы.
Depth estimation — оценка глубины из RGB. Используем DPT, MiDaS, UniDepth. На устройствах с LiDAR фьюзим RGB + LiDAR для точности ±1–2 см.
Light estimation — оценка направления и интенсивности освещения. ARKit даёт spherical harmonics из HDR estimate. Нейросетевые подходы (EfficientLit, DiffusionLight) точнее на сложных lighting ситуациях.
Технические детали моделей
- MiDaS v3.1: backbone EfficientNet-L, разрешение 384x384, latency ~30ms на iPhone 14. - DPT: Vision Transformer, разрешение 384x384, точность выше на 15%, но latency ~60ms. - SegFormer: MiT-B2, 20 классов, mIoU 0.45 на ADE20K.Компоненты scene understanding
| Компонент | Базовый модуль (ARKit/ARCore) | Кастомный (наша разработка) |
|---|---|---|
| Плоскости | Built-in, до 30 плоскостей | RANSAC + ML для произвольных поверхностей |
| Depth | LiDAR / ARCore Depth API | MiDaS/DPT + fusion для ±1 см |
| Семантика | ARKit (6 классов) | SegFormer (20‑50 кастомных классов) |
| 6DoF detection | Не встроен | FoundationPose (с CAD) |
| Occlusion | Встроенный depth-based | Семантически уточнённая маска |
Как обеспечить производительность при real-time scene understanding?
Visual SLAM — основа любого AR: система одновременно строит карту и определяет положение. Классика: ORB-SLAM3 (CPU-friendly). Нейронный SLAM: DROID-SLAM, Point-SLAM — выше точность на сложных текстурах, но требуют GPU. Для production на смартфонах используем ARKit / ARCore как базу SLAM и добавляем кастомные CV-модели через Metal (iOS) или Vulkan (Android).
// ARKit: получение depth map и plane detection func session(_ session: ARSession, didUpdate frame: ARFrame) { // Depth estimation if let depthMap = frame.sceneDepth?.depthMap { // CVPixelBuffer с float32 depth values в метрах processDepth(depthMap) } // Semantic segmentation (ARKit 4+) if let segBuffer = frame.segmentationBuffer { // Маска с классами: floor, wall, seat, window, door, table, face, person processSemantics(segBuffer) } } Платформы и инструменты
| Платформа | SLAM | Depth | Semantics |
|---|---|---|---|
| iOS (ARKit) | Built-in | LiDAR / Neural | Built-in (ограниченный) |
| Android (ARCore) | Built-in | Depth API | Нет (кастомный) |
| HoloLens 2 | Mixed Reality | Time-of-Flight | Scene Understanding API |
| Apple Vision Pro | visionOS | LiDAR + stereo | RoomPlan / MeshAnchor |
| Custom (Jetson) | ORB-SLAM3 | Stereo / ToF | Кастомная SegFormer |
Подробнее в документации Apple ARKit Scene Understanding.
Что входит в разработку модуля scene understanding
- Анализ сценариев AR и выбор стека (ARKit, ARCore, custom)
- Разработка/адаптация моделей depth, semantics, detection
- Интеграция occlusion с коррекцией синхронизации потоков
- Настройка производительности: target 30 FPS (latency p99 < 33 ms)
- Документация API и инструкция по калибровке
- Обучающие материалы для команды заказчика
- Поддержка 3 месяца после внедрения
Сроки и стоимость
Базовый модуль (плоскости + глубина + occlusion): 4–8 недель. Полное semantic понимание сцены с кастомными категориями: 10–16 недель. Стоимость рассчитывается индивидуально — свяжитесь с нами, чтобы обсудить ваш проект. Получите консультацию: оценим за один день. Для детальной оценки вашего сценария свяжитесь с нашими инженерами.







