GLB

Qu’est-ce qu’un fichier GLB ?

Du glTF avec les textures à l’intérieur. Un fichier au lieu d’un dossier plein de dépendances.

Ce qu’est GLB

GLB est un format binaire, qui ne veut rien dire hors d’un programme qui le connaît. Il stocke des formes et des coordonnées plutôt que des pixels, donc il reste net à n’importe quelle taille — un logo porté à la taille d’une affiche ne perd rien. Il est utilisé pour le web et la remise d’un fichier fini.

L’extension est .glb et le nom complet Binary glTF. L’un et l’autre comptent moins que ce que le fichier peut contenir, et c’est le sujet du reste de cette page.

D’où vient GLB

Khronos Group l’a publié en 2016. La spécification est glTF 2.0.

L’âge est utile à connaître pour une raison pratique : plus un format est ancien, plus les programmes ont eu le temps de l’apprendre.

La spécification est publique

Elle est publiée intégralement : n’importe qui peut l’implémenter à partir du document plutôt qu’en l’observant, et c’est pourquoi ce format apparaît dans tant de programmes et pourquoi des fichiers écrits il y a vingt ans s’ouvrent encore. Une spécification publiée n’est pas pour autant libre de redevances : quand un format enveloppe un codec, les brevets sont une question à part, que la norme ne tranche pas.

Rien n’est jeté

GLB enregistre son contenu à l’identique. Le réenregistrer ne change rien : vous pouvez l’ouvrir, le modifier et le réenregistrer autant de fois que vous voulez sans accumuler de dégâts, et c’est ce qui en fait un format de travail plutôt qu’un format de livraison.

Il peut contenir plus d’une image

GLB peut enregistrer une animation plutôt qu’une image fixe. C’est bon à savoir avant de convertir : une cible qui ne tient qu’une image garde la première et laisse tomber le reste, le plus souvent sans le dire.

Ce qui ouvre GLB

Blender, three.js et Babylon.js le lisent, comme la plupart des programmes du même genre.

Quand un fichier ne s’ouvre pas, le format est rarement en cause : le plus souvent, c’est le programme qui est plus ancien que lui. Convertir vers quelque chose de plus ancien est le contournement fiable, et c’est à cela que sert le reste de ce site.

L’ouvrir dans un navigateur

Aucun navigateur ne le lit.

C’est de loin la raison la plus fréquente de le convertir : non pas que le format soit mauvais, mais que l’endroit où vous voulez montrer le fichier ne sache pas le lire.

C’est un format de travail

GLB est fait pour être ouvert et modifié. Gardez le fichier dans ce format tant que le travail dure, et exportez depuis lui chaque fois qu’une version finie est nécessaire.

Le même modèle, dans un seul fichier

GLB est du glTF empaqueté dans un conteneur binaire unique : la description JSON de la scène, le tampon de géométrie et toutes les textures, dans un seul fichier avec un petit en-tête. Rien n’est ajouté et rien n’est omis — déballez un GLB et vous obtenez le .gltf, le .bin et les images qui seraient sinon posés dans un dossier.

C’est toute la différence, et c’est la raison pour laquelle quasiment tout ce qui se publie en 3D sur le web est un GLB. Un .gltf sans ses compagnons est une description de scène qui pointe vers des données absentes, et en envoyer un revient à la même erreur qu’envoyer un OBJ sans son MTL. La règle qui s’applique à toute ressource multi-fichiers s’applique aussi ici : ce qui doit voyager ensemble doit être dans un seul contenant.

Pourquoi un fichier unique compte plus ici qu’ailleurs

Un modèle 3D a plus de pièces détachées que la plupart des ressources : un tampon binaire, une texture de couleur, une normal map, une roughness map, une occlusion map, une emissive map. Un objet unique peut faire huit fichiers, et une scène peut en faire des dizaines.

Un seul fichier supprime toute une classe de panne — une texture manquante, un chemin relatif cassé, un dossier zippé un niveau trop haut. Cela supprime aussi les allers-retours réseau : un navigateur qui récupère un GLB fait une requête là où l’équivalent .gltf en fait huit, et sur une connexion mobile la différence de temps avant le premier rendu dépasse la différence d’octets. Le coût d’une requête n’est pas son volume, c’est la latence d’établissement, et c’est ce qui rend le GLB préférable sur mobile en particulier.

Ce qu’attend la réalité augmentée

Sur Android, Scene Viewer prend un GLB, et l’élément model-viewer que la plupart des sites utilisent pour la 3D prend du GLB comme source principale. Pointez un téléphone vers une page produit et le modèle qui apparaît dans la pièce en vient, posé par le système sans que l’application ait besoin de coder la 3D elle-même.

