Размещение 3D-объектов в AR: от raycast до стабилизации

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

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

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

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    858
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    744
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1160
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1034
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    968
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    562

Реализация 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 недели. Получите консультацию без обязательств.

Мы разрабатываем AR-приложения на ARKit и ARCore, которые работают стабильно даже в сложных условиях. Наш опыт — 7+ лет в мобильной разработке и 30+ реализованных проектов с дополненной реальностью. Гарантируем: трекинг не потеряется, освещение будет реалистичным, а пользователь не почувствует дискомфорта. Сертифицированные разработчики Apple и Google.

Почему трекинг теряется и как это исправить?

ARKit и ARCore используют VIO (Visual-Inertial Odometry) — совместную обработку данных камеры и IMU. Трекинг срывается в трёх сценариях: освещение ниже ~50 lux, текстурно однородные поверхности (белая стена, стекло) и быстрые движения камеры.

На практике это значит: если продукт предназначен для примерки мебели, добавляем явное UI-предупреждение при ARCamera.TrackingState.limited(.insufficientFeatures). Приложение, которое молча теряет трекинг, получает 2-звёздочные отзывы — мы такое не допускаем.

Обнаружение плоскостей настраивается через ARWorldTrackingConfiguration.planeDetection = [.horizontal, .vertical]. Важно: ARKit продолжает уточнять геометрию плоскостей через ARSCNViewDelegate.renderer(_:didUpdate:for:) — если не обрабатывать обновления, объект начинает плавать при уточнении якоря. Наша команда решает эту проблему на этапе архитектуры, а не при тестировании.

AR Foundation: кросс-платформа с нюансами

Unity AR Foundation — слой абстракции поверх ARKit и ARCore. Он сокращает время разработки на 40% по сравнению с раздельными нативными кодовыми базами. Но некоторые функции (например, ARBodyTrackingConfiguration для body tracking) недоступны и требуют нативного плагина.

Для React Native и Flutter прямой AR Foundation отсутствует. Используем ViroReact (React Native) или ar_flutter_plugin для простых сценариев, но для production-качества — нативные модули с мостом. Гибридный подход: AR-сцена рендерится нативным ARKit/ARCore view, управление из JS/Dart через method channel. Входит в нашу стандартную поставку.

Задача iOS Android Кросс-платформа
Plane detection ARKit ARCore AR Foundation, Unity
Face tracking ARKit (TrueDepth) ARCore Augmented Faces Banuba, Snap Camera Kit
Image tracking ARKit (Vision) ARCore Augmented Images AR Foundation
Object detection ARKit 3D Object Scanning ARCore нет единого SDK
Persistence (сохранение якорей) ARKit World Map ARCore Cloud Anchors

Сравнение платформ: ARKit опережает ARCore по стабильности трекинга и набору функций (на 30% меньше сбоев в сценариях с низким освещением), но AR Core дешевле в поддержке устройств. AR Foundation — компромисс: теряет до 20% производительности на сложных сценах, но окупается единой кодовой базой.

Try-on: примерка товаров через AR

Примерка очков, украшений, косметики — отдельный класс задач. Здесь нужен face tracking, а не plane detection.

ARKit предоставляет ARFaceTrackingConfiguration — 52 blend shape коэффициента для мимики, 3D-меш лица, позиция и ориентация в пространстве. Работает только на устройствах с TrueDepth-камерой (iPhone с Face ID).

Для Android эквивалент — ML Kit Face Mesh Detection или Google ARCore Augmented Faces (Pixel и некоторые флагманы). Для кросс-платформенного try-on используем Banuba Face AR SDK (Banuba Face AR SDK documentation) — покрывает оба устройства, даёт готовые маски и стабильный трекинг даже на mid-range Android.

Качество try-on критически зависит от 3D-моделей товаров. Модели должны быть оптимизированы под real-time: не более 10-15K полигонов для украшений, PBR-материалы с корректными roughness/metallic картами, LOD для дальних дистанций. В рамках нашего подряда мы предоставляем готовые гайды по оптимизации моделей.

Как добиться реалистичного освещения в AR?

ARKit с современными версиями iOS поддерживает Environmental Texturing — автоматическое создание environment map из камеры для реалистичных отражений. Включается через ARWorldTrackingConfiguration.environmentTexturing = .automatic. Без этого металлические и стеклянные материалы выглядят пластиково.

ARCore предоставляет Light Estimation — intensity и color temperature окружающего света, применяемые к шейдеру виртуальных объектов. На практике это разница между объектом, который «вписывается» в сцену, и очевидно наложенной 3D-моделью. Мы гарантируем, что финальное изображение не выдаёт виртуальности.

Что входит в работу

  • Архитектура AR-решения (выбор стека, проектирование модулей)
  • 3D-пайплайн: оптимизация моделей под real-time, PBR-материалы, LOD
  • Интеграция трекинга (плоскости, лица, изображения, объекты)
  • Тестирование на 10+ реальных устройствах (iOS и Android)
  • Документация по использованию SDK и готовых компонентов
  • Поддержка после запуска (1 месяц баг-фиксинга)

Сроки и оценка

Простая AR-сцена с размещением одной 3D-модели на плоскости — 1–2 недели. Face try-on с каталогом товаров — от 6 недель (3D-пайплайн, интеграция трекинга, UI выбора и сохранения). Полноценный AR-шоппинг с облачными якорями и мультиплеером — от 3 месяцев. Оценим проект за 1 день — пишите, обсудим вашу AR-идею.