Доповнена реальність в мобільних додатках: ARKit, ARCore та AR Foundation
AR у production — це не «положити 3D-модель на площину». Це боротьба з дрифтом трекінгу, несумісністю масштабів, освітленням, яке робить віртуальний об'єкт нереалістичним, та затримкою рендерингу, через яку користувач відчуває нудоту після 30 секунд використання.
Детектування площин та стабільність трекінгу
ARKit (iOS 11+) та ARCore (Android) використовують алгоритм Visual-Inertial Odometry (VIO) — спільну обробку даних камери та 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. Вирішує проблему однієї кодової бази, але привносить свої обмеження. Деякі ARKit-функції (наприклад, ARBodyTrackingConfiguration для повного body tracking) недоступні через AR Foundation і потребують нативного плагіну.
Для React Native та Flutter прямого AR Foundation еквіваленту немає. Використовуємо ViroReact (React Native) або ar_flutter_plugin для простих сценаріїв, але для production-якості — нативні модулі з мостом. Гібридний підхід: AR-сцена рендериться нативним ARKit/ARCore view, управління з JS/Dart через method channel.
Try-on: Примірка Товарів через AR
Примірка окулярів, прикрас, косметики — окремий клас задач. Тут детектування площин недостатньо, потрібен face tracking.
ARKit надає ARFaceTrackingConfiguration — 52 blend shape коефіцієнти для мімічних виразів, 3D-сітку обличчя, позицію та орієнтацію в просторі. Працює тільки на пристроях з TrueDepth-камерою (iPhone X та новіші).
Для Android еквівалент — ML Kit Face Mesh Detection або Google ARCore Augmented Faces (тільки Pixel та деякі флагмани). Для кроссплатформної примірки в нашій практиці використовуємо Banuba Face AR SDK — він покриває обидва пристрої, дає готові маски та стабільний трекінг навіть на mid-range Android.
Якість примірки критично залежить від 3D-моделей товарів. Моделі повинні бути оптимізовані для real-time: не більш як 10-15K полігонів для прикрас, PBR-матеріали з коректними картами roughness/metallic, LOD для дальніх дистанцій.
Освітлення та Реалізм
ARKit з iOS 13 підтримує Environmental Texturing — автоматичне створення environment map з камери для реалістичних відбитків на віртуальних об'єктах. Вмикається через ARWorldTrackingConfiguration.environmentTexturing = .automatic. Без цього металеві та скляні матеріали виглядають пластиковими.
ARCore надає Light Estimation — інтенсивність та колірну температуру навколишнього світла, які застосовуються до шейдера віртуальних об'єктів. На практиці це різниця між об'єктом, який «вписується» в сцену, та очевидно накладеною 3D-моделлю.
| Завдання | iOS | Android | Кроссплатформа |
|---|---|---|---|
| Детектування площин | 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 | — |
Терміни та Оцінка
Проста AR-сцена з розміщенням однієї 3D-моделі на площині — 1-2 тижні. Face try-on з каталогом товарів — від 6 тижнів: 3D-конвеєр для оптимізації моделей, інтеграція трекінгу, UI вибору та збереження результату. Повноцінний AR-шопінг з хмарними якорами та мультиплеєром — від 3 місяців.







