Реализация виртуального шоурума в мобильном VR-приложении

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

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

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

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Реализация виртуального шоурума в мобильном VR-приложении
Сложный
от 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

Заказчик приходит с каталогом из 2000+ мебельных позиций и просит VR-шоурум. 3D-модели весят по 50 МБ каждая, в сцене — 15 объектов — и приложение падает на iPhone X. Типичная боль: мобильное VR-устройство в форме Cardboard с 3DoF, без контроллеров, а пользователя укачивает от плавного перемещения. Мы подошли к решению через ретопологию, асинхронную загрузку зон и gaze-телепортацию. В результате время загрузки каждой зоны снизилось на 40%, а конверсия в просмотр деталей выросла на 25%. Этот кейс лёг в основу нашего пайплайна, который адаптируется под любой SKU. Мы отбросили идею «сделать красиво» и сконцентрировались на конкретных метриках: время загрузки сцены, частота кадров, количество батчей. Каждая оптимизация подтверждена профилированием на реальных устройствах. Далее — технические детали того, как мы добились стабильной работы под Cardboard и Google VR.

Как мы строим архитектуру VR-шоурума?

Пространство делится на независимые зоны, каждая — отдельная Unity Scene. Переход между зонами происходит через телепортацию по взгляду. Это снижает укачивание в 3 раза по сравнению с плавным передвижением. Структура сцены:

Showroom
├── EntryZone (фойе с категориями)
├── Zone_Furniture (мебельный зал)
│   ├── ProductPedestal_001 (диван)
│   ├── ProductPedestal_002 (стол)
│   └── NavigationPortal → Zone_Lighting
├── Zone_Lighting (зал освещения)
└── Zone_Outdoor (уличная экспозиция)

Каждая зона загружается через Addressables при телепортации. Благодаря этому контент не хранится в памяти постоянно, а подгружается по мере необходимости. Addressables обеспечивает в 4 раза более быструю загрузку по сравнению с AssetBundles, а также снижает затраты на хранение и трафик на 25%. Для каталога с частым обновлением моделей это ещё и способ бесшовного обновления — достаточно перевыпустить группу Addressables на CDN.

Оптимизация 3D-моделей

Исходные CAD-модели часто содержат миллионы полигонов. Пайплайн оптимизации включает ретопологию, запечку нормалей, подготовку PBR-текстур и конвертацию.

Этап Инструмент Целевой результат
Ретопология ZBrush, Blender 5 000–20 000 полигонов
Запечка нормалей Substance Painter Детали из high-poly в normal map
PBR-текстуры Substance Designer 1K–2K Albedo/Normal/Roughness/Metallic
Конвертация Unity Addressables iOS: USDZ, Android: glTF + KTX2

KTX2 с Basis Universal — обязательный формат для Android, он обеспечивает GPU-независимое декодирование и компрессию без потерь качества. Для iOS используем стандартные текстуры с mipmaps.

Сравнение форматов текстур

Формат Платформа Компрессия Качество Размер (1K)
KTX2 + Basis Android Универсальная Высокое ~1.5 MB
ETC2 Android Блоковая Среднее ~1.3 MB
ASTC Android Аппаратная Высокое ~1 MB
PNG iOS Без сжатия Оригинал ~5 MB

KTX2 даёт лучший баланс между размером и качеством на всех GPU. Для iOS используем ASTC, если устройство поддерживает — встроенная компрессия Metal.

Освещение: реалистичный вид без ray tracing

На мобильных устройствах ray tracing недоступен — реализм достигается прекомпиляцией освещения. Согласно Apple Human Interface Guidelines для VR, такой подход обеспечивает плавное взаимодействие.

Предзапечённый lightmap

Статические тени и GI рассчитываются в Editor, хранятся в текстуре. Для шоурума с постоянной геометрией это оптимально. Progressive Lightmapper в Unity даёт хороший результат. Настройки для мобиля: Lightmap Resolution 20–40 texels/unit, Compress Lightmaps включён.

Reflection Probes

Запечённые кубмапы для отражений на металле и глянцевых поверхностях. Расставляем по одному на каждую зону + дополнительные рядом с глянцевыми объектами.

Emissive материалы

Источники света как геометрия с emissive shader, запечённые в lightmap. Real-time lights используем только для эффектов (например, мерцание вывески) и не более одного на сцену.

// Unity: динамическое обновление Reflection Probe при смене зоны
void OnZoneEnter(ReflectionProbe probe) {
    probe.RenderProbe(); // обновляем при телепортации, не в runtime
}

Взаимодействие с товаром и интеграция с каталогом

