June 2025 · 5 min read
Ask “how big is too big for a GLB?” and the answer depends entirely on where and how you are using it. A 50 MB file might be acceptable in a desktop configurator with a visible loading screen; the same file will reliably break AR on a customer's phone and fail the Shopify upload limit. The useful question is platform-specific: what is the ceiling for my use case?
These are the recommended file sizes and triangle targets for common 3D use cases on the web, based on platform documentation and real-world production experience:
| Platform | Recommended file size | Triangle / vertex target | Notes |
|---|---|---|---|
| Shopify 3D viewer | < 5 MB | < 100k triangles | Hard upload limit ~15 MB; exceeding it causes slow load or upload failure |
| Shopify AR Quick Look (iOS) | < 5 MB | < 100k triangles | USDZ auto-generated from GLB; oversized models silently fail to launch AR |
| Google Scene Viewer (Android) | < 15 MB | < 100k triangles | Downloads GLB directly; unreliable above 8 MB on mid-range devices |
| iOS AR Quick Look (direct USDZ) | < 20 MB | < 100k triangles | Device-dependent; older iPhones struggle above 10–12 MB |
| Meta Quest / WebXR | < 50 MB | < 300k vertices | No enforced limit; memory budget is the practical ceiling |
| WebGL / Three.js (mobile target) | < 5 MB | < 150k triangles | No hard limit; mid-range mobile GPU and VRAM set the ceiling |
| WebGL / Three.js (desktop target) | < 20 MB | < 500k triangles | No hard limit; depends on GPU tier and acceptable load time |
The practical takeaway: if you are targeting mobile — and for e-commerce, you almost certainly are — optimise for the Shopify and mobile AR row, not the desktop row.
A 50 MB GLB on a desktop browser with a fast ethernet connection and a discrete GPU is inconvenient but survivable — a few seconds of load time, maybe a brief stutter on first render. On mobile, the same file:
The practical rule: optimise for your lowest-powered expected device. For most Shopify merchants, that is a 2–3 year-old mid-range Android — the type of device that accounts for the majority of mobile commerce traffic globally.
Almost all GLB bloat comes from three places:
Textures are almost always the biggest contributor. A single PNG texture at 4096×4096 pixels takes ~48 MB of GPU memory when expanded into VRAM — before mipmaps — and several megabytes on disk. Most product models include three to five texture maps: base colour, roughness/metalness, normal, emissive, and occlusion. At 4K resolution, that is 15–40 MB in the GLB file alone.
KTX2 with Basis Universal compression keeps textures compressed natively on the GPU, cutting texture data by 70–85% and VRAM usage by 4–6×. It is supported by all major web renderers and Shopify's viewer.
Analyze your texture footprint →
GLB files without Draco or Meshopt compression ship raw vertex data. A dense mesh with 500k triangles plus UV coordinates, normals, and tangents can be 30–40 MB in geometry data alone. Draco geometry compression, supported by Shopify's viewer, Three.js, Babylon.js and model-viewer, typically cuts this by 70–80% with no visible quality loss.
Models exported from CAD software, photogrammetry, or high-detail sculpts routinely carry 500k to 5M+ triangles. Web viewers need 30–150k for most use cases; geometry beyond that costs file size and GPU time with no visible benefit at typical viewing distances. Selective decimation removes the excess while protecting silhouettes and material boundaries.
Before touching the model, run it through MeshGrade's free analyzer. It reports the exact file size, triangle count, every texture with its resolution and format, estimated GPU memory, and whether Draco and KTX2 compression are already in place — all benchmarked against the platform targets above. You will see immediately what is heavy and which fix will make the biggest difference, so you do not spend time on changes that won't move the needle.
Send us the file and we'll return an optimized GLB — smaller, faster, and benchmarked against your target platform. Free quote, no commitment.
Draco/Meshopt geometry, KTX2 textures and clean decimation — without visible quality loss.
Optimized to load fast and render smoothly on phones, not just high-end desktops.
We protect silhouettes, UVs and materials so the model still looks like your model.