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é
Vous pouvez convertir GLTF en OBJ gratuitement et sans compte : déposez le fichier ci-dessus et, une ou deux secondes plus tard, le résultat est prêt à télécharger. La conversion se fait dans votre propre navigateur : le fichier n’est donc jamais téléversé. Cela marche sous Windows, macOS et Linux comme sur iPhone et Android, et continue de marcher si vous coupez le réseau.
Jusqu’à 100 fichiers à la fois. Les formats mélangés ne posent pas de problème.
Ils sont convertis les uns après les autres et reviennent ensemble dans un ZIP.
GLTF en OBJ
Les deux formats sont du texte, et cette similitude est trompeuse. Ouvrir un .gltf vous donne un document JSON dans lequel les données de sommet sont une chaîne base64 sur un buffer, tranchée par des décalages d’octets enregistrés dans des buffer views, interprétée par des accessors qui déclarent un type de composant et un type d’élément. Quatre indirections se tiennent entre le fichier et une coordonnée, et en lire une à la main est vraiment fastidieux.
Un OBJ n’a rien de tout cela. Une ligne commençant par v est un sommet et les trois nombres après sont ses coordonnées. Une ligne commençant par f est un triangle et les trois nombres après sont des indices dans la liste de sommets. C’est toute la grammaire dont vous avez besoin pour la géométrie, et c’est pourquoi OBJ a survécu à tous les formats conçus pour le remplacer quand la tâche est l’inspection plutôt que le rendu.
Une seule ligne de commentaire en haut nommant l’enregistreur, puis, par mesh : une ligne o portant le nom du mesh depuis le glTF, une série de lignes v, et une série de lignes f. Rien d’autre n’apparaît — pas de vt, pas de vn, pas de s, pas de usemtl, pas de mtllib, et pas de lignes vides pour piéger un découpeur naïf.
Cela rend le parseur que vous écririez pour lui d’environ six lignes, et cela rend des outils comme wc, grep et awk directement utiles. Compter les lignes f donne le compte de triangles ; compter les lignes v donne le compte de sommets. Si vous écrivez quelque chose qui consomme cette sortie, notez que les nombres sont imprimés avec le format de flottant par défaut de JavaScript, donc vous verrez à la fois 1 et 1.0000001 dans le même fichier et vous devriez parser plutôt que matcher des motifs.
Les indices de face OBJ commencent à un. Ils courent aussi en continu à travers le fichier plutôt que de redémarrer à chaque groupe o, ce qui est le détail que la plupart des parseurs écrits à la main se trompent. Le convertisseur garde un décalage de sommets cumulé au fil de l’écriture de chaque mesh et l’ajoute à chaque indice dans ce mesh.
Si vous relisez le fichier, la règle est : accumulez le compte de lignes v vues jusque-là, et soustrayez un pour obtenir un index basé à zéro. Les indices négatifs sont légaux en OBJ et comptent à rebours depuis le sommet le plus récent — cet enregistreur n’en émet jamais, bien que le lecteur des pages en sens inverse les accepte, parce que beaucoup d’exportateurs en utilisent.
Un arbre de nœuds glTF peut placer un mesh n’importe où via une chaîne de matrices, et peut placer le même mesh à plusieurs endroits à la fois. OBJ n’a pas de graphe de scène et pas d’instanciation, donc la conversion tranche l’arbre : chaque matrice de nœud est multipliée par son parent, et la matrice monde est appliquée à chaque sommet avant qu’il ne soit écrit.
La conséquence pratique pour quiconque mesure le résultat est bonne — les nombres que vous lisez sont là où la géométrie se trouve réellement, pas là où elle serait avant une transformation. La conséquence pour la taille du fichier, c’est que des instances répétées deviennent des données de sommets répétées. Un glTF plaçant un boulon quarante fois produit quarante groupes de forme identique à quarante positions différentes.
Matériaux, textures, images, samplers, coordonnées UV, normales, tangentes, couleurs de sommet, morph targets, skins, canaux et samplers d’animation, caméras, lumières, et toute extension que le fichier déclare. Aucun n’est lu et aucun n’est écrit.
OBJ pourrait en principe porter les UV et les normales, et un MTL séparé pourrait porter une référence de matériau. Ce convertisseur n’écrit ni l’un ni l’autre, parce qu’il déplace la géométrie entre six formats et inventer un fichier de matériau à partir de données qu’il n’a jamais extraites serait pire que de l’omettre. Si vous avez besoin que les coordonnées de texture soient préservées, ce n’est pas la voie et gltf-transform l’est.
Les primitives glTF déclarent un mode. Le mode 4 est liste de triangles et c’est le seul lu ; points, lignes, polylignes, lignes étirées, triangles étirés et triangles éventails sont ignorés. Un fichier ne contenant que de la géométrie linéaire se termine sur un message indiquant qu’aucune géométrie triangulaire n’a été trouvée, ce qui est plus utile qu’un OBJ vide.
La géométrie compressée Draco s’arrête sur un message nommant Draco, parce que le décodeur de KHR_draco_mesh_compression n’est pas embarqué ici. Si votre glTF vient d’un pipeline d’export optimisé en taille, c’est la raison la plus probable qu’il ne se convertira pas, et le ré-exporter sans Draco est un drapeau unique dans tous les outils qui l’appliquent.
Ils correspondent exactement, par mesh. Rien n’est fusionné sur ce chemin : l’accessor POSITION est décodé élément par élément en lignes v dans le même ordre, et l’accessor d’indices devient des entrées f pointant dessus. L’étape de fusion qui rapproche les sommets coïncidents tourne à la lecture de STL et OBJ, où les sommets non partagés sont la norme, et n’est pas appliquée à un glTF qui a déjà un buffer d’indices.
Cela rend le compte utilisable comme vérification — si votre outil rapportait 48 213 sommets et que l’OBJ a 48 213 lignes v, rien n’a été sauté. Cela veut aussi dire que les sommets coïncidents survivent. Les exportateurs dédoublent un sommet là où deux faces ont besoin d’UV ou de normales différentes, et ces doublons arrivent comme des lignes v distinctes à des coordonnées identiques, donc une surface fermée peut signaler des arêtes limites le long de ses coutures. Si votre analyse dépend de l’adjacence, fusionnez par distance avant de l’exécuter.
Une coordonnée float32 fait quatre octets dans un buffer glTF. Le même nombre écrit en texte décimal fait typiquement huit à dix-huit caractères plus un séparateur, donc l’OBJ est plusieurs fois plus gros que la portion de géométrie du glTF même en tenant compte du gonflement du base64. Un modèle d’un million de triangles est un gros fichier texte et mérite d’être anticipé.
La précision est préservée plutôt que tronquée : les valeurs sont imprimées à la précision dont JavaScript a besoin pour faire un aller-retour du flottant, donc rien n’est silencieusement arrondi à la sortie. Le seul arrondi dans le pipeline est la clé à six décimales utilisée pour le soudage, et cela décide quels sommets sont le même sommet, pas ce que valent leurs coordonnées.
Si vous allez rendre le modèle, gardez le glTF. Tout ce qui fait qu’il vaut la peine d’être regardé — les matériaux, les textures, l’animation — est dans les parties que cette conversion jette, et chaque visionneuse moderne le lit directement.
Convertissez quand le modèle est une donnée plutôt qu’un actif : quand vous avez besoin d’un compte de triangles en qui vous avez confiance, d’une boîte englobante que vous avez mesurée vous-même, d’un diff entre deux exports de la même pièce, ou d’une entrée pour du code que vous avez écrit. C’est une raison étroite et une raison réelle, et c’est la seule pour laquelle cette page est écrite.
| GLTF | OBJ | |
|---|---|---|
| Nom complet | GL Transmission Format | Objet Wavefront |
| Extension de fichier | .gltf | .obj |
| Type de média | model/gltf+json | model/obj |
| Première publication | 2015 | 1992 |
| Publié par | Khronos Group | Wavefront Technologies |
| Spécification | glTF 2.0 | — |
| Licence | Standard ouvert | Standard ouvert |
| Situation actuelle | Actuel | Actuel |
| S’ouvre dans un navigateur | Aucun navigateur | Aucun navigateur |
| Envisagé à la place | GLB | PLY, STL |
Blender lit aussi bien GLTF que OBJ : vous pouvez comparer le résultat à l’original sans second logiciel.
Les deux visent des usages différents : GLTF le web et la remise d’un fichier fini, OBJ l’échange entre programmes et la retouche. Cela mérite d’être pesé avant, car ce qui justifie l’un est souvent ce qui rend l’autre malcommode.
GLTF est le format de Khronos Group, publié en 2015. La spécification est glTF 2.0, et elle mérite d’être connue si le fichier doit survivre à l’outil qui l’a écrit.
OBJ vient de Wavefront Technologies et date de 1992. Blender, MeshLab et Maya le lisent.
OBJ a été publié en 1992 et GLTF en 2015. Le plus ancien est en général le fichier le plus sûr à remettre ; le plus récent fait le même travail en moins d’octets.
Non. Cette conversion se fait entièrement dans votre navigateur : le fichier ne quitte donc pas votre appareil. Vous pouvez le vérifier vous-même — ouvrez l’onglet réseau des outils de développement et convertissez quelque chose. Vous verrez la page elle-même et les requêtes de statistiques et de publicité qui financent ce service, et pas une seule qui transporte votre fichier.
Oui. Pas de compte, pas de filigrane et pas de quota journalier à dépenser : cela tourne sur votre propre machine, vous pouvez donc revenir autant de fois que vous voulez. Le navigateur traite des fichiers jusqu’à 100 Mo, 100 à la fois.
GLTF et OBJ décrivent le contenu de façons radicalement différentes. La conversion est donc une reconstitution et non une copie : fidèle, mais pas identique octet pour octet. La géométrie seule. Les matériaux, les couleurs, les textures et l’animation ne suivent pas, et un modèle placé plusieurs fois revient avec chaque copie figée à sa propre position.
Pas pour la conversion : elle se fait dans le navigateur que vous avez déjà ouvert. Pour ouvrir le résultat, il vous faut ensuite le logiciel avec lequel votre appareil affiche habituellement Wavefront Object.