Розробка мобільного VR-додатку (Google Cardboard)

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

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Розробка мобільного VR-додатку (Google Cardboard)
Складний
від 2 тижнів до 3 місяців
Часті запитання

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

Етапи розробки

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Розроблення мобільного VR-додатку (Google Cardboard)

Google Cardboard — найдемократичніший шлях у VR: картонний корпус за кілька доларів, смартфон усередині. Для розробника це означає: стереоскопічний рендеринг, трекинг голови через IMU, і жорсткі обмеження продуктивності — все це на звичайному мобільному залізо без спеціалізованого VR-процесора.

Google Cardboard SDK

Після того як Google відкрив вихідні коди Cardboard SDK у 2021 році, він став офіційним шляхом для Cardboard-додатків на iOS та Android. SDK забезпечує:

  • Корекцію спотворення лінз (кожний корпус має свій lens distortion profile, відсканований QR-кодом)
  • Head tracking через IMU fusion (дані акселерометра та гіроскопа)
  • Eye matrices для правильної проекції на кожний глаз
  • Обробку trigger button (магнітна кнопка в картонному Cardboard)

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

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

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

// Ініціалізація
headTracker = CardboardHeadTracker.create();
lensDistortion = CardboardLensDistortion.create(encodedDeviceParams, width, height);

// У render loop
headTracker.getPose(monotonic_time_nanos, target_time_nanos, outEyeFromHead);

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

Екран ділиться пополам. Ліва половина — для лівого ока, права — для правого ока. Кожна половина рендерится з невеликим зміщенням камери (IPD — міжзрачкова відстань, ~63–65mm). Різниця між двома зображеннями створює стереоефект.

У Unity це керується через компонент CardboardCamera з двома рендер-текстурами. Кожна текстура рендерится окремо, потім застосовується корекція barrel distortion.

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

  • Foveated rendering — зменшення розрізнювальної здатності по краях екрана (не центральна область видна через лінзи)
  • Single Pass Instanced Rendering у Unity (рендеринг обох очей за один draw call)
  • Зменшення розрізнювальної здатності рендер-текстур до 0,7–0,8 від екранної

Head tracking та Motion Sickness

Motion sickness виникає, коли visual latency > 20ms. IMU працює на 200–1000Hz, але рендеринг на 60Hz. Для компенсації використовуйте ATW (Asynchronous TimeWarp) — перепроекціонування останнього кадру з урахуванням нової орієнтації голови між рендером та виводом на екран.

У Cardboard SDK ATW реалізований автоматично через додатковий compositing-pass. Переконайтеся, що Cardboard.SDK.UpdateScreenParams() викликається на початку Update(), а не рідше.

Рекомендації щодо Scene Design для зменшення укачування:

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

Ввід: кнопка та Gaze

У базового Cardboard одна кнопка. Вся взаємодія будується на:

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

Gaze reticle (курсор) рендерится у world space на фіксованій відстані від камери. Raycast з центру кожного ока визначає об'єкт під курсором:

// Unity: Gaze Raycaster
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;
        gazeTarget = null;
    }
}

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

При першому запуску користувач сканує QR-код з корпуса Cardboard. SDK завантажує lens distortion profile для конкретного корпуса. Без цього кроку спотворення некоректне — зображення виглядає деформованим.

Cardboard SDK зберігає профіль у SharedPreferences / NSUserDefaults після сканування. Додайте на перший екран інструкцію з іконкою QR та явну кнопку "повторно відсканувати пристрій" у налаштуваннях.

Робочий процес

Визначте тип додатку: пасивний досвід (360 відео, тур) або інтерактивний (гра, навчання).

Налаштуйте Cardboard SDK: пакет Unity або нативна інтеграція, конфігурація проекції.

Розроблюйте сцену з урахуванням VR-обмежень: без acceleration locomotion, з gaze input.

Оптимізуйте продуктивність: Single Pass Instanced, foveated rendering, LOD.

Тестуйте на пристроях різних цінових сегментів, оцініть комфорт.

Оцінка часу

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