File size is not the same as performance
A 2 MB GLB that renders at 12 fps and a 20 MB GLB that renders at 60 fps are both entirely possible. Compression fixes download time. This tool fixes frame time — and the two problems have almost nothing in common.
The thing that actually costs you frames is draw calls. Every separate mesh primitive is a command the CPU has to issue to the GPU, complete with state changes. A furniture model exported from a CAD tool as 400 separate parts issues 400 draw calls per frame, and no amount of Draco compression will help.
What each step does
Join meshes — merges primitives that share a material and attribute layout into one. This is the single biggest real-time win and often takes a scene from hundreds of draw calls to a handful.
GPU instancing — when the same mesh appears many times (bolts, chairs, trees), converts it to EXT_mesh_gpu_instancing so the GPU draws all copies in one call.
Material palette — merges materials that differ only by base colour into a single atlased material, which unlocks joining meshes that could not previously be merged.
Deduplicate — exporters routinely write the same accessor, texture or material twice. Merging them cuts memory and enables further merging downstream.
Prune — deletes nodes, materials, textures and accessors nothing references. Pure win, never changes appearance.
Weld — merges co-located duplicate vertices, shrinking index buffers and improving cache behaviour.
Flatten — collapses nested nodes whose only job is to hold a transform.
Reorder — rearranges indices and vertices so the GPU's post-transform vertex cache hits far more often. Typically a 5–15% GPU-side improvement for free.
Sparse accessors — stores mostly-zero data (common in morph targets) compactly.
Normals — generates vertex normals where an exporter forgot them, which is why some models render faceted or black.
Order matters
These steps are not independent. Welding must happen before joining, or merged meshes carry duplicate vertices. Instancing must happen before flattening, because flattening destroys the repeated structure instancing detects. Reordering must be last, after the final index buffers exist. The tool enforces this order — the toggles only decide which steps run.
Two presets
- Real-time — everything on. Use when preparing an asset for a web viewer or engine.
- Safe — deduplicate, prune, weld and reorder only. Nothing structural changes, so node names and hierarchy survive intact.
Choose Safe if your application looks up objects by name, or animates specific nodes. Joining and flattening will break that.
What it will not do
Joining only merges meshes that share a material. A model with 40 genuinely different materials will still issue at least 40 draw calls — the fix there is texture atlasing, which is a modelling job, not an automated one. The step-by-step results table tells you honestly how much each step achieved.
Privacy
Every transform runs locally in your browser. Nothing is uploaded, stored or logged.
Tiny Online Tools







