GPS даёт 3–5 метров точности. Для AR-опыта в городской среде этого катастрофически мало: накладывать навигационные стрелки поверх конкретного входа в здание или показывать AR-аннотацию над нужной скульптурой в музейном дворе при 5-метровой погрешности невозможно. Мы реализуем Visual Positioning System (VPS) для мобильных AR-приложений под ключ — от сканирования помещения до интеграции SDK. С помощью VPS пользователь наводит камеру на окружающее пространство, алгоритм матчит кадр против предзаписанной визуальной карты и возвращает позицию с точностью до 10–30 сантиметров. Оценим ваш проект и подберём оптимальное решение.
Как VPS определяет положение?
Два этапа: mapping (оффлайн) и localization (онлайн, в реальном времени).
| Этап |
Время выполнения |
Ресурсы |
| Mapping |
От 30 минут до 2 часов |
Телефон с камерой, сервер SfM |
| Localization |
200–500 мс |
Сервер или устройство |
Mapping. Помещение или уличная зона сканируется: оператор с телефоном или специализированным rig проходит по всей области, записывая видео. Из видео извлекаются ключевые кадры, запускается Structure from Motion (SfM) алгоритм — строится sparse point cloud и набор 6DOF поз камеры. Дескрипторы feature points (ORB, SuperPoint + SuperGlue для лучшей точности) индексируются в базе данных для быстрого поиска.
Localization. Телефон снимает кадр, отправляет на сервер (или обрабатывает локально на мощных устройствах). Алгоритм image retrieval находит ближайшие ключевые кадры из базы → PnP (Perspective-n-Point) вычисляет позу камеры → возвращает 6DOF transform. Всё это за 200–500 мс при серверной обработке. Для offline-localization на устройстве используется запись фреймов в локальную базу данных, что повышает приватность.
Как построить визуальную карту для VPS?
- Съёмка помещения с перекрытием кадров не менее 60%, равномерным освещением и полным покрытием маршрутов пользователей.
- Загрузка видео на сервер Immersal или другого провайдера.
- SfM обработка: 30–120 минут, после чего получаем mapId.
- Проверка точности: тестовая локализация в контрольных точках.
Если интерьер меняется — пересканируем изменённые зоны и мерджим с существующей картой через консоль провайдера. Мы гарантируем, что финальная карта обеспечит стабильную локализацию даже при частичном перекрытии камеры.
Какой SDK выбрать для VPS?
| Провайдер |
Покрытие |
Offline |
Точность |
Применение |
| Google ARCore Geospatial API |
Города со Street View |
Нет |
~10–30 см |
Городские AR-опыты |
| Immersal SDK |
Кастомные карты |
Да (device) |
~2–5 см |
Закрытые пространства |
| Niantic Lightship VPS |
Lightship wayspots |
Нет |
~10–20 см |
Мобильные AR-игры |
| Apple ARKit + GPS |
Outdoor, iOS only |
Частично |
~1–3 м |
Быстрый прототип |
| Microsoft Azure Spatial Anchors |
Кастомные |
Нет |
~1–5 см |
Интеграция с Azure |
Для кастомных закрытых пространств (музей, офис, склад) лучше всего подходит Immersal — он обеспечивает точность в 10 раз выше, чем Apple ARKit + GPS в помещениях. Для городских AR-опытов на iOS и Android — ARCore Geospatial API или Niantic VPS. Azure Spatial Anchors хороши при интеграции с Azure-инфраструктурой заказчика.
Как интегрировать Immersal в нативное приложение?
Immersal предоставляет REST API для cloud localization и Unity SDK — последний нам неинтересен, работаем нативно.
iOS: HTTP запрос к https://api.immersal.com/localize с JPEG кадром и camera intrinsics → JSON-ответ с позой в системе координат карты → конвертируем в ARKit world space через матричное преобразование.
struct LocalizeRequest: Encodable {
let token: String
let fx, fy, ox, oy: Double // camera intrinsics из ARCamera.intrinsics
let image: String // base64 JPEG
}
// Получаем mapToWorld matrix, применяем к ARSession.currentFrame
Android: аналогично через retrofit2 + moshi, camera intrinsics из CameraCharacteristics.
Локализацию запускаем не на каждом кадре (это 200 мс latency) — триггер при смене позиции на 1+ метр или при потере ARCore tracking.
Что входит в работу
- Техническое задание с выбором провайдера и архитектуры.
- Сканирование и построение визуальной карты для закрытых помещений.
- Интеграция SDK в нативное iOS и/или Android приложение.
- Документация API и инструкция по обновлению карты.
- Тестирование точности и стабильности на целевых устройствах.
- Поддержка после запуска в течение 1 месяца.
Сроки и стоимость
Интеграция ARCore Geospatial для городского AR-опыта: от 2 до 4 недель. Кастомная VPS с Immersal для закрытого помещения включая сканирование: от 4 до 8 недель. Собственный VPS-сервер на базе HLoc (hloc + SuperPoint + SuperGlue + Colmap) без внешних зависимостей: 3–5 месяцев. Стоимость рассчитывается индивидуально. Получите консультацию — мы подготовим предварительный расчёт. Закажите интеграцию VPS в ваше приложение.
Мы разрабатываем AR-решения для ритейла, музеев и промышленности. Свяжитесь с нами — обсудим вашу задачу и подберём оптимальное решение VPS.
Мы разрабатываем 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-идею.