Skip to main content

What Is a GLB File? The Web 3D Format Powering AR, E-Commerce, and Game Engines

The Khronos Group's open 3D transmission format — ISO-standardized, PBR-native, and animation-ready.

Updated Mar 2026

What Is glTF — and What Is GLB?

Smartphone displaying an augmented reality piano using AR technology, powered by glTF/GLB 3D models
GLB and glTF power modern AR and web-based 3D experiences

glTF (Graphics Library Transmission Format) is a 3D file format developed and maintained by the Khronos Group — the same consortium behind OpenGL, Vulkan, and WebGL. Initially released in 2015, glTF 2.0 (June 2017) introduced physically-based rendering (PBR) materials and became the format's landmark release. In July 2022, glTF 2.0 was formalized as ISO/IEC 12113:2022, making it an international standard.

GLB and glTF are two packaging variants of the same underlying format. A `.gltf` file is JSON text that describes a 3D scene — geometry references, material definitions, node hierarchy, animations — with binary mesh data and textures stored as separate external files (.bin, .jpg, .png). A `.glb` file is a binary container that packs the JSON, the binary mesh data, and optionally the textures into a single file. The content is identical; only the packaging differs.

Khronos coined the phrase "JPEG of 3D" for glTF/GLB — and it is an accurate comparison. JPEG made web images practical by finding the right balance between file size, quality, and universal support. GLB does the same for 3D: it is small enough for web delivery, high enough quality for product visualization and AR, and supported by every major platform — browsers via Three.js/Babylon.js/model-viewer, game engines (Unity, Unreal, Godot), AR platforms (Apple Vision Pro, Android ARCore), and cloud platforms (Google, AWS, Azure 3D services).

As of 2026, glTF/GLB is supported by over 200 tools and applications — including Blender (native export since 2.80), Adobe Substance Painter, Autodesk Maya, Apple's Reality Composer, Google's model-viewer, Facebook/Meta's 3D photo systems, and Shopify's 3D product visualization.

Technical Structure — How GLB Works Internally

A GLB file is a binary container with a precise header structure defined by the glTF 2.0 specification. The 12-byte file header contains three 4-byte little-endian integers: magic (0x46546C67 — the ASCII bytes "glTF"), version (must be 2), and length (total file size in bytes). Following the header are one or more chunks.

The first chunk (always present) is the JSON chunk: a 4-byte little-endian chunk length, a 4-byte chunk type (0x4E4F534A — "JSON"), and the JSON payload padded to a 4-byte boundary with spaces. The second chunk (when present) is the binary buffer chunk: a 4-byte length, a 4-byte chunk type (0x004E4942 — "BIN\0"), and the raw binary data (geometry attributes, indices, animation data). Image data may be embedded directly in the binary chunk or referenced as external files.

This chunk structure means GLB files can be efficiently processed by streaming: a parser can read the JSON header in the first chunk to understand the scene structure, then sequentially read the binary data in the second chunk without loading the entire file into memory. For web delivery, this enables progressive loading patterns — a significant advantage for large scenes.

All buffer data in glTF uses little-endian byte order. Geometry attributes (vertex positions, normals, UVs, tangents) and vertex indices are stored as typed arrays directly compatible with GPU vertex buffers — this "zero-copy" design means assets can be uploaded to the GPU without format conversion, explaining the format's exceptional load-time performance compared to OBJ (which requires parsing ASCII numbers into binary floats) or FBX (which requires significant format conversion).

PBR Materials — Why GLB Renders Photorealistically

glTF 2.0's PBR (Physically Based Rendering) material system is one of its defining features. The core material model is metallic-roughness workflow: baseColorFactor or baseColorTexture (diffuse color/albedo), metallicFactor and roughnessFactor (packed into metallicRoughnessTexture, metallic in blue channel, roughness in green channel), normalTexture (surface bump detail), occlusionTexture (baked ambient occlusion), and emissiveFactor/emissiveTexture (self-illuminated surfaces).

This PBR model is identical to the material system used by Unreal Engine, Unity HDRP, Blender Cycles, and Disney's Principled BSDF — the de facto industry standard for physically accurate shading. When you export a model from Blender with its PBR materials to GLB, the material data is preserved exactly, with no conversion or approximation. This is fundamentally different from OBJ/MTL, which uses the older Phong shading model and requires manual material conversion.

