Стандарт заданий IKEA Place, але сьогодні користувачі вимагають більшого: меблі мають стояти строго горизонтально, коректно відкидати тіні, реалістично взаємодіяти з освітленням приміщення і не провалюватися в підлогу на пристроях без LiDAR. Ми реалізували подібні проєкти для замовників з каталогами до 1000 позицій — і знаємо кожну деталь. Наш досвід 5+ років і понад 10 реалізованих проєктів гарантують, що диван не провалиться в підлогу, а шафа стане рівно біля стіни.
Чи обов'язковий LiDAR для якісної примірки?
На пристроях без LiDAR ARKit покладається лише на монокулярну картинку. Похибка виявлення горизонтальних площин може досягати 10 см, а occlusion об'єктів не працює — віртуальні меблі завжди малюються поверх реальних. LiDAR вирішує обидві проблеми: точність plane detection знижується до 2 см (у 5 разів точніше), і через sceneReconstruction вмикається коректне перекриття. Ось порівняння:
| Параметр | Без LiDAR | З LiDAR |
|---|---|---|
| Точність площини | до 10 см | до 2 см |
| Occlusion | ні | так |
| Розміщення при слабкій текстурі | погано | відмінно |
| Час релокалізації | 5-15 сек | 2-5 сек |
Точність plane detection за відсутності LiDAR знижується в 5 разів, що критично для великогабаритних меблів — шафа може стояти з помітним нахилом.
Підготовка 3D-моделей для AR: типові помилки
Це часто недооцінювана частина проєкту. Каталог з 500 позицій, кожна з яких — GLTF з коректними PBR-матеріалами, правильними метаданими про реальний розмір і точкою прив'язки строго на нижній площині об'єкта.
Типові проблеми при отриманні моделей від клієнта:
- Pivot point в центрі об'єкта — стіл летить у повітрі на висоті свого центру
- Масштаб у сантиметрах замість метрів — диван розміром з кухню
- Текстури в окремих файлах (не вбудовані в GLB) — модель завантажується без текстур
- Y-up vs Z-up невідповідність — стіл лежить на боці
Конвертація та нормалізація каталогу через Blender Python API (batch script) або через Cesium ion / Sketchfab API — залежить від масштабу каталогу. ARKit документація рекомендує дотримуватися єдиної системи координат.
Детальніше про підготовку моделей
Для пакетної обробки 500+ файлів використовується Blender Python API. Скрипт автоматично:
- Переміщує pivot point в центр нижньої габаритної рамки
- Приводить масштаб до метрів (1 unit = 1 meter)
- Конвертує текстури в KTX2 для оптимального завантаження
- Встановлює правильну орієнтацію осей (Y-up)
Результат — каталог у форматі GLB, готовий до імпорту в Xcode або Android Studio.
Розміщення об'єкта: від raycast до стабільної позиції
Стандартний pipeline використовує ARRaycastQuery, але для меблів є специфіка: об'єкти великі, і користувач хоче точно розмістити не в центрі кімнати, а біля конкретної стіни. Це означає:
- Виявлення і горизонтальної, і вертикальної площини одночасно
- Snapping до стін — об'єкт «прилипає» на відстані 15 см від вертикальної площини
- Collision detection між об'єктами — два дивани не повинні перекриватися
Collision detection в RealityKit — CollisionComponent з ShapeResource.generateBox(size:). ARView.scene.subscribe(to: CollisionEvents.Began.self) — подія зіткнення. При перетині — візуальне підсвічування об'єкта червоним і заборона розміщення.
Як автоматизувати конвертацію 500 моделей?
Ми використовуємо batch-скрипт на Blender Python API, який за годину обробляє до 200 моделей. Це скорочує час підготовки каталогу з тижнів до 2–3 днів. Економія часу — до 70% порівняно з ручним редагуванням кожної моделі. Вартість конвертації каталогу з 500 моделей — від $2000.
Розробка мобільного AR: реалістичне освітлення
ARWorldTrackingConfiguration.environmentTexturing = .automatic — ARKit будує HDR environment map з камери. Це працює, але із затримкою: перші 5-10 секунд об'єкт освітлюється некоректно. Для меблевого додатку, де користувач бачить об'єкт одразу після розміщення — це помітно.
Покращення: AREnvironmentProbeAnchor з ручним розміщенням в центрі кімнати. Дозволяє примусово оновити environment map за вимогою (наприклад, по кнопці «оновити освітлення»).
Мультиоб'єктне розміщення та збереження сцени
Користувач розставляє кілька предметів, хоче зберегти результат і повернутися пізніше. ARSession.getCurrentWorldMap(completionHandler:) — зберігає стан ARWorldMap з anchor'ами в Data. При наступному запуску: ARWorldTrackingConfiguration.initialWorldMap = savedMap, ARKit релокалізується і відновлює позиції об'єктів.
Працює тільки в тому ж приміщенні при достатньому освітленні. Релокалізація займає 3-15 секунд.
Порівняння способів збереження:
| Технологія | Платформа | Час відновлення | Обмеження |
|---|---|---|---|
| ARWorldMap | iOS | 3–15 с | Тільки те ж приміщення |
| Cloud Anchors | iOS/Android | 5–30 с | Потрібен інтернет |
| Ручне збереження позицій | Обидві | Миттєво | Нема прив'язки до реального світу |
Скріншот результату для шарінгу — ARView.snapshot(saveToHDR:completion:) + UIActivityViewController.
Що входить в роботу
- Підготовка та конвертація 3D-моделей (до 500 позицій)
- Інтеграція ARKit (iOS) / ARCore (Android) з plane detection, raycast, колізіями
- Налаштування LiDAR occlusion та scene reconstruction
- Реалізація snapping до стін і колізій між об'єктами
- Збереження та завантаження сцени (ARWorldMap / Cloud Anchors)
- Тестування на 10+ реальних пристроях
- Публікація в App Store і Google Play (документація, метадані)
- Навчання команди замовника роботі з інструментарієм
Чому обирають нас?
- 5+ років досвіду в AR-розробці
- Понад 10 реалізованих проєктів з віртуальним розміщенням меблів
- Команда з 3+ інженерів та 1 3D-художника
- Терміни: базова AR-примірка від $5000 за 5-7 днів
Строки
Базове розміщення одного об'єкта з plane detection — 5-7 днів. Мультиоб'єктне з collision, snapping до стін, збереженням сцени — 3-5 тижнів. Підтримка LiDAR occlusion — плюс 1 тиждень. Конвертація каталогу моделей оцінюється окремо за обсягом. Вартість розраховується індивідуально за підсумками аналізу вашого каталогу та технічного завдання. Зв'яжіться з нами для детального обговорення вашого проєкту — ми підготуємо технічне завдання та комерційну пропозицію. Отримайте консультацію прямо зараз.







