Virtual Showroom Implementation in Mobile VR Applications
A virtual showroom is far more than a gallery of 3D product models. It is a spatial experience: users enter a virtual space, walk among exhibits, examine products from any angle, and interact with them directly. For mobile VR, this presents a significant challenge: delivering quality graphics while respecting mobile hardware limitations, and navigating interaction paradigms with 3DoF controllers in constrained environments.
Showroom Space Architecture
A VR showroom consists of "zones" between which users navigate via gaze-based interaction. Physical locomotion in mobile VR causes motion sickness—teleportation is the safer approach.
Scene structure:
Showroom
├── EntryZone (lobby with categories)
├── Zone_Furniture (furniture hall)
│ ├── ProductPedestal_001 (sofa)
│ ├── ProductPedestal_002 (table)
│ └── NavigationPortal → Zone_Lighting
├── Zone_Lighting (lighting hall)
└── Zone_Outdoor (outdoor exhibition)
Each zone is a separate Unity Scene, loaded via Addressables during teleportation. This enables detailed content without loading the entire showroom at startup.
3D Content: Balancing Quality and Performance
The primary technical challenge is rendering photorealistic products on mobile hardware. Original CAD furniture and equipment models contain millions of polygons. The optimization pipeline:
| Stage | Tool | Target Result |
|---|---|---|
| Retopology | ZBrush, Blender | 5,000–20,000 polygons |
| Normal baking | Substance Painter | Details from high-poly to normal map |
| PBR textures | Substance Designer | 1K–2K Albedo/Normal/Roughness/Metallic |
| Conversion | Unity Addressables | iOS: USDZ, Android: glTF + KTX2 |
KTX2 with Basis Universal compression is mandatory for mobile Android. Heterogeneous hardware requires GPU-agnostic texture compression.
Lighting: Photorealistic Rendering Without Ray Tracing
Mobile platforms lack real-time ray tracing. Realism is achieved through:
Pre-baked lightmaps — static shadows and global illumination are computed in the Editor and stored in textures. For a showroom with fixed geometry, this is optimal. Progressive Lightmapper in Unity delivers good results. Mobile settings: Lightmap Resolution 20–40 texels/unit, Compress Lightmaps enabled.
Reflection Probes — pre-baked cubemaps for reflections on metal and glossy surfaces. Place one per zone plus additional probes near reflective objects.
Emissive materials — light sources as geometry with emissive shaders, baked into lightmaps. No real-time lights on mobile.
// Unity: dynamic Reflection Probe update on zone transition
void OnZoneEnter(ReflectionProbe probe) {
probe.RenderProbe(); // update on teleportation, not runtime
}
Product Interaction
At the product examination point, users have access to:
Model rotation via gaze — users look at arrow controls, dwell activation rotates the model:
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;
}
}
Color variants — switch between materials of a single model via gaze buttons with color swatches.
Info hotspots — points on the model with characteristic descriptions: "premium leather", "fast assembly system". Activated by gaze, opening in world-space panels.
Catalog and Backend Synchronization
A showroom without catalog integration is a demo, not a product. Content loads dynamically:
- Product metadata (name, description, price, variants) — from REST API
- 3D models — from Addressables CDN by product_id
- Availability and pricing — real-time from catalog
When collections change, no app release is required: Addressables groups update via Content Delivery.
Add to Cart Button
The final interaction: from VR, users add products to a real shopping cart. The product info panel contains a CTA button with gaze activation. After adding—confirmation in 3D space (particle effect + sound), without exiting VR.
Deeplink from VR to cart browser/app is optional for purchase finalization outside VR mode.
Performance: Mobile Hardware Profile
Target: stable 60 FPS on devices from 2020+ (iPhone 12, Snapdragon 865). Control tools:
- Unity Profiler: CPU Time, GPU Time, Draw Calls, Batches
- Xcode GPU Frame Capture: iOS Metal analysis
- Android GPU Inspector: Vulkan/OpenGL ES analysis
Typical optimizations: GPU Instancing for repeated elements (rows of chairs), occlusion culling for off-screen rooms, three-tier LOD system.
Workflow
Catalog audit: number of SKUs, 3D model formats, content update requirements.
Space design: zoning, navigation, examination points.
3D model and texture optimization pipeline.
Development: scenes, lighting, product interaction, Cardboard VR mode.
Catalog and cart integration.
Performance optimization and testing on target devices.
Timeline Estimates
A single-zone showroom with 10–20 products and basic interaction: 3–5 weeks. Multi-zone platform with dynamic catalog, product variants, cart, and CMS: 2–4 months.







