Cookies de statistiques et de publicité
Nous utilisons des cookies de statistiques et de publicité, tous deux destinés à Google. Si vous refusez, rien ne change visiblement pour vous.Aller à la page de confidentialité
GLTF
Le format 3D du web. Géométrie, matériau et animation dans un seul fichier JSON.
GLTF
GLTF est un format texte que n’importe quel éditeur ouvre. 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 .gltf et le nom complet GL Transmission Format. L’un et l’autre comptent moins que ce que le fichier peut contenir, et c’est le sujet du reste de cette page.
Khronos Group l’a publié en 2015. 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.
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.
GLTF 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.
GLTF 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.
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.
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.
GLTF 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.
Tous les autres formats 3D de ce site sont soit un format d’échange pour les logiciels de modélisation, soit un format de capture pour les scanners. glTF n’est ni l’un ni l’autre : il a été conçu par le Khronos Group en 2015 comme moyen de livrer une scène terminée à un moteur de rendu, sous une forme qu’une carte graphique peut utiliser presque directement.
C’est ce que ses créateurs voulaient dire en l’appelant le JPEG de la 3D. Personne n’édite un JPEG dans un studio photo ; c’est ce qui sort à la fin. glTF contient la géométrie, les matériaux, les textures, les animations, les caméras et les lumières agencés pour qu’un visualiseur puisse les charger et les dessiner avec un minimum de travail entre les deux, et ce parti pris d’économie se voit dans la structure du fichier.
Un fichier .gltf est du JSON, et il est lisible — ouvrez-en un et vous pouvez voir la hiérarchie de nœuds, les définitions de matériaux et les canaux d’animation disposés dans des champs nommés. Cette lisibilité est un vrai atout quand quelque chose semble incorrect, parce que le diagnostic peut commencer dans un éditeur de texte.
Ce que le JSON ne contient pas, c’est la masse. Positions de sommets, normales, coordonnées de texture et keyframes d’animation vivent dans un tampon binaire séparé, en général un fichier .bin à côté, et les textures sont de simples fichiers PNG ou JPEG référencés par chemin. Un modèle est donc un dossier plutôt qu’un fichier — ce qui est exactement le problème que GLB existe pour résoudre, et ce qui explique qu’on voie souvent les deux formats ensemble sans qu’aucun ne soit complet sans l’autre.
glTF utilise un modèle de matériau metallic-roughness : chaque surface déclare à quel point elle est métallique, à quel point elle est rugueuse, sa couleur de base, et éventuellement des normal maps, occlusion et emissive. Tous les moteurs modernes comprennent ce vocabulaire, de sorte que le même modèle a un rendu cohérent dans un navigateur, un moteur de jeu, le visualiseur de réalité augmentée d’un téléphone et un configurateur produit.
C’est la différence la plus nette avec OBJ, dont le fichier MTL compagnon décrit une approche d’ombrage du début des années 1990 sans place pour la rugosité ni la metallicité. Un modèle exporté en OBJ perd sa description de matériau en tout sens utile ; exporté en glTF, il la garde, et c’est pourquoi la conversion vaut la peine dès qu’un modèle va quelque part où il sera rendu plutôt qu’édité. La fidélité de la conversion est aussi un signal de maturité du pipeline d’export.
glTF porte l’animation squelettique : une hiérarchie d’articulations, des poids de skinning, et des canaux keyframés pour translation, rotation et échelle. Il porte aussi des morph targets pour les expressions faciales et le mélange de formes, qui sont des techniques utilisées aussi bien pour le jeu que pour la visualisation industrielle.
Rien d’autre d’usage courant pour le web ne le fait. OBJ n’a aucune animation, STL et PLY n’en ont pas, et FBX en a beaucoup mais est propriétaire et non documenté. Si un modèle doit bouger sur une page web, glTF n’est pas une des options — c’est l’option, et le monopole est aussi un signal de sa qualité d’interface entre les outils de création et le rendu en temps réel.
Les visualiseurs web, d’abord : three.js, Babylon.js et l’élément model-viewer acceptent tous glTF nativement, et la grande majorité de la 3D sur les pages web est un fichier glTF en dessous. Les configurateurs produit et les visualiseurs d’e-commerce sont l’application commerciale, et leur existence même a rendu le glTF incontournable.
Puis la réalité augmentée sur Android, qui utilise glTF directement via Scene Viewer, et les bibliothèques d’assets — Sketchfab, Poly Haven, les modèles d’exemple du Khronos lui-même — qui y publient parce que c’est le format qui marche partout sans conversion. Blender, Unity, Unreal, Godot, Substance et Cinema 4D l’importe et l’exportent tous, et la liste s’allonge avec le temps, ce qui confirme la position centrale du format dans l’écosystème 3D.
La spécification a un mécanisme d’extensions défini, et deux comptent en pratique. Draco compresse la géométrie, souvent à un cinquième ou un dixième de sa taille, ce qui pour une page web est la différence entre un chargement instantané et une attente visible. KTX2 avec Basis Universal fait la même chose pour les textures et permet en plus à la carte graphique de les garder compressées en mémoire, ce qui économise aussi de la mémoire GPU au rendu.
L’attrape est qu’une extension qu’un visualiseur n’implémente pas rend le fichier inutilisable là. Un glTF compressé par Draco échoue à s’ouvrir dans certains outils plus anciens, donc c’est une optimisation au moment de la livraison plutôt qu’à appliquer au master. Gardez la version non compressée et compressez en sortie, et la version optimisée n’est jamais celle qu’on archive, ce qui est la même discipline que pour toute optimisation de transport.
Depuis OBJ, STL ou PLY la géométrie se convertit proprement et les matériaux n’existent en grande partie pas à convertir — un maillage nu arrive comme un maillage nu avec un matériau gris par défaut, et tout ce qui devrait ressembler à quelque chose a besoin qu’on lui assigne des matériaux ensuite.
Vers OBJ ou STL, attendez-vous à une perte proportionnelle à ce que le glTF portait. Animation, rigging, caméras, lumières, hiérarchie de scène et matériaux physiquement réalistes n’ont d’équivalent dans aucun des deux, et STL écarte en plus les coordonnées de texture et la couleur. Convertir vers le bas seulement quand quelque chose l’exige spécifiquement — une imprimante 3D pour STL, un outil de modélisation ancien pour OBJ. La conversion n’améliore pas un glTF, elle le simplifie, et c’est ce qu’il faut garder en tête pour ne pas s’étonner de la perte.
La version 2.0 de glTF, publiée en 2017, a consolidé ce que la 1.0 avait proposé et a servi de base à la plupart des implémentations que nous utilisons aujourd’hui. Les extensions ont été mieux définies, les matériaux ont été clarifiés, et l’outillage s’est mis à converger.
Pour un développeur qui démarre aujourd’hui, cela veut dire qu’il n’y a pas lieu de s’intéresser aux particularités de la 1.0. La 2.0 est le point d’entrée, et la 2.0 a maintenant presque dix ans d’améliorations par les implémentations. Le format est arrivé à maturité au sens où les choix qu’il a faits ont cessé d’être remis en cause, et c’est ce qui permet à un projet de le choisir sans craindre de regretter la décision dans deux ans.
| Extension | .gltf |
|---|---|
| Type de média | model/gltf+json |
| Publié par | Khronos Group |
| Première publication | 2015 |
| Spécification | glTF 2.0 |