BEFORE YOU SHIP
GLB compression and viewer compatibility
A GLB file extension does not guarantee that every application can load its contents. Check the extensions used by the output and test your destination.
Match the settings to your loader
| Setting | Loading requirement |
|---|---|
| Conservative | Geometry quantization support; texture transforms may also be used. |
| Standard / high Meshopt | EXT_meshopt_compression decoder support. |
| KTX2 textures | KHR_texture_basisu support and a Basis transcoder. |
| WebP textures | EXT_texture_webp support and WebP decoding. |
These requirements can combine. The result panel reports compatibility information for your output. Our preview includes decoders, so a successful preview does not prove that your own application has them configured.
The presets use geometry quantization by default. Disabling it can remove the geometry quantization requirement, but Meshopt or converted textures still need their corresponding loaders. Check the extensions reported for the actual result.
Using Three.js
For Meshopt-compressed geometry, register the decoder with GLTFLoader.setMeshoptDecoder(). For KTX2 textures, configure KTX2Loader, detect renderer support and attach it with setKTX2Loader(). Serve the matching transcoder files with your application and use the documentation for your Three.js version.
GLTFLoader documentation · KTX2Loader documentation
Example: the original loads, but the Smaller file export does not
Keep original textures and export the same source twice: once with Conservative and once with Smaller file. If only the second file fails in your application, check the reported extensions and the loader error before changing geometry settings. This comparison narrows the problem to a changed loading requirement; it does not prove that every failure is a missing decoder.
For an EXT_meshopt_compression result in Three.js, register MeshoptDecoder before loading. Then retry that same exported file. Re-exporting with compression off is a fallback when the destination cannot be changed, at the cost of a potentially larger download.
Example: original textures work, but KTX2 fails after deployment
Keep the geometry settings fixed and compare original textures with KTX2. For a Three.js application, check that KTX2Loader is attached and detectSupport has run. Inspect the requests for basis_transcoder.js and basis_transcoder.wasm. A 404 response, or an HTML application page returned at those URLs, points to asset delivery rather than texture quality.
Retest the same KTX2 output after fixing the loader or asset path, including on a target mobile device. A file that loads in this site’s preview has passed this viewer’s setup; your production viewer must still satisfy its own loading requirements.
Names, extras and scene behavior
The three preservation toggles are enabled by default. Leave them enabled when your application finds objects or materials by name or reads extras. They do not promise identical node indices, hierarchy, animation samples or custom attributes. Optimization can merge or reorganize data and change precision.
Test selection, material changes, animation playback, morph targets and object transforms in the actual application. Preserve extras is not a way to preserve arbitrary custom extensions.
Input restrictions
This service rejects Draco-compressed input, external resources and unsupported required extensions. Unknown optional extensions may be discarded. Export an uncompressed, embedded-resource GLB from the source application when necessary.
For the engine's extension list and optimization behavior, see upstream gltfpack documentation. The web service applies additional validation and resource limits.
Load gltfpack models in Three.js →
Open the optimizer ↗