Інтеграція ARKit: від трекінгу до Face Tracking
Інтеграція ARKit потребує ретельного налаштування. Успішна інтеграція ARKit вимагає врахування особливостей пристрою. Правильна інтеграція ARKit — запорука стабільної роботи AR-додатку. У нашій практиці ми стикаємося з тим, що ARKit — це не просто накладання 3D-об’єктів на камеру. Це зв’язка з LiDAR-сканера, Visual Inertial Odometry та нейромережевих моделей для розуміння сцени, яка при неправильному використанні дає нестабільний tracking, артефакти окклюзії та крэш при ARSession у фоні. Нижче розберемо ключові проблеми та способи їх вирішення, спираючись на досвід ARKit-розробки в реальних проєктах.
Як уникнути зриву трекінгу в темних сценах
Трекінг падає при поганому освітленні. ARWorldTrackingConfiguration будує карту по точках інтересу (feature points) — у темних приміщеннях або на однотонних поверхнях tracking деградує до ARCamera.TrackingState.limited(.insufficientFeatures). Ігнорувати цей state не можна: якщо не показувати користувачеві, що потрібно освітлити сцену, anchors починають дрейфувати, і 3D-об’єкт відлітає вбік. Правильно — підписатися на session(_:cameraDidChangeTrackingState:) і показувати відповідну інструкцію.
Прискорення виявлення площин
Площини виявляються із затримкою. ARPlaneDetection.horizontal знаходить підлогу за 2–4 секунди при хорошому освітленні. Якщо користувач намагається розмістити об’єкт раніше — промах. Часте рішення: робити plane detection опціональним і додавати raycast проти ARMeshAnchor з LiDAR — на iPhone 12 Pro+ це дає точність влучення ~1 см без очікування. Використання LiDAR-сумісних пристроїв забезпечує в 2 рази швидшу детекцію площин порівняно зі звичайними камерами. Порівняння: raycast забезпечує в 1.4 разу більш стабільні результати, ніж застарілий hitTest.
Оклюзія без LiDAR
Окклюзія працює тільки з LiDAR. ARView.environment.sceneUnderstanding.options з .occlusion — виключно на пристроях з LiDAR (Pro-серія з iPhone 12). На iPhone без LiDAR об’єкт завжди поверх реального світу. Потрібно чікати ARWorldTrackingConfiguration.supportsSceneReconstruction(.mesh) при старті і деградувати gracefully: відключати окклюзію та використовувати напівпрозорі тіні.
Налаштування Image Tracking
ARImageTrackingConfiguration з maximumNumberOfTrackedImages = 4 — для маркерного AR. Референсні зображення завантажуємо з ARReferenceImage з фізичним розміром. physicalWidth критичний — ARKit використовує його для обчислення дистанції та масштабу. Невірний розмір = об’єкт висить не там де треба.
let referenceImage = ARReferenceImage(
cgImage,
orientation: .up,
physicalWidth: 0.15 // 15 см у реальному світі
)
config.trackingImages = [referenceImage]
Використання Face Tracking
ARFaceTrackingConfiguration працює тільки на пристроях з TrueDepth-камерою (Face ID). Доступно 52 blend shape коефіцієнти через ARFaceAnchor.blendShapes — від .jawOpen до .eyeBlinkLeft. На цьому будуємо віртуальні примірки, AR-аватари та Liveness Detection.
func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
guard let faceAnchor = anchors.first as? ARFaceAnchor else { return }
let jawOpen = faceAnchor.blendShapes[.jawOpen]?.floatValue ?? 0
// Керуємо анімацією персонажа
}
Підвищення продуктивності AR-додатку
ARKit + RealityKit навантажують GPU та CPU одночасно. Інструменти діагностики: Xcode Reality Composer Pro для прев’ю сцени, GPU Frame Capture для аналізу draw calls, Metal System Trace в Instruments для діагностики GPU bubbles.
Типові вузькі місця:
- USDZ з > 100K полігонів на середнячку — просідання до 30 FPS.
- Кілька ModelEntity без інстансингу копіюють геометрію в пам’яті.
- arView.renderOptions — відключення
.disableDepthOfFieldта.disableMotionBlurдає +15% FPS на старих пристроях.
Порівняння конфігурацій трекінгу
| Тип трекінгу | Конфігурація | Вимоги до пристрою | Точність |
|---|---|---|---|
| World Tracking | ARWorldTrackingConfiguration | A9+ (iPhone 6s+) | Висока (з LiDAR ~1 см) |
| Image Tracking | ARImageTrackingConfiguration | A9+ | Залежить від маркера |
| Face Tracking | ARFaceTrackingConfiguration | TrueDepth (Face ID) | 52 blend shapes |
| Body Tracking | ARBodyTrackingConfiguration | A12+ (iPhone XS+) | Скелет 19 joints |
Оптимізації продуктивності
| Оптимізація | Приріст FPS | Умови |
|---|---|---|
| Вимкнути Depth of Field | +15% | iPhone XR і старші |
| Вимкнути Motion Blur | +10% | Всі пристрої |
| Використовувати instancing | -50% пам’яті | Багато однакових об’єктів |
Інтеграція ARKit
Як оптимізувати ARKit?
Покрокова інструкція з розміщення об’єкта
- Запустити сесію
ARWorldTrackingConfigurationз увімкненимplaneDetectionтаenvironmentTexturing. - Дочекатися події
session(_:didAdd:)або виконати raycast з центру екрану. - Створити
ARAnchorз результатом raycast. - Завантажити USDZ-модель через
ModelEntity.loadModel. - Створити
AnchorEntityз прив’язкою до anchor. - Додати
AnchorEntityу сцену.
Приклад коду розміщення по raycast
let query = arView.makeRaycastQuery(
from: arView.center,
allowing: .estimatedPlane,
alignment: .horizontal
)
if let query = query,
let result = arView.session.raycast(query).first {
let anchor = ARAnchor(name: "placed-object", transform: result.worldTransform)
arView.session.add(anchor: anchor)
let modelEntity = try! ModelEntity.loadModel(named: "model.usdz")
let anchorEntity = AnchorEntity(anchor: anchor)
anchorEntity.addChild(modelEntity)
arView.scene.addAnchor(anchorEntity)
}
Основні етапи інтеграції ARKit
Що входить у роботу з інтеграції ARKit
- Аудит вимог та сумісності пристроїв (цільові моделі, наявність LiDAR).
- Проектування AR-архітектури з graceful деградацією на старих пристроях.
- Розробка ядра AR: сесія, anchors, розпізнавання площин/зображень/облич.
- Інтеграція 3D-контенту: конвертація в USDZ, налаштування PBR-матеріалів.
- Тестування на фізичних пристроях (мінімум 5 моделей).
- Оптимізація продуктивності під цільові пристрої.
- Передача вихідного коду, документація та навчання команди.
Строки інтеграції
Базова інтеграція ARKit з розміщенням USDZ-об’єкта по площині: 3–5 днів. Image tracking з маркерами та накладанням контенту: 4–7 днів. Комплексне рішення з face tracking, оклюзією LiDAR та кастомними шейдерами Metal: 3–6 тижнів. Вартість базової інтеграції ARKit починається від $2000. Вартість повноцінного AR-рішення може сягати $15 000 залежно від складності 3D-контенту та вимог до підтримуваних пристроїв. При замовленні комплексної інтеграції ви заощаджуєте до 30% порівняно з поетапною розробкою.
Ми займаємося iOS-розробкою понад 5 років (5+ років досвіду на ринку) і виконали 20+ AR-проєктів для різних галузей. Наша команда має сертифікацію Apple та гарантію якості на всі проєкти. Якщо ви хочете впровадити доповнену реальність у свій додаток, зв'яжіться з нами — оцінимо проєкт і запропонуємо оптимальне рішення. Оцініть свій проєкт на предмет AR-можливостей — отримайте консультацію нашого інженера.







