Разработка мобильного VR-приложения (Google Cardboard)

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

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

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

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

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

Google Cardboard — самый демократичный способ попасть в VR: картонный корпус за несколько долларов, смартфон внутри. Для разработчика это значит: стереоскопический рендеринг, трекинг головы через IMU, и жёсткие ограничения по производительности — всё это делается на обычном мобильном железе без специализированного VR-процессора. Мы разрабатываем VR-приложения под Cardboard на iOS и Android с использованием Swift и Kotlin. Опыт нашей команды — 5 лет в мобильной VR-разработке, более 20 проектов. Ниже разберём ключевые технические задачи и их решения.

Как избежать motion sickness в Google Cardboard?

Motion sickness возникает, когда visual latency > 20ms. IMU работает на 200–1000Hz, но рендеринг на 60Hz. Для компенсации используется ATW (Asynchronous TimeWarp) — перепроецирование последнего кадра с учётом новой ориентации головы за время между рендером и выводом на экран. В Cardboard SDK ATW реализован автоматически. Убедитесь, что Cardboard.SDK.UpdateScreenParams() вызывается в начале каждого Update(), а не реже.

Рекомендации по Scene Design для снижения укачивания:

  • Нет acceleration-based locomotion (телепортация предпочтительнее)
  • Постоянный горизонт или cockpit-reference (кабина, интерьер) снижают дискомфорт
  • Не масштабируйте мир относительно игрока в рантайме

Стереоскопический рендеринг: split-screen

Экран делится пополам. Левая половина — для левого глаза, правая — для правого. Каждая половина рендерится с небольшим смещением камеры (IPD — interpupillary distance, ~63–65mm). Разница между двумя изображениями создаёт стереоэффект.

В Unity это управляется через CardboardCamera компонент с двумя рендер-текстурами. Каждая текстура рендерится отдельно, затем применяется barrel distortion correction.

Критичная проблема производительности: two-pass rendering удваивает нагрузку на GPU. На среднем смартфоне при 1080p это 30–40 FPS без оптимизаций. Решения:

  • Foveated rendering — снижение разрешения по краям экрана (не центральная область видна через линзы)
  • Single Pass Instanced Rendering в Unity (рендеринг обоих глаз за один draw call). Этот метод в 2 раза быстрее two-pass.
  • Снижение разрешения рендер-текстур до 0.7–0.8 от экранного разрешения
Метод FPS (1080p, средний смартфон) Качество изображения
Two-pass 30–40 Полное разрешение
Single Pass Instanced 55–60 Полное разрешение
Foveated + Single Pass 60+ Снижено по краям

Head tracking и интеграция SDK

После того как Google открыл исходники Cardboard SDK, он стал официальным путём для Cardboard-приложений на iOS и Android. SDK предоставляет:

  • Дисторция-коррекцию для линз (каждый корпус имеет свой lens distortion profile, сканируемый QR-кодом)
  • Head tracking через фьюжн данных акселерометра и гироскопа (IMU fusion)
  • Eye matrices для корректной проекции на каждый глаз
  • Trigger button обработку (магнитная кнопка в картонном Cardboard)

Unity интеграция — com.google.cardboard UPM пакет. После подключения:

void Update() {
    Cardboard.SDK.UpdateScreenParams();
    // Позиция/ротация головы применяется автоматически через CardboardCamera компонент
}

Нативная Android интеграция через CardboardHeadTracker и CardboardLensDistortion:

headTracker = CardboardHeadTracker.create();
lensDistortion = CardboardLensDistortion.create(encodedDeviceParams, width, height);
headTracker.getPose(monotonic_time_nanos, target_time_nanos, outEyeFromHead);

Ввод: кнопка и Gaze

У базового Cardboard одна кнопка. Всё взаимодействие строится на:

  • Gaze input — курсор следует за взглядом, активация по фиксации взгляда (dwell time, обычно 1.5–2 сек)
  • Trigger button — подтверждение выбора, телепортация

Gaze reticle рендерится в world space на фиксированном расстоянии от камеры. Raycast из центра каждого глаза определяет объект под курсором:

void Update() {
    Ray ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward);
    if (Physics.Raycast(ray, out RaycastHit hit, maxDistance, interactableLayer)) {
        gazeTarget = hit.collider.GetComponent<IGazeable>();
        gazeTarget?.OnGazeEnter();
        gazeTimer += Time.deltaTime;
        if (gazeTimer >= DWELL_TIME) {
            gazeTarget?.OnGazeActivate();
            gazeTimer = 0f;
        }
    } else {
        gazeTarget?.OnGazeExit();
        gazeTimer = 0f;
    }
}

QR-сканирование профиля устройства

При первом запуске пользователь сканирует QR-код с корпуса Cardboard. SDK загружает lens distortion profile для конкретного корпуса. Без этого шага искажение некорректно — изображение выглядит деформированным. Cardboard SDK сохраняет профиль в SharedPreferences / NSUserDefaults после сканирования. Добавьте на первый экран инструкцию с иконкой QR и явную кнопку «повторно отсканировать устройство» в настройках.

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

  • Исходный код приложения с комментариями
  • Документирование API и ключевых компонентов
  • Инструкция по QR-сканированию для пользователей
  • Поддержка при публикации в App Store и Google Play
  • Тестирование на 5+ устройствах разных ценовых сегментов

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

  1. Анализ: определение типа приложения (пассивный опыт или интерактивный), целевой аудитории и требований к производительности.
  2. Настройка Cardboard SDK: подключение Unity пакета или нативная интеграция, конфигурация проекции.
  3. Разработка сцены: моделирование с учётом VR-ограничений, реализация gaze input.
  4. Оптимизация: Single Pass Instanced, foveated rendering, LOD, тестирование FPS.
  5. Тестирование на устройствах разных ценовых сегментов, оценка комфорта.
  6. Деплой: подготовка билдов, загрузка в App Store Connect и Google Play Console.

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

Простой пассивный VR-опыт (360-контент, базовая навигация взглядом) — 1–2 недели. Интерактивное VR-приложение с игровой механикой, множеством сцен и полным UI — 2–3 месяца.

Оцените ваш проект: свяжитесь с нами для предварительного расчёта сроков и стоимости. Закажите разработку мобильного VR-приложения под Google Cardboard — получите консультацию инженера с 5-летним опытом.

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