Use glTF binary (.glb) for models – it is Three.js’s native, best-supported format. Compress textures to KTX2/Basis Universal and geometry with Draco or meshopt. Avoid raw OBJ/FBX/uncompressed PNG textures in production builds; they load slower and bloat memory.
At a glance
| Fact | Value | Source |
|---|---|---|
| Typical model vertex data memory | 1-20 MB | threejs.org |
| Uncompressed 1024×1024 texture memory | 4-6 MB | threejs.org |
| Compressed textures need GPU support | extension must be enabled | developer.mozilla.org |
For meshes, glTF (.glb, binary) is the format Three.js and its loaders are built around: it stores geometry, materials, animations and node hierarchy in one file that maps directly onto Three.js’s scene graph, so it needs far less conversion work than OBJ, FBX or COLLADA. Export from Blender, Maya or an AI 3D generator straight to .glb where the tool allows it.
When publishing, Playgama MCP lets an AI agent create the game, upload builds and covers, and publish a sandbox link.
Why not just use OBJ or raw PNG/JPG textures?
They work, but cost more at load time. A model’s vertex data alone can run 1 to 20 MB in memory, and Three.js does not clean these resources up automatically, so unused geometry and textures you forget to dispose of stay resident. Textures are worse: a single uncompressed 1024×1024 texture takes 4 to 6 MB once expanded for the GPU, and compressed image formats like JPG/PNG don’t help network transfer as much as people expect once the shader has to decompress them.
For textures, use KTX2 containers with Basis Universal supercompression – they transcode to whatever compressed GPU format the browser’s hardware supports, since WebGL requires the relevant compressed-texture extension to be enabled first and support varies by device. For geometry, apply Draco or meshopt compression on the glTF export to shrink vertex data before it ever reaches the browser.
Check total download weight against whatever portal you publish to; most set a practical ceiling around tens of MB before mobile players drop off, so compress before adding more assets rather than after.
Sources
- WebGL API – MDN
- Compressed texture formats – MDN
- Cleanup – Three.js Manual
- Three.js Primitives
- BinomialLLC/basis_universal
- KTX File Format Specification 2.0
- Playgama MCP
Related questions
Should I ship uncompressed textures for a small prototype?
For a quick prototype it’s fine, but switch to KTX2/Basis before publishing – uncompressed textures multiply GPU memory use and slow load on mobile browsers.
Does Three.js support FBX or OBJ models?
Loaders exist for both, but glTF is the format the ecosystem and most export pipelines target natively, so it needs the least conversion and extra tooling.
Last updated: 30 September 2026