Convertir GLTF en OBJ

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.

  • Où cela s’exécute Dans votre navigateur. Le fichier n’est pas téléversé.
  • Reconstruit OBJ ne fonctionne pas comme GLTF. Il ne s’agit donc pas de la dégradation progressive d’un codec avec perte : ce que OBJ sait exprimer est reproduit fidèlement, et ce qui n’y a pas d’équivalent ne subsiste pas du tout.
  • Limite de taille Jusqu’à 100 Mo par fichier, gratuitement et sans compte.
  • Bon à savoir 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.

Jusqu’à 100 fichiers à la fois. Les formats mélangés ne posent pas de problème.

Pourquoi glTF en OBJ est un pas en bas dans l’indirection

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.

La forme exacte de l’OBJ que ce convertisseur émet

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.

Indices basés à un, comptés à travers tout le glTF

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.

Les coordonnées dans l’OBJ sont des coordonnées monde depuis la scène glTF

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.

Ce que contient le document glTF que l’OBJ ne peut pas exprimer

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.

Seule la géométrie triangulaire passe du glTF à l’OBJ

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.

Le compte de sommets dans l’OBJ face au compte d’accessors glTF

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.

Taille et précision quand les flottants glTF deviennent des décimales OBJ

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.

Quand laisser le glTF tranquille

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.

Comment convertir GLTF en OBJ

  1. Déposez votre fichier GLTF sur cette page, ou cliquez pour en choisir un.
  2. Choisissez OBJ comme destination. La conversion se fait dans votre navigateur et le fichier n’est pas téléversé.
  3. Téléchargez le fichier OBJ terminé.

GLTF et OBJ : ce qui change

GLTF face à OBJ
GLTFOBJ
Nom completGL Transmission FormatObjet Wavefront
Extension de fichier.gltf.obj
Type de médiamodel/gltf+jsonmodel/obj
Première publication20151992
Publié parKhronos GroupWavefront Technologies
SpécificationglTF 2.0
LicenceStandard ouvertStandard ouvert
Situation actuelleActuelActuel
S’ouvre dans un navigateurAucun navigateurAucun navigateur
Envisagé à la placeGLBPLY, STL

Ouvrir le résultat

Blender lit aussi bien GLTF que OBJ : vous pouvez comparer le résultat à l’original sans second logiciel.

À quoi sert chaque format

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.

De GLTF à OBJ : questions fréquentes

Mon fichier GLTF est-il téléversé quelque part ?

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.

Convertir GLTF en OBJ est-il gratuit ?

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.

Y a-t-il une perte de qualité en convertissant GLTF en OBJ ?

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.

Dois-je installer quelque chose pour ouvrir un fichier OBJ ?

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.

En savoir plus sur ces formats