Mobile VR app development for Google Cardboard

NOVASOLUTIONS.TECHNOLOGY is engaged in the development, support and maintenance of iOS, Android, PWA mobile applications. We have extensive experience and expertise in publishing mobile applications in popular markets like Google Play, App Store, Amazon, AppGallery and others.
Development and support of all types of mobile applications:
Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 1 of 1 servicesAll 1735 services
Mobile VR app development for Google Cardboard
Complex
from 2 weeks to 3 months
FAQ
Our competencies:
Development stages
Latest works
  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1052
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    445

Mobile VR App Development (Google Cardboard)

Google Cardboard is the most accessible path to VR: cardboard housing for a few dollars, smartphone inside. For developers this means: stereoscopic rendering, head tracking via IMU, and strict performance constraints — all on standard mobile hardware without specialized VR processor.

Google Cardboard SDK

After Google open-sourced Cardboard SDK in 2021, it became the official path for Cardboard apps on iOS and Android. SDK provides:

  • Lens distortion correction (each housing has distortion profile, scanned via QR code)
  • Head tracking via IMU fusion (accelerometer and gyroscope data)
  • Eye matrices for correct per-eye projection
  • Trigger button handling (magnetic button in cardboard Cardboard)

Unity integrationcom.google.cardboard UPM package. After connecting:

// CardboardHeadTracker read via Cardboard.SDK
void Update() {
    Cardboard.SDK.UpdateScreenParams();
    // Head position/rotation applied automatically via CardboardCamera component
}

Native Android integration via CardboardHeadTracker and CardboardLensDistortion:

// Initialization
headTracker = CardboardHeadTracker.create();
lensDistortion = CardboardLensDistortion.create(encodedDeviceParams, width, height);

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

Stereoscopic Rendering: Split-screen

Screen splits in half. Left half for left eye, right for right eye. Each half renders with slight camera offset (IPD — interpupillary distance, ~63–65mm). Difference between two images creates stereo effect.

In Unity this is managed via CardboardCamera component with two render textures. Each texture renders separately, then barrel distortion correction applies.

Critical performance issue: two-pass rendering doubles GPU load. On average 2020 smartphone at 1080p this is 30–40 FPS without optimizations. Solutions:

  • Foveated rendering — reduce resolution at screen edges (non-central area seen through lenses)
  • Single Pass Instanced Rendering in Unity (both eyes rendered in one draw call)
  • Reduce render texture resolution to 0.7–0.8 of screen resolution

Head Tracking and Motion Sickness

Motion sickness occurs when visual latency > 20ms. IMU runs at 200–1000Hz, but rendering at 60Hz. To compensate use ATW (Asynchronous TimeWarp) — reproject last frame accounting for head orientation change between render and screen output.

In Cardboard SDK ATW is implemented automatically via additional compositing pass. Ensure Cardboard.SDK.UpdateScreenParams() is called at Update() start, not less frequently.

Scene design recommendations to reduce motion sickness:

  • No acceleration-based locomotion (teleportation preferred)
  • Stable horizon or cockpit-reference (cabin, interior) reduces discomfort
  • Don't scale world relative to player at runtime

Input: Button and Gaze

Basic Cardboard has one button. All interaction builds on:

  • Gaze input — cursor follows gaze, activation by gaze fixation (dwell time, usually 1.5–2 sec)
  • Trigger button — selection confirmation, teleportation

Gaze reticle (cursor) renders in world space at fixed distance from camera. Raycast from each eye center determines object under cursor:

// 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-scanning Device Profile

On first launch user scans QR code from Cardboard housing. SDK loads lens distortion profile for specific housing. Without this step distortion is incorrect — image looks deformed.

Cardboard SDK stores profile in SharedPreferences / NSUserDefaults after scanning. Add first screen instruction with QR icon and explicit "Rescan device" button in settings.

Workflow

Define app type: passive experience (360 video, tour) or interactive (game, learning).

Set up Cardboard SDK: Unity package or native integration, projection configuration.

Develop scene accounting for VR constraints: no acceleration locomotion, gaze input.

Optimize performance: Single Pass Instanced, foveated rendering, LOD.

Test on devices across price segments, assess comfort.

Timeline Estimates

Simple passive VR experience (360 content, basic gaze navigation) — 1–2 weeks. Interactive VR app with game mechanics, multiple scenes, full UI — 2–3 months.