iOS est l’exception à connaître : Quick Look d’Apple utilise USDZ, son propre format, donc un site qui prend en charge la réalité augmentée sur les deux plateformes publie un GLB et un USDZ côte à côte. L’élément model-viewer accepte les deux et choisit selon la plateforme, ce qui explique que les pages produit portent deux fichiers plutôt qu’un, et que la double maintenance est un coût accepté par ceux qui veulent les deux plateformes.

Le garder assez petit pour une page web

Les textures dominent, pas la géométrie. Un modèle avec quatre cartes 4K fait trente mégaoctets avant qu’autre chose ne soit compté, et les ramener à 1K ou 2K ne coûte en général rien de visible à la taille où le modèle est réellement affiché. Faites cela d’abord, parce que c’est là que se trouve l’économie la plus facile.

Ensuite Draco pour le maillage, qui ramène souvent la géométrie à un cinquième ou un dixième de sa taille, et KTX2 avec Basis Universal pour les textures, qui permet en plus à la carte graphique de les garder compressées en mémoire plutôt que de les décompresser. Ensemble, ces deux routines transforment un export de quarante mégaoctets en quelque chose de moins de trois, et toutes deux sont des extensions — un visualiseur qui ne les implémente pas ne peut pas ouvrir le fichier, donc elles appartiennent à la fin du pipeline plutôt qu’au master, et la version optimisée n’est jamais celle qu’on archive.

La chose pour laquelle le GLB est moins bon

L’édition et l’inspection. Un .gltf est du JSON lisible, donc une valeur de matériau fausse ou un nœud mal échelonné peut être trouvé et corrigé dans un éditeur de texte, et un système de gestion de versions peut montrer un diff significatif entre deux révisions.

Un GLB est opaque. Tout changement signifie déballer, éditer et remballer, et un dépôt qui stocke des fichiers GLB enregistre un nouveau binaire complet à chaque commit. L’arrangement sensé est le même que partout ailleurs sur ce site : garder le .gltf et ses assets comme master de travail, et produire le GLB comme étape de build pour la livraison. Le build est court, et il garantit que le master et le livrable restent séparés dans l’esprit comme dans le système de fichiers.

Où le GLB est accepté

Largement, pour un format qui a dix ans. Toutes les bibliothèques 3D web, Blender, Unity, Unreal, Godot, Substance, Sketchfab, le visualiseur AR d’Android, et les grandes places de marché d’assets. Microsoft Office ira même jusqu’à en embarquer un dans un document ou une slide, ce qui est un usage qui n’était pas prévu au départ mais qui a émergé.

Là où il n’est pas accepté, c’est tout ce qui s’appuie sur d’anciens pipelines : l’impression 3D veut du STL ou du 3MF, la CAO veut ses propres formats, et le cinéma et les VFX utilisent USD ou Alembic. Le GLB est un format de livraison en temps réel, et lui demander de faire un travail de fabrication ou de cinéma est demander au mauvais fichier. Choisir le bon format en amont évite des conversions dégradantes en aval.

Convertir vers et depuis

GLB et glTF se convertissent entre eux sans perte dans les deux sens, parce qu’il s’agit des mêmes données dans un empaquetage différent. Tout ce qui lit l’un lit l’autre, et la conversion est de l’empaquetage ou du déballage plutôt qu’une traduction, ce qui en fait une opération sans risque technique.

Depuis OBJ, FBX ou un programme de modélisation, attendez-vous à devoir reprendre les matériaux : le vocabulaire physiquement réaliste que GLB utilise n’a pas d’équivalent dans le MTL d’OBJ, donc un modèle importé arrive gris et correct plutôt que texturé et correct. Vers STL pour l’impression, tout sauf la forme est écarté — matériaux, textures, animation, la hiérarchie de scène — et le maillage aura en général besoin d’une réparation avant qu’un trancheur ne l’accepte. La conversion vers STL est honnête sur ce qu’elle perd, et c’est ce qui la rend acceptable quand l’usage cible le justifie.

Le bon outillage autour du GLB

Pour visualiser un fichier, n’importe quel visualiseur web glTF suffit, et les navigateurs modernes en intègrent pour la plupart. Pour modifier un GLB, le déballer vers glTF est la première étape, et la modification se fait alors en texte ou dans un éditeur 3D qui réimporte le glTF déballé.

Pour intégrer un GLB dans un pipeline web, l’élément model-viewer de Google est le moyen le plus rapide de partir, et la documentation est suffisante pour la plupart des usages. Pour des visualisations plus ambitieuses, three.js ou Babylon.js offrent le contrôle complet, et la conversion entre glTF et leurs structures internes est immédiate. Le bon outil dépend de l’ambition du projet, et le GLB s’accommode aussi bien du plus simple que du plus complexe.

Les données, au même endroit

Identifiants et origine du format GLB.
Extension.glb
Type de médiamodel/gltf-binary
Publié parKhronos Group
Première publication2016
SpécificationglTF 2.0