Реалізація AR-примерки очок та аксесуарів
Очки — один з найкращих кандидатів для AR-примерки: об'єкт має фіксовану форму, крепится до конкретних точок лиця (переносиця, вуха) та не вимагає деформації mesh під тіло. Але «добре сидящі» очки в AR — це правильний pivot, коректний масштаб під IPD користувача та стабільна анімація при русі голови. Без цих деталей примерка розчаровує, а не допомагає.
ARKit Face Tracking як основа
ARFaceTrackingConfiguration — єдиний варіант для face AR на iOS. Вимагає iPhone X чи новіше (TrueDepth камера). Повертає ARFaceAnchor з:
-
transform— позиція та орієнтація лиця в мировых координатах -
geometry— 1220-точечна сітка лиця -
blendShapes— 52 коефіцієнта для виразів (моргання, посмішка, підйом брів)
Для очок використовуємо конкретні точки face mesh: переносиця (~vertex 9 в ARKit mesh), скроні. Pivot point моделі очок — строго на переносиці. При правильному pivot оправа «сидить» на лиці без додаткових корректировок позиції.
// Привязуємо модель очок до face anchor
let faceAnchorEntity = AnchorEntity(.face)
let glassesEntity = try! ModelEntity.load(named: "glasses.usdz")
glassesEntity.position = SIMD3(0, 0.005, 0.065) // тонка корректировка Y, Z
faceAnchorEntity.addChild(glassesEntity)
arView.scene.addAnchor(faceAnchorEntity)
Масштабування під реальний розмір лиця
Стандартна модель очок в USDZ — для «середнього» лиця. Реальні лиця різні. Два підходи:
Автоматичний. Вимірюємо ширину лиця через відстань між лівим та правим ухом в ARFaceAnchor.geometry. ARKit дає ці точки в метрах — порівнюємо з еталонною шириною оправи, вичисляємо коефіцієнт масштабування. Застосовуємо до ModelEntity.scale.
Ручний. Ползунок «розмір» в UI. Простіше в реалізації, гірше UX.
Відстань між зрачками (IPD) через eye tracking доступна на iPad Pro (ARKit, ARFaceAnchor.leftEyeTransform, rightEyeTransform). На iPhone face tracking IPD напрямку не вимірює, але вичисляється приблизно через face geometry.
Наушники, сережки, головні убори
Ті ж принципи, інші anchor-точки:
Наушники/сережки → leftEarTransform, rightEarTransform з ARFaceAnchor. ARKit надає ці трансформи напрямку.
Головні убори → ARFaceAnchor.transform (центр голови) + смещение по Y вгору. Потрібно враховувати нахил голови — іначе шапка «їде» при запрокидуванні голови.
Сонячні очи з лінзами. Лінзи з tinted/gradient матеріалом — через PBR з transmission та tint color. В RealityKit — .PhysicallyBasedMaterial з opacityThreshold та blending. Дзеркальні лінзи — environment texture reflection.
Android: лицевий трекінг без TrueDepth
ARCore AugmentedFace (Pixel 3+, Samsung Galaxy S10+, інші з depth sensor) — аналог ARKit face tracking, але з меньшою точністю mesh (468-point MediaPipe проти 1220 ARKit). Для очок достатньо — ключові точки переносиці та скроні стабільні.
Пристрої без depth sensor: MediaPipe Face Landmark через ML Kit. Працює на RGB-камері, точність нижче на русі, але для статичного кадру — прийнятно.
Продуктивність та Memory
На iPhone старше XR одночасний face tracking + високополігональна модель + environment texturing стресує GPU. Металічні оправи з reflection вимагають environment probe — додаткові draw calls.
Оптимізація: LOD (level of detail) для очок — повна модель при статичному кадрі, спрощена при русі. Текстури 512×512 для дрібних деталей оправи — достатньо для мобільного екрана.
Терміни
Face tracking + базова AR-примерка однієї моделі очок — 5-7 днів. Галерея оправ, масштабування під лиця, шаринг — 2-3 тижні. Підтримка Android через ARCore AugmentedFace — плюс 1 тиждень. Вартість розраховується індивідуально.







