Розміщення 3D-об'єктів у AR: від raycast до стабілізації

Реалізація AR-розміщення 3D-об'єктів на площині Ми в TrueTech регулярно вирішуємо цю задачу для замовників з меблевого та ритейл-сектору. Поставити 3D-модель на виявлену площину стабільно — не один вечір роботи. Об'єкт має стояти рівно при русі камери, не «пливти» при зміні освітлення, адекватно

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Розміщення 3D-об'єктів у AR: від raycast до стабілізації
Середній
~2-3 дні

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Реалізація AR-розміщення 3D-об'єктів на площині

Ми в TrueTech регулярно вирішуємо цю задачу для замовників з меблевого та ритейл-сектору. Поставити 3D-модель на виявлену площину стабільно — не один вечір роботи. Об'єкт має стояти рівно при русі камери, не «пливти» при зміні освітлення, адекватно масштабуватися і не потопати в поверхні. Ми пропонуємо реалізацію під ключ: від підбору формату моделі до фінальної інтеграції у ваш застосунок. В одному з проєктів для меблевого ритейлу ми зіткнулися з проблемою «провалювання» об'єкта в площину при швидкому русі камери. Рішенням стало використання ARAnchor з динамічним зміщенням по нормалі на 2 мм — це виключило Z-боротьбу при будь-якому освітленні.

Формати 3D-моделей та оптимізація для AR

Стандарт для мобільного AR — USDZ (iOS/RealityKit) та GLB/GLTF (ARCore/крос-платформенно). Типова помилка: брати модель без оптимізації і намагатися завантажити її в AR. Полігональність 500k трикутників, текстури 4096×4096 без mip-mapping — гарантований FPS провал на пристроях до A13.

Цільові параметри для мобільного AR:

Тип об'єкта Полігони Текстури Розмір GLB
Невеликий предмет (стілець, світильник) до 30k 1024×1024 до 5 МБ
Середній об'єкт (диван, стіл) до 80k 2048×2048 до 15 МБ
Великий (комплект меблів, кухня) до 200k 2048×2048 до 40 МБ

Компресія: KTX2 + Basis Universal для GLB, HEIC-текстури в USDZ. У RealityKit — Reality Composer Pro (Xcode 15+) для запікання PBR-матеріалів прямо в .reality формат. Для Android використовуйте Android Studio з ARCore SDK 1.30+ для конвертації GLB.

Чому Raycast кращий за hitTest для розміщення?

З ARKit 4+ та ARCore 1.18+ кращий метод визначення точки розміщення — Raycast. Він повертає ARRaycastResult з target: .existingPlaneGeometry або .estimatedPlane. existingPlaneGeometry використовує вже детектовану геометрію — точність у 2 рази вища, ніж у застарілого hitTest. Apple рекомендує raycast як основний метод (див. документацію ARKit). Більше того, hitTest був оголошений застарілим в iOS 14, і його використання може призвести до відхилення застосунку через вимоги App Store Review Guidelines (розділ 4.2: мінімальна функціональність).

Приклад на Swift:

let query = arView.makeRaycastQuery( from: arView.center, allowing: .existingPlaneGeometry, alignment: .horizontal ) let results = arView.session.raycast(query) if let first = results.first { placeEntity(at: first.worldTransform) } 

Для ARCore — Session.createRaycastQuery() + Frame.raycast() дає більш стабільний результат на краях площин.

Як стабілізувати об'єкт після розміщення?

Після першого розміщення об'єкт не повинен «гуляти» при русі камери. Стандартний підхід — прив'язка до AnchorEntity через ARAnchor:

let anchor = ARAnchor(transform: worldTransform) arView.session.add(anchor: anchor) let anchorEntity = AnchorEntity(anchor: anchor) anchorEntity.addChild(modelEntity) arView.scene.addAnchor(anchorEntity) 

Явний ARAnchor фіксує позицію, і об'єкт не оновлюється разом з уточненням площини. Без цього він зміщується перші 10–15 секунд сесії, поки ARKit уточнює геометрію. Додатково можна застосувати фільтрацію Калмана до позиції якоря, якщо об'єкт все ж тремтить.

Тіні та фізичне освітлення

AR-об'єкт без тіні виглядає «літаючим». У RealityKit тінь створюється встановленням castsShadow = true у entity — contact shadow рендериться автоматично. У SceneKit для цього потрібен directional light з castsShadow = true. Важно: при використанні environment texturing (ARKit, A12+) об'єкти отримують відбиття реального оточення. Металеві поверхні відбивають інтер'єр — без цього хромований предмет виглядає пластиковим. Увімкніть environmentTexturing = .automatic у ARWorldTrackingConfiguration.

Які жести підтримуються для маніпуляції об'єктом?

Після розміщення користувач повинен мати можливість переміщати, обертати та масштабувати об'єкт. У RealityKit жести додаються в один рядок:

arView.installGestures([.translation, .rotation, .scale], for: entity) 

Для кастомного управління використовуйте UILongPressGestureRecognizer з безперервним raycast — це дає більший контроль над чутливістю. При реалізації обертання обов'язково обмежте вісь Y: використовуйте simd_quatf(angle:axis:) лише навколо вертикальної осі, інакше об'єкт «завалюється» при неточному жесті. На Android аналогічно: GestureRecognizer з Sceneform або ArGestureRecognizer в ARCore.

Як тестувати AR-розміщення на різних пристроях?

Критично протестувати на кількох поколіннях iPhone та Android-пристроїв. Наприклад, на iPhone XR (A12) raycast працює стабільно, але environment texturing споживає додаткову пам'ять — може просідати FPS при високополігональних моделях. Рекомендуємо використовувати TestFlight для iOS і внутрішнє тестування Google Play для Android — це дозволяє виявити проблеми з глибиною (Z-fighting) на різних версіях ARCore.

Що входить в роботу

Етап Результат
Аналіз моделі та вимог Вибір формату, оптимізація полігонів і текстур
Розробка розміщення Raycast, anchor, стабілізація, тіні
Реалізація жестів Переміщення, обертання, масштабування
Тестування на пристроях Перевірка стабільності на різних версіях iOS/Android
Інтеграція в застосунок Документація, доступ до репозиторію, навчання команди

Наш досвід — понад 20 успішних проєктів у мобільній AR-розробці. Зв'яжіться з нами для оцінки вашого проєкту — реалізуємо під ключ за 2–3 тижні. Отримайте консультацію без зобов'язань.