Mobile VR App Development for Virtual Tours

TRUETECH 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 1All 1734 services
Mobile VR App Development for Virtual Tours
Complex
from 2 weeks to 3 months
Frequently Asked Questions

Our competencies:

Development stages

Latest works

  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    858
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    743
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1160
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    1034
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    968
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    562

Imagine a user opening your VR app for virtual tours, putting on Cardboard, and finding themselves in the center of a virtual home tour. They look left – kitchen, right – living room, fixate on the TV – a spec sheet pops up. But the reality of mobile VR development is a fight for every millisecond of head tracking latency and managing dozens of high-resolution 360-degree panoramas. We design architecture where latency stays consistently below 20 ms, and content updates on the fly without an App Store release.

Ready to take on your project end-to-end: pin down the requirements, and we will propose the optimal stack – from Unity to native Metal or Vulkan. A typical tour with 10–15 scenes and navigation takes 2–3 weeks. Development cost starts from $3,000. We will evaluate your task within one day.

What Problems Do We Solve?

  • Head tracking latency in VR. We use native rendering (Metal on iOS, Vulkan on Android) with direct IMU access. In practice, latency stays below 20 ms – 3–5 times better than WebView.
  • Slow panorama loading. Preload adjacent scenes in the background, compress textures to 8K JPEG with mipmap support. Typical loading time savings: 40%.
  • Difficulty updating content. Integrate a CMS or config on CDN – new tours appear after editing, without re-certification in stores. Support budget savings: up to 50% (typically $5,000–$10,000 annually).

With 7+ years of experience and 50+ delivered projects, we guarantee stable operation on devices from iPhone SE to Galaxy S24.

Scene Graph Structure for a VR Tour

A tour is a graph. Each point (node) is a 360-degree panorama or 3D scene. The edges of the graph are transitions (hotspots). Data is stored in a JSON config:

View JSON config example
{
  "tour_id": "apartment_demo",
  "start_node": "living_room",
  "nodes": [
    {
      "id": "living_room",
      "type": "equirectangular",
      "media_url": "scenes/living_room_8k.jpg",
      "hotspots": [
        { "id": "to_kitchen", "target_node": "kitchen",
          "position": { "yaw": -45, "pitch": -10 },
          "label": "Kitchen" },
        { "id": "info_tv", "type": "info",
          "position": { "yaw": 20, "pitch": 5 },
          "content": "Samsung QLED 65\"" }
      ]
    }
  ]
}

The client loads the graph on startup and preloads media of adjacent nodes. For offline mode – cache selected tours with config version checking.

How to Choose the Renderer: WebView or Native?

Criteria WebView (Three.js) Native (Metal/Vulkan)
Head tracking latency 50–100 ms (depends on WebView) <20 ms (direct IMU access)
Cardboard VR support No Full
Content update speed Instant (server-side) Requires app update if engine changes
Performance Medium (WebGL) High (GPU optimization)
Development complexity Low (HTML/JS) High (Metal/Vulkan/Unity)

For full VR in Cardboard VR (see Google Cardboard on Wikipedia), native rendering is 3–5 times better in tracking quality. If VR is not required, WebView suffices and is faster to develop.

How to Ensure Smooth Transitions Between Scenes?

A hard jump between 360 scenes creates discomfort in VR. We use one of three approaches:

Transition type Description VR comfort Complexity
Fade to black Fade over 0.5 s, standard from Google VR Design Guidelines High Low
Fade + scale Scene shrinks/expands Medium Medium
Video transition Short "walk-through" clip High High

Teleportation via fade is standard for VR. On non-VR platforms we often use fade+scale, saving production time.

// Unity: coroutine for transition with fade
IEnumerator TransitionToScene(string targetNodeId) {
    yield return StartCoroutine(FadeOut(duration: 0.5f));
    LoadScene(targetNodeId);
    yield return StartCoroutine(FadeIn(duration: 0.5f));
}

Interactive Hotspots: Types and Implementation

Interactive hotspots in 3D space are implemented via raycasting from the gaze vector origin, combined with dwell-based activation requiring 1–2 seconds of sustained fixation. Supported types:

  • Navigation – transition to another node.
  • Info panel – popup card with text/photo/video.
  • Media – play video on a surface (e.g., TV in interior).
  • Link – open browser for external action (book, buy).

Hotspots are rendered in world space using billboarding techniques, where the hotspot plane continuously faces the camera via transform.LookAt() combined with apparent-size scaling to ensure constant visual dimension regardless of distance.

Integrating CMS for Content Updates Without a Release

Tours must update without re-submitting to app stores. We integrate an admin panel or store configs on CDN. The app loads the current graph on startup; for offline – caching with versioning. Support cost savings: up to 50% compared to frequent releases.

Deliverables

  • Architecture document with scene graph and hotspot types.
  • Source code with documentation and CI/CD.
  • Instructions for content updates via CMS or config.
  • Testing on 5+ real devices (iPhone 12, Galaxy S21, Pixel 6, etc.).
  • 3-month warranty on reported bugs.

Process

  1. Content audit – determine media type (photo/video/3D), number of scenes, update requirements.
  2. Design – create scene graph, choose renderer and transition scheme.
  3. Development – implement panorama rendering, head tracking, hotspot interaction, transitions.
  4. CMS integration – connect content update system without app store release.
  5. Testing – evaluate head tracking quality in Cardboard mode, performance on budget devices, using profiling tools like Xcode Instruments and Android GPU Inspector to ensure frame timing stays within 16 ms for 60 fps. We also employ GPU compute shaders for image processing and binary search optimization for gaze convergence calculations.

Estimated Timeline

  • Basic app for a single tour with photo panoramas and navigation hotspots: 2–3 weeks. Cost starts at $3,000.
  • Full platform with CMS, multiple hotspot types, offline mode, and Cardboard VR: 2–3 months. Typical investment $15,000–$30,000.

Contact us for an accurate estimate of your project. Book a consultation – we will help choose the optimal stack and offer transparent pricing.

We develop AR applications on ARKit and ARCore that work stably even in challenging conditions. Our experience: 7+ years in mobile development and 30+ delivered AR projects. Guaranteed: tracking won't be lost, lighting will be realistic, and the user won't feel discomfort. Certified Apple and Google developers.

Why does tracking get lost and how to fix it?

ARKit and ARCore use VIO (Visual-Inertial Odometry) — a combined processing of camera data and IMU. Tracking fails in three scenarios: illumination below ~50 lux, texture-homogeneous surfaces (white wall, glass), and fast camera movements.

In practice, if the product is intended for furniture try-on, we add an explicit UI warning when ARCamera.TrackingState.limited(.insufficientFeatures). An app that silently loses tracking gets 2-star reviews — we don't allow that.

Plane detection is configured via ARWorldTrackingConfiguration.planeDetection = [.horizontal, .vertical]. Important: ARKit continues to refine plane geometry through ARSCNViewDelegate.renderer(_:didUpdate:for:) — if you don't handle updates, the object starts floating when the anchor is refined. Our team solves this at the architecture stage, not during testing.

AR Foundation: cross-platform with nuances

Unity AR Foundation is an abstraction layer over ARKit and ARCore. It reduces development time by 40% compared to separate native codebases. But some features (e.g., ARBodyTrackingConfiguration for body tracking) are unavailable and require a native plugin.

For React Native and Flutter, direct AR Foundation is missing. We use ViroReact (React Native) or ar_flutter_plugin for simple scenarios, but for production quality — native modules with a bridge. Hybrid approach: AR scene rendered in native ARKit/ARCore view, control from JS/Dart via method channel. Included in our standard delivery.

Task iOS Android Cross-Platform
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 no unified SDK
Persistence (saving anchors) ARKit World Map ARCore Cloud Anchors

Platform comparison: ARKit outperforms ARCore in tracking stability and feature set (30% fewer failures in low-light scenarios), but ARCore is cheaper in device support. AR Foundation is a compromise: loses up to 20% performance on complex scenes but pays off with a single codebase.

Try-on: product fitting via AR

Fitting glasses, jewelry, cosmetics — a separate class of tasks. Here, face tracking is needed, not plane detection.

ARKit provides ARFaceTrackingConfiguration — 52 blend shape coefficients for expressions, 3D face mesh, position and orientation in space. Works only on devices with TrueDepth camera (iPhone with Face ID).

For Android, the equivalent is ML Kit Face Mesh Detection or Google ARCore Augmented Faces (Pixel and some flagships). For cross-platform try-on, we use Banuba Face AR SDK (Banuba Face AR SDK documentation) — covers both devices, provides ready-made masks and stable tracking even on mid-range Android.

Try-on quality critically depends on 3D product models. Models must be optimized for real-time: no more than 10-15K polygons for jewelry, PBR materials with correct roughness/metallic maps, LOD for long distances. Within our engagement, we provide ready-made optimization guides.

How to achieve realistic lighting in AR?

ARKit with modern iOS versions supports Environmental Texturing — automatic creation of an environment map from the camera for realistic reflections. Enabled via ARWorldTrackingConfiguration.environmentTexturing = .automatic. Without it, metallic and glass materials look plastic.

ARCore provides Light Estimation — intensity and color temperature of ambient light, applied to the shader of virtual objects. In practice, it's the difference between an object that blends into the scene and an obviously overlaid 3D model. We guarantee that the final image doesn't betray virtuality.

What's included

  • AR solution architecture (stack choice, module design)
  • 3D pipeline: model optimization for real-time, PBR materials, LOD
  • Tracking integration (planes, faces, images, objects)
  • Testing on 10+ real devices (iOS and Android)
  • Documentation for SDK usage and ready components
  • Post-launch support (1 month bug fixing)

Timeline and estimation

Simple AR scene with placing one 3D model on a plane — 1-2 weeks. Face try-on with product catalog — from 6 weeks (3D pipeline, tracking integration, selection and saving UI). Full AR shopping with cloud anchors and multiplayer — from 3 months. We'll estimate your project in 1 day — contact us to discuss your AR idea.