← Back to Blog tutorials

Which engines actually load Draco-compressed GLB files

By BitSoul Team8/26/20265 min read2 views
Which engines actually load Draco-compressed GLB files

You compressed a GLB with Draco to shrink a 40MB prop into something a mobile build can actually load, and now one of your three target engines throws an import error, one silently ignores the extension, and only one loads it clean. Short answer: Unity loads Draco-compressed GLB files once you install a second package, Godot doesn't support the `KHR_draco_mesh_compression` extension at all in its core importer, and Unreal's built-in glTF importer rejects Draco geometry outright. None of the three majors give you Draco for free — each one makes you do something extra, or makes you drop it.

That's the gotcha nobody puts on the tin. Draco is a Khronos-ratified glTF extension, not an engine feature, so "does my engine support glTF" and "does my engine support Draco-compressed glTF" are two different questions with two different answers.

How much Draco actually saves on a game asset

Draco's whole pitch is geometry compression: it re-encodes vertex positions, normals, and UVs with a format that can cut mesh payload substantially, at the cost of reordering vertex and index data. That reordering is the part that bites you later — it makes the mesh less GPU-friendly on load, so most runtimes have to decode Draco back into a normal, re-quantized buffer before they can render it. Nothing is free: you're trading download size for CPU decode time.

The alternative gaining ground is `EXT_meshopt_compression` (the extension behind the `gltfpack` tool from the meshoptimizer project). It compresses less aggressively than Draco in the general case, but decodes straight into GPU-ready buffers, so load is faster even though the file might be a bit larger. Three.js (r122+) and Babylon.js (5.0+) both support it directly in their loaders. If your target is WebGL/WebGPU delivery specifically, meshopt is usually the safer default; Draco is the one you reach for when file size is the hard constraint and you control every engine in the pipeline.

For a game-ready prop like our Armoured 6x6 Transport — decent poly count, several material slots — Draco is the difference between an asset that streams fine over a flaky connection and one that stalls your loading screen. Whether your engine actually reads it back out is the part worth checking before you compress your whole library.

Getting Draco working per engine, and where it fails

Unity. `glTFast` is the import path most people land on for GLB, but it doesn't ship Draco decoding by default. Install `com.unity.cloud.draco` ("Draco for Unity") from Package Manager alongside glTFast, or you'll hit the exact error `Draco package needs to be installed in order to render draco compressed meshes` on any compressed file. Once both packages are present, decompression is automatic — the importer detects the extension and routes to it, no manual toggle. If your file still fails after installing, it usually means the package version and glTFast version drifted apart; check Package Manager shows both resolved, not just Draco listed.

Godot. Don't compress with Draco if Godot is anywhere in your pipeline. The core glTF importer doesn't implement `KHR_draco_mesh_compression`, and dropping a Draco-compressed GLB into the FileSystem dock gets you an import failure telling you the extension isn't supported and asking if a `GLTFDocumentExtension` plugin is missing — because it is, and there isn't an official one. A community GDExtension exists for this, but it's third-party and not something to depend on for a shipping pipeline. Export uncompressed or meshopt-compressed GLB for anything Godot needs to read.

Unreal Engine 5. The built-in glTF importer (Interchange, in current 5.x) imports standard GLB fine but doesn't decode Draco geometry — a Draco-compressed asset either fails the import or comes in with no mesh data, depending on version. If you need Draco specifically at runtime, the community `glTFRuntime` plugin has a `glTFRuntimeDraco` add-on for that path, but for the standard editor-time import used by most asset pipelines, the answer is the same as Godot: compress with something else, or ship two export variants.

If you're scripting exports with `gltf-transform` (the CLI most people already have for GLB post-processing), checking and switching compression is one command:

```bash
# inspect what's already in a GLB, then re-export with meshopt instead of Draco
gltf-transform inspect model.glb
gltf-transform meshopt model.glb model-meshopt.glb --level medium
```

That gives you a Godot- and Unreal-safe file without hand-editing the export settings in Blender every time.

| Engine | Native Draco import | What actually works |
|---|---|---|
| Unity (glTFast) | Yes, with add-on package | Install `com.unity.cloud.draco` alongside glTFast |
| Godot 4.x | No | Export meshopt or uncompressed; unofficial GDExtension exists |
| Unreal Engine 5 (Interchange) | No | Export meshopt or uncompressed, or use glTFRuntime + glTFRuntimeDraco for runtime loading only |
| Three.js / Babylon.js | Yes (both Draco and meshopt) | Set the decoder path once, works for either extension |

The gotcha that costs people the most time: none of this shows up until import, not export. Blender's glTF exporter will happily write a Draco-compressed GLB with zero warnings regardless of what engine you're targeting, because it has no idea what you're importing into. If your pipeline exports once and distributes to multiple engines — which is exactly the situation our KTX2 texture compression guide runs into for textures — you either standardize on the lowest common denominator (meshopt or uncompressed) or maintain per-engine export presets. There's no compression setting that's silently safe everywhere.

If you're already fighting a total asset-size budget rather than just Draco specifically, the constraints get tighter, not looser — see how far 35MB actually stretches in our Three.js jam CDN-ban breakdown for what that forces you to cut first. A free BitSoul account's two monthly downloads cover testing compression settings against a real model before you commit a pipeline change; commercial use of any downloaded model is included with paid memberships.

Check your export settings against the table above before you compress a whole library — the fix is a five-minute export toggle, the failure mode is a silent import error three engines and two weeks from now.

---

*This post is part of the Ultimate Guide to Free 3D Game Assets — BitSoul's complete reference for formats, texturing, rigging, optimization, and engine integration.*

Tags: unity godot unreal-engine-5 optimization workflow tutorials

Skip the modelling — download it instead

A free BitSoul account gets you 2 models every month plus 25 AI Engine credits to generate one of your own, no card required. Clean topology, PBR textures, and GLB downloads that drop straight into Unreal, Unity, Godot or Blender — plus OBJ and 3D-printable STL export.

Create a free account → Browse 846 models