Реализация 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 точек MediaPipe vs 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 неделя. Стоимость рассчитывается индивидуально.