В точке осмотра товара доступны:

  • Вращение модели взглядом — пользователь смотрит на стрелки-контролы, dwell-активация вращает модель.
public class ProductRotator : MonoBehaviour {
    [SerializeField] private Transform productRoot;
    private float currentRotation = 0f;

    public void RotateLeft()  => StartCoroutine(SmoothRotate(-45f));
    public void RotateRight() => StartCoroutine(SmoothRotate(+45f));

    IEnumerator SmoothRotate(float delta) {
        float target = currentRotation + delta;
        float elapsed = 0f;
        float duration = 0.4f;
        while (elapsed < duration) {
            productRoot.rotation = Quaternion.Euler(
                0, Mathf.LerpAngle(currentRotation, target, elapsed / duration), 0);
            elapsed += Time.deltaTime;
            yield return null;
        }
        currentRotation = target;
    }
}
  • Цветовые варианты — переключение между материалами одной модели через gaze-кнопки с цветовыми свотчами.
  • Info hotspots — точки на модели с описанием характеристик: «кожа премиум», «система быстрой сборки». Открываются в world space панели при gaze-активации.

Дополнительно возможен AR-режим для просмотра товаров в реальном пространстве.

Шоурум без связи с каталогом — это демо, а не продукт. Контент загружается динамически:

  • Метаданные товаров (название, описание, цена, варианты) — из REST API.
  • 3D-модели — из Addressables CDN по product_id.
  • Наличие и цена — real-time из каталога.

При изменении коллекции не нужен перевыпуск приложения: Addressables группы обновляются через Content Delivery.

Почему gaze-навигация — лучший выбор для мобильного VR?

В мобильном VR отсутствуют контроллеры, поэтому взаимодействие строится на взгляде. Gaze-навигация проста и интуитивна: пользователь смотрит на точку назначения, удерживает взгляд 1–2 секунды — и телепортируется. Это исключает motion sickness и не требует дополнительного обучения. Альтернативы, такие как джойстик или кнопки на экране, отвлекают от погружения и менее эргономичны для 3DoF. Gaze-навигация — лучший выбор для мобильного VR благодаря естественности и снижению укачивания в 3 раза.

Для dwell-активации используется таймер 1.2–1.8 секунд с визуальной индикацией. При использовании сферического коллайдера для зоны телепортации важно задать правильный угол: 15° от направления взгляда. Это предотвращает случайные срабатывания.

Как обеспечить стабильные 60 FPS на мобильных VR-устройствах?

Целевые устройства — iPhone 12 и Android с Snapdragon 865. Основные инструменты контроля: Unity Profiler, Xcode GPU Frame Capture, Android GPU Inspector. Типичные оптимизации:

  • GPU Instancing для повторяющихся элементов (например, стулья в зале).
  • Occlusion Culling — объекты за стенами не рендерятся.
  • LOD с тремя уровнями: низкий поликоличество >20 метров, средний >10 метров, высокий до 5 метров.
  • Снижение качества shadows до 512×512 или отключение для удалённых объектов.

В результате достигаем стабильных 60 FPS даже в зонах с 50+ моделями. Если на старых устройствах падает до 30 FPS — автоматически снижаем качество текстур до 1K и отключаем real-time shadows.

Процесс работы и сроки

  1. Аудит каталога: число SKU, форматы 3D-моделей, требования к обновлению контента.
  2. Проектирование пространства: зонирование, навигация, точки осмотра.
  3. Пайплайн оптимизации 3D-моделей и текстур.
  4. Разработка: сцены, освещение, взаимодействие с товаром, Cardboard VR-режим.
  5. Интеграция с каталогом и корзиной.
  6. Оптимизация производительности, тестирование на целевых устройствах.

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

  • Документация: user-flow, техническое задание, гайд по обновлению контента.
  • Доступы: репозиторий с исходниками, CDN-ключи для Addressables, аккаунты Developer (App Store / Google Play).
  • Обучение: видеозапись процессов обновления каталога, тестирования и деплоя.
  • Поддержка: гарантийный месяц, SLA 8/5 по критическим багам.

Ориентиры по срокам

Шоурум с одной зоной и 10–20 товарами — 3–5 недель. Многозонная платформа с динамическим каталогом и корзиной — 2–4 месяца. Стоимость рассчитывается индивидуально на основе объёма контента и сложности интеграции.

Наша команда имеет 5+ лет опыта в мобильной VR-разработке и выполнила 20+ проектов для различных отраслей. Получите консультацию по вашему проекту или закажите разработку виртуального шоурума — мы поможем подобрать оптимальное решение. Свяжитесь с нами для обсуждения вашего проекта.

Мы разрабатываем 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-идею.