AI Віртуальна примерка меблів в інтер'єрі у мобільних додатках
Поставити віртуальний диван в кімнату користувача — це три пов'язані завдання: детектувати горизонтальну площину підлоги, розташувати 3D-модель з правильним масштабом та освітленням, і зробити так, щоб меблі виглядали частиною кімнати, а не наклеєною картинкою.
Детектування площини та позиціонування
На iOS це ARKit + ARPlaneDetection.horizontal. ARKit 4+ детектує площину за 1–3 секунди на добре текстурованій підлозі. Проблема виникає з однорідними поверхнями: білий килим, темний паркет без малюнка — детектування займає довше або взагалі не спрацьовує.
let config = ARWorldTrackingConfiguration()
config.planeDetection = [.horizontal]
config.environmentTexturing = .automatic // для реалістичного відбиття матеріалів
sceneView.session.run(config, options: [.resetTracking, .removeExistingAnchors])
// Delegate
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
guard let planeAnchor = anchor as? ARPlaneAnchor,
planeAnchor.alignment == .horizontal else { return }
DispatchQueue.main.async {
self.placeFurnitureNode(on: planeAnchor, parentNode: node)
}
}
На Android — ARCore Plane.Type.HORIZONTAL_UPWARD_FACING. Логіка аналогічна, але детектування на Android менш стабільне через фрагментацію залізо: Qualcomm Snapdragon працює відмінно, MediaTek пристрої середнього сегмента часто дають дрижання площини.
3D-моделі меблів: формати та оптимізація
Каталожні моделі зазвичай приходять як OBJ або FBX з десятками тисяч полігонів і 4K текстурами. Для мобільного AR це неприйнятно — рендеринг просідатиме на пристроях 2020–2021 років.
Оптимізація для мобільного AR:
| Параметр | Вихідник | Цільовий AR-варіант |
|---|---|---|
| Полігони | 50 000–200 000 | 5 000–15 000 |
| Текстури | 4K (4096×4096) | 1K–2K (1024–2048) |
| Матеріали | PBR multi-layer | PBR single-layer |
| Формат | OBJ/FBX | USDZ (iOS), glTF (Android) |
На iOS рідний формат — USDZ, який рендерится через RealityKit або SceneKit. На Android — glTF 2.0, рендерится через Filament (використовується в Sceneform та ARCore) або користувацький OpenGL/Vulkan рендер.
Освітлення: чому меблі виглядають "пластиковими"
Головна причина нереалістичного виду — невідповідність освітлення AR-об'єкта та реального оточення. ARKit вирішує це через environmentTexturing = .automatic: система будує environment map з камери та використовує його для Image-Based Lighting (IBL) на PBR-матеріалах.
На RealityKit це працює автоматично. На SceneKit явно передайте environment map:
sceneView.scene.lightingEnvironment.contents = sceneView.session.currentFrame?.capturedImage
sceneView.scene.lightingEnvironment.intensity = 1.0
Для просунутого варіанту використовуйте ARDirectionalLightEstimate — ARKit оцінює напрямок основного джерела світла в сцені. Тінь від меблів падає в тому ж напрямку, що й тіні від реальних об'єктів — це робить примерку переконливою.
Жести: переміщення, поворот, масштаб
Користувач повинен рухати меблі по підлозі, обертати та змінювати розмір. Стандартний набір жестів:
- Pan gesture — переміщення: ray cast з точки дотику на ARPlane, переміщаємо ноду в точку перетину
- Rotation gesture (два пальці) — поворот навколо вертикальної осі
- Pinch gesture — масштаб, але з обмеженим діапазоном (0,5x–2,0x реального розміру)
@objc func handlePan(_ gesture: UIPanGestureRecognizer) {
let location = gesture.location(in: sceneView)
// Ray cast на ARPlane, не на весь світ
let results = sceneView.raycastQuery(from: location,
allowing: .existingPlaneGeometry,
alignment: .horizontal)
.flatMap { sceneView.session.raycast($0) }
if let result = results.first {
furnitureNode.simdWorldPosition = result.worldTransform.columns.3.xyz
}
}
AI-компонент: підбір меблів під інтер'єр
"AI" у назві послуги — рекомендаційна система: додаток аналізує колірну гаму кімнати через AVCaptureSession та пропонує варіанти меблів, які стилістично збігаються. Технічно — кластеризація домінуючих кольорів через k-means або готовий API (Google Vision Dominant Colors), потім матчинг за кольоровими атрибутами в каталозі.
Складніший варіант — CoreML-модель, що класифікує стиль інтер'єру (скандинавський, лофт, класика) та фільтрує каталог за сумісними колекціями.
Робочий процес
Аудит каталогу: формати моделей, кількість SKU, потрібна оптимізація геометрії та текстур.
Реалізація AR-шару: детектування площини, розташування моделі, жести управління.
Налаштування освітлення та тіней для реалістичного виду.
Інтеграція з каталогом: завантаження моделей по мережі або передзавантаження набору популярних позицій.
Опціонально: AI-підбір за кольоровою гамою інтер'єру.
Оцінка часу
Базова AR примерка для iOS з готовими USDZ-моделями — 1 тиждень. Кроссплатформна реалізація з оптимізацією каталогу, жестами управління та кольоровим підбором — 2–4 тижні. Вартість залежить від розміру каталогу та необхідності конвертації 3D-моделей.







