How to optimise 3D models for mobile AR
Mobile AR applications face strict performance constraints. Devices must simultaneously run SLAM tracking, render the camera feed, composite virtual objects, and maintain 60fps. 3D models that perform acceptably on desktop fail on mobile hardware due to limited GPU fillrate, memory bandwidth, and thermal throttling.
The primary bottleneck is not raw polygon count but rather the combination of draw calls, texture memory, and vertex attribute complexity. A 50k triangle model with 10 materials performs worse than a 200k triangle model with 2 materials. Mobile GPUs excel at processing large batches of simple geometry but struggle with material switches and texture lookups.
Polygon reduction should target 10k-30k triangles per model for foreground objects and 2k-5k for background elements. Use quadric error metrics for decimation rather than uniform subdivision. Tools like OptimiXR compress preserve silhouette edges and UV seams while aggressively simplifying flat surfaces. Avoid decimating below the point where normal maps can compensate for lost detail.
Texture resolution directly impacts memory usage and load times. Mobile AR frameworks typically allocate 512MB-1GB for application textures. A single 4K texture consumes 64MB uncompressed or 16MB with ASTC compression. Resize base color maps to 1024x1024 and normal maps to 512x512. Metallic and roughness maps can share channels in a single 512x512 texture.
Format selection matters for mobile deployment. GLB is required for WebXR and most AR SDKs. Ensure vertex attributes use quantized positions (16-bit normalized integers) rather than full float32 precision. This halves vertex buffer size with no perceptible quality loss at AR viewing distances. Enable Draco compression for static models to reduce network transfer size by 60-80%.
Material complexity affects fragment shader cost. Mobile GPUs have limited ALU throughput and texture units. Use standard PBR materials without custom shader graphs. Disable features like clearcoat, sheen, and transmission unless absolutely required. Combine texture maps where possible: pack occlusion, roughness, and metallic into RGB channels of a single texture.
Lighting and shadows are expensive on mobile. Bake ambient occlusion and indirect lighting into vertex colors or lightmaps. Avoid real-time shadows for AR objects. If shadows are required, use blob shadows (simple projected quads) rather than shadow mapping. Disable specular highlights for distant objects by reducing metallic values.
Testing on target hardware is non-negotiable. Profiling in Unity or Unreal on desktop does not predict mobile performance. Deploy to actual devices and measure frame time using platform profilers. ARCore and ARKit provide frame budget visualizations. Aim for 12ms frame time to maintain 60fps with headroom for tracking overhead.
File size impacts initial load time and app store distribution limits. Mobile networks have variable bandwidth. A 50MB model takes 10-30 seconds to download on 4G. Compress models to under 5MB for foreground assets and under 1MB for background elements. Use progressive loading: display low-poly proxies immediately while high-detail versions stream in.
Vertex welding reduces memory usage by eliminating duplicate vertices. Models exported from CAD tools often have disconnected vertices at UV seams and smoothing group boundaries. Welding with a 0.001 unit threshold typically reduces vertex count by 20-40% without visual artifacts. Enable this in OptimiXR compress advanced settings.
Avoid common mistakes: do not export models with subdivision surface modifiers enabled, do not include hidden geometry or construction helpers, do not use 8K textures for small props, do not ignore draw call counts. Each material is a separate draw call on mobile. Merge materials where possible or use texture atlases.
The workflow for mobile AR optimization: export from DCC tool at target resolution, convert to GLB, compress with 50-70% reduction, test on device, iterate. Do not optimize prematurely in the modeling phase. Preserve high-resolution source files and apply compression as a deployment step. This allows reuse of assets across platforms with different performance budgets.