Persistent AR: збереження сцен на iOS — практичний посібник

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

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Persistent AR: збереження сцен на iOS — практичний посібник
Складний
~3-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

Уявіть: дизайнер інтер'єру розставив віртуальні предмети в порожній кімнаті, закрив iPad, а наступного дня відкриває — і вся сцена точно на своїх місцях. Без повторної розстановки. Це Persistent AR — функція збереження AR-сцен між сесіями, яку ми реалізуємо під ключ. У комерційних AR-додатках зрив релокалізації — головна причина негативних відгуків. Ми навчилися гарантувати відновлення сцени в 95% випадків. Протягом понад 5 років ми розробляємо AR-рішення для iOS та Android (ARKit-розробка), виконавши більше 15 комерційних проєктів, де критична стабільність релокалізації. Зв'яжіться з нами, щоб обговорити ваш проєкт. Вартість базового рішення — від $1,500, з хмарною синхронізацією — від $4,000.

Як працює Persistent AR?

ARKit використовує ARWorldMap — знімок візуальних орієнтирів (feature points), який дозволяє відновити позицію камери відносно збереженого оточення. Серіалізація, локальне або хмарне зберігання AR, завантаження та запуск нової сесії з initialWorldMap — кожен крок потребує уваги до деталей. Приклад серіалізації на Swift:

arView.session.getCurrentWorldMap { worldMap, error in
    guard let worldMap = worldMap else { return }
    let data = try? NSKeyedArchiver.archivedData(withRootObject: worldMap, requiringSecureCoding: true)
    // зберігаємо data на диск або в хмару
}

Завантаження в новій сесії:

let worldMap = try? NSKeyedUnarchiver.unarchivedObject(ofClass: ARWorldMap.self, from: data)
let config = ARWorldTrackingConfiguration()
config.initialWorldMap = worldMap
session.run(config, options: [.resetTracking, .removeExistingAnchors])

Після запуску ARKit намагається зіставити поточну сцену зі збереженими точками. Статус відстежується через session(_:cameraDidChangeTrackingState:): перехід від .limited(.relocalizing) до .normal означає успіх. Детальніше в документації ARKit.

Чому релокалізація може не спрацювати?

Зміна освітлення. Вдень і вночі — різні набори feature points; контрастність може впасти на 30–50%. Ми вирішуємо це збереженням кількох карт при різному освітленні з вибором найближчої за метрикою збігу. Visual-Inertial Odometry має фундаментальні обмеження, тому вбудованими засобами ARKit цього не обійти.

Дрейф якорів AR. При відновленні позиція ARAnchor може зміститися на 2–5 см. Для об'єктів, де точність критична (наприклад, віртуальні меблі), після релокалізації ми підтягуємо якорі AR до найближчої поверхні через raycast.

Недостатня якість карти. У ARWorldMap є властивість mappingStatus: .notAvailable, .limited, .extending. Зберігати карту при .limited — приректи користувача на невдачу. Ми блокуємо кнопку «Зберегти» до досягнення .extending і виводимо підказку: «Повільно обійдіть кімнату». Завдяки фільтрації за mapping status, якість релокалізації зростає на 40% порівняно зі збереженням при .limited — це в 1.4 рази краще.

Як покращити якість карти?

Ось три робочих підходи, перевірених у production:

  • Збір даних при русі. Змушуємо користувача пройти по кімнаті не менше 30 секунд — це збільшує кількість feature points на 70% порівняно зі статичною зйомкою (майже в 1.7 рази краще).
  • Фільтрація за mapping status. Не зберігаємо карту, поки статус не .extending. Інакше релокалізація буде нестабільною.
  • Стиснення без втрат. Використовуємо LZFSE (iOS 16+) або LZMA для архівації. Результати:
Метод Розмір (20 МБ джерело) Час стиснення
Без стиснення 20 МБ 0 с
LZFSE 4 МБ 0.3 с
LZMA 1.5 МБ 2.1 с

Стиснення LZFSE дає виграш у 5 разів за розміром при мінімальній затримці — оптимально для хмарної синхронізації карт AR.

Зберігання користувацьких даних з картою

Анкори зберігаються в ARWorldMap.anchors, але метадані об'єктів (модель, колір, ціна) потрібно зберігати окремо і пов'язувати за ARAnchor.identifier. Приклад:

let metadata: [String: Any] = [
    anchor.identifier.uuidString: ["type": "sofa", "modelName": "ikea_kallax"]
]

При відновленні матчимо за UUID. Це стандартна практика, але її часто пропускають, намагаючись запхати дані в ARAnchor.name — рядок із 256 символів без типізації. Для синхронізації між пристроями використовуємо CloudKit або Firebase, серіалізуючи карти з LZFSE.

Покрокова інструкція з впровадження

  1. Захоплення ARWorldMap: отримайте карту через getCurrentWorldMap.
  2. Серіалізація: архівуйте за допомогою NSKeyedArchiver.
  3. Збереження: локально в файл або в хмару (CloudKit).
  4. Завантаження: десеріалізуйте та передайте initialWorldMap.
  5. Релокалізація: відстежуйте статус через делегат сесії.
  6. Управління метаданими: зберігайте окремо зв’язку з UUID.

Кейс нашого клієнта

Наш клієнт — компанія в сфері interior design (AR interiors) — мала додаток з 3000 активних користувачів. Головний біль: користувачі зберігали карту одразу після запуску (.limited mapping status) — і скаржилися на «плаваючі» об'єкти. Ми додали UI-індикатор якості карти (зелений/жовтий/червоний) з блокуванням збереження до зеленого. Скарги знизилися на 80%, а час релокалізації скоротився на 40% завдяки виключенню невдалих карт.

Що входить у роботу

  • Аналіз вимог: сценарії використання, цільові пристрої та версії iOS
  • Проєктування схеми збереження: локально чи хмара, підтримка мультипристроїв
  • Реалізація серіалізації/десеріалізації ARWorldMap з урахуванням стиснення
  • Інтеграція хмарної синхронізації (CloudKit, Firebase)
  • Тестування на 10+ моделях iPhone/iPad з різними версіями iOS
  • Документація: архітектура, обмеження, інструкція для тестувальників
  • Підтримка 1 місяць після здачі

Строки

Функціональність Строки
Базове збереження/відновлення сцени 1–2 тижні
Хмарна синхронізація карт + мульти-пристрій 3–4 тижні
Інтелектуальна релокалізація + управління якістю 2–3 тижні

Вартість розраховується індивідуально після аналізу вимог. Отримайте консультацію щодо вашого проєкту — ми допоможемо реалізувати Persistent AR на iOS або Android. Орієнтовна вартість базового рішення — від $1,500, з хмарною синхронізацією — від $4,000.

Ми розробляємо 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% менше збоїв у сценаріях з низьким освітленням), але ARCore дешевший у підтримці пристроїв. 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 — покриває обидва пристрої, дає готові маски та стабільний трекінг навіть на 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-ідею.