On a work computer the model spins smoothly, but on the buyer's phone it takes a minute to load and stutters. The cause is almost always in one of three places.
Three causes
- A heavy file: slow to download over mobile internet.
- Not enough GPU memory: the model doesn't fit in the phone's memory, so the browser stutters or reloads the page.
- Too many draw calls: the GPU gets hundreds of small jobs instead of a few large ones.
Textures: file size and memory are different things
JPEG and PNG are compact on disk, but the GPU unpacks them in full. A 4096×4096 texture takes about 64 MB of memory, however small the file. KTX2 stays compressed even in GPU memory, which is why textures for the web and AR are converted to it.
Each doubling of a texture's side means four times the memory. Going from 4096 to 2048 saves three quarters. On a phone screen the difference isn't visible for most parts.
Geometry
A dense mesh means more vertices, a heavier file and more work for the GPU. Hidden parts are removed, the mesh is simplified where it won't show, and the geometry itself is compressed with Meshopt or Draco.
Draw calls
Every separate part with its own material is a separate job for the GPU — a draw call. Hundreds of them slow down even a powerful phone. Parts are merged and materials are reduced to a few.
How to check
- Open the model on an average phone, not a flagship.
- Look at the file size and the load time over mobile internet.
- Open the model in a technical viewer such as gltf.report: it shows the triangle count, texture sizes and materials.
For scenes with many objects there's one more technique — levels of detail; see LOD.
What it looks like in practice
- Hilbert: AR runs on a phone, and the house has to stay in memory alongside the camera and tracking. The models were moved to Meshopt and KTX2 — in engine memory they take three to four times less than the original GLBs.
- RP Grand: materials reduced to three — body, interior, glass — to keep draw calls minimal; the full car is around nine thousand triangles.
- Getic: textures compressed for the engine and a lighter geometry version for mobile traffic.
Common mistakes
- Looking only at file size and ignoring memory.
- 4096 textures on every small part.
- Hundreds of separate materials.
- Testing only on a work computer.
Checklist
- File size.
- Texture sizes and the KTX2 format.
- Geometry: hidden parts removed, Meshopt or Draco compression.
- A few materials, not hundreds.
- A test on an average phone.


