1. Audit before touching anything
Open the file and get the numbers: triangle count, mesh count, material count, texture dimensions and formats, extensions used, and total GPU memory. Optimising before measuring is how people spend a week halving a triangle count that was never the bottleneck. The GLB inspector on this site does the basic version of this for free.
2. Fix the geometry
Retopologise or decimate to a budget chosen from how large the object appears on screen, not from a general sense of "lighter". Weld duplicate vertices. Delete what is never visible — interior components inside a sealed housing are pure cost. Bake fine detail into a normal map rather than carrying it as triangles.
3. Fix the materials and draw calls
Merge meshes sharing a material. Atlas small textures together. Cut the material count, which usually means deciding that four subtly different greys are one grey. Keep parts separate only where something needs to address them individually — a configurator needs its options as distinct meshes, so optimisation and interactivity have to be planned together rather than in sequence.
4. Compress the textures
The biggest single win. Resize to what the screen actually needs, then encode:
- KTX2 / Basis Universal stays compressed in GPU memory, roughly a quarter of the raw footprint. This is the correct answer for anything texture-heavy or mobile-facing. It needs a transcoder served alongside the model, which is a small one-off setup cost.
- WebP decodes natively in every current browser and needs no transcoder, but expands to full RGBA in GPU memory once decoded. Fine when the texture budget is modest, wrong when it is not.
The distinction matters and is widely missed: WebP shrinks the download, KTX2 shrinks the download and what the GPU holds.
5. Compress the geometry
Draco compresses harder; Meshopt decodes faster and its decoder is tiny. On a page where time-to-first-frame matters more than bytes, Meshopt usually wins. Both are glTF extensions and both need their decoder wired into the loader — a step that silently breaks a model if it is missed, which is a common cause of "the file works in Blender but not on the site".
6. Verify against the original
Side by side, at the size it will actually be seen, on the devices it will actually be seen on. An optimisation that changes the product's appearance is a failure regardless of what it did to the file size.