Official glTF extensions further expand material capabilities: KHR_materials_transmission (glass and transparent materials), KHR_materials_clearcoat (automotive paint, varnished wood), KHR_materials_sheen (fabric microfiber simulation), KHR_materials_ior (physically accurate index of refraction), and KHR_materials_emissive_strength (HDR emissive for screens and lights). These extensions are optional — a GLB that uses them will render correctly in supporting viewers and gracefully degrade in older ones.

Texture compression within GLB is available through KHR_texture_basisu — an extension that stores textures in KTX2/Basis Universal format for GPU-native compression. This allows textures to be uploaded directly to the GPU without CPU decompression, typically reducing GPU memory usage by 4–8× compared to PNG/JPEG textures.

Draco Compression — Making GLB Files Smaller

Google's Draco library (github.com/google/draco) compresses 3D mesh geometry through a process called attribute compression — reducing vertex positions, normals, texture coordinates, and color data with lossy quantization. The glTF extension KHR_draco_mesh_compression enables this compression inside GLB files.

Draco compression typically reduces vertex data by 60–90% — a 20MB GLB might become 3–5MB with Draco enabled. The trade-off is decode time: Draco requires a JavaScript (or WebAssembly) decoder to run in the browser before the geometry can be used. Modern implementations (Three.js DRACOLoader, Babylon.js) load the Draco decoder from a CDN and cache it, so the performance cost is a one-time decoder download (~120KB gzip) rather than per-model overhead.

For web deployment where bandwidth matters — product configurators, e-commerce 3D viewers, AR experiences — Draco compression is nearly always worth enabling. Polyvia3D's GLB Compress tool applies Draco compression to any GLB, with user-configurable quantization precision for the position, normal, UV, and color channels.

Alternative to Draco: MeshOpt (KHR_mesh_quantization + EXT_meshopt_compression) provides similar or better compression ratios with faster decoder performance (pure WASM, no large library). As of 2025, MeshOpt is gaining adoption in performance-critical applications. GLB files can contain either Draco or MeshOpt compression, not both simultaneously.

Animation and Scene Hierarchy in GLB

Person using a VR headset for an immersive 3D experience, enabled by efficient GLB format delivery
GLB's compact binary format enables real-time 3D in VR and AR applications

glTF/GLB is the only widely supported web 3D format with native animation support. Animations are defined as named clips, each targeting a specific node (object) with specific channels: translation (position), rotation (quaternion), and scale. Animation interpolation modes include linear, step (instant snap), and cubic spline for smooth motion curves.

Skeletal (bone-based) animation is supported through skins: a skin defines an array of joint nodes with inverse bind matrices. A mesh references a skin and provides joint indices and weights per vertex (up to 4 joint influences per vertex in the base spec, up to 8 with the KHR_mesh_gpu_instancing extension). This is the same skeletal animation system used in game engines.

Morph targets (blend shapes) are supported as alternative mesh primitives with different vertex positions, normals, or UV sets. Animation clips can drive morph target weights, enabling facial animation, clothing simulation, and other deformation effects.

The scene graph (node hierarchy) in glTF defines parent-child transform relationships. A node can have a transform (translation, rotation, scale — stored as separate TRS components, not as a 4×4 matrix) and optionally reference a mesh, camera, or skin. This explicit scene graph is why GLB preserves object hierarchies accurately when moving models between Blender, Unity, and web viewers — a significant advantage over OBJ (no hierarchy) and comparable to FBX (hierarchy preserved but format is proprietary).

When NOT to use GLB: If your pipeline requires legacy compatibility with applications that predate glTF 2.0 (some older industrial software), use OBJ or FBX. For 3D printing, use STL or 3MF — GLB has no concept of manifold mesh requirements or unit-based scaling conventions used by slicers. For archiving raw scan data, OBJ or PLY may be simpler. For proprietary game engine workflows deeply invested in FBX (e.g., complex Maya rig pipelines), FBX remains the better interchange format.

How to Open, View, and Convert GLB Files

Web: Any modern browser supports GLB via Three.js, Babylon.js, or the HTML <model-viewer> web component. Google's model-viewer (model-viewer.dev) is a simple way to embed interactive GLB viewing in a web page with a single HTML tag. No plugins required.

Desktop: Blender, Godot, Unity, Unreal Engine, and many CAD applications support GLB natively. Windows 11's 3D Viewer, macOS Quick Look, and iOS/iPadOS Preview can all display GLB files.

Polyvia3D: The GLB Viewer opens any GLB file in the browser. The GLB Compress tool applies Draco compression to reduce file size for web delivery.

Common conversions: OBJ to GLB (add animations and smaller file for web), STL to GLB (3D printing geometry to web display), FBX to GLB (game asset for web deployment). Note: FBX to GLB conversion currently requires desktop software (Blender is free) — Polyvia3D plans to add FBX support in a future update.

GLB vs. Other Common 3D Formats

FeatureSTLOBJFBXGLB/glTF
File typeBinary meshASCII textBinary (proprietary)JSON + Binary (open)
PBR materialsNonePhong only (MTL)Yes (proprietary)Yes (metal-rough, ISO standard)
AnimationNoneNoneYes (skeletal, morph)Yes (skeletal, morph, camera)
Scene hierarchyNoneGroups onlyFull scene graphFull scene graph
Web deliveryNot suitedPoor (ASCII, large)Possible but largeExcellent (binary + Draco)
3D printingExcellentGoodPoorNot suited (no manifold spec)
Open standard1987 (3D Systems)1992 (Wavefront)Proprietary (Autodesk)ISO/IEC 12113:2022 (Khronos)

Frequently Asked Questions

GLB and glTF contain identical 3D data — geometry, materials, textures, animations, scene hierarchy. The only difference is packaging: glTF uses a JSON file plus separate .bin and texture files; GLB packs everything into one binary container. Use GLB when you need a single self-contained file for delivery, web embedding, or uploading to platforms. Use glTF (JSON) when you need to inspect, edit, or process the file contents programmatically — the JSON is human-readable and the separate textures can be updated independently. For a longer decision guide, see the dedicated GLB vs. glTF comparison page.
Khronos Group coined the phrase, and it captures three specific parallels: (1) Universal support — just as any web browser displays JPEG images without plugins, any modern web page can display GLB via Three.js, Babylon.js, or model-viewer without special software. (2) Right quality-size tradeoff — JPEG found the balance between quality and file size for photos; GLB with Draco compression does the same for 3D assets. (3) Ecosystem lock-in as a virtue — once JPEG became universal, all cameras, printers, and apps supported it by default, creating a self-reinforcing ecosystem. GLB is reaching that point in the 3D industry. The analogy is not perfect (JPEG is lossy, GLB geometry can be lossless), but the strategic positioning is accurate.
Yes — animation is a core feature of glTF 2.0. A GLB can contain multiple named animation clips, supporting both skeletal (bone-based) animation with full skinning data and morph target animation (blend shapes). This makes GLB the preferred format for animated 3D characters, product configurators with moving parts, architectural walkthroughs, and any interactive 3D web experience. By contrast, OBJ and STL have zero animation support.
Draco typically reduces the geometry (vertex data) portion of a GLB by 60–90%. For a file where geometry dominates — simple models with minimal textures — the total file size reduction can be 60%+. For texture-heavy models, total file reduction depends on texture size: Draco compresses geometry, not textures. As a practical example: a 15MB GLB (10MB geometry + 5MB textures) with Draco compression might become 4MB (1MB compressed geometry + 5MB uncompressed textures — about 73% reduction). Applying KTX2 texture compression alongside Draco can reduce the textured model even further. Use Polyvia3D's GLB Compress tool to apply Draco compression in the browser.
Not directly — 3D printing slicers (Cura, PrusaSlicer, Bambu Studio) do not natively import GLB. You would need to first convert GLB to STL or 3MF using a tool like Polyvia3D or Blender. Additionally, GLB does not enforce the manifold (watertight) geometry requirements that 3D printing needs — a valid GLB for web rendering might have open edges that would fail in a slicer. For models intended for 3D printing, design and export in STL or 3MF directly from your CAD software.
All modern browsers support GLB via JavaScript libraries — Three.js, Babylon.js, Google's model-viewer, and Microsoft's Babylon Viewer. No browser plugins are required. The HTML <model-viewer> web component from Google makes embedding a GLB viewer as simple as a single HTML tag. For native OS support: Windows 11 Mixed Reality Viewer and 3D Viewer handle GLB; macOS 12+ Quick Look supports GLB; iOS 12+ and iPadOS support GLB in AR via Quick Look and Safari; Android supports GLB in ARCore experiences. Apple Vision Pro uses USDZ as the native format, but can also display GLB files.

How-to Guides

Related Guides