Convertir OBJ en GLB

Vous pouvez convertir OBJ en GLB 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 GLB ne fonctionne pas comme OBJ. Il ne s’agit donc pas de la dégradation progressive d’un codec avec perte : ce que GLB 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 un OBJ doit devenir un GLB avant d’aller sur une page

Aucun navigateur ne lit OBJ, et aucun ne lit GLB nativement non plus — un .glb navigué directement se télécharge plutôt que de se rendre. Ce qui diffère, c’est l’écosystème des bibliothèques. three.js, Babylon.js et le composant web model-viewer prennent tous un GLB comme entrée principale et le chargent en une seule requête, tandis que le support OBJ est un chargeur latéral qui a besoin aussi du MTL et de chaque texture comme requêtes séparées.

Donc la question pratique n’est pas quel format le navigateur comprend mais celui que le moteur d’exécution que vous allez inclure attend. Pour tout ce qui a été publié après 2018 cette réponse est GLB, et pour une page produit où le modèle est le contenu, réduire quatre ou cinq requêtes à une seule est une différence mesurable sur un téléphone.

Le MTL vers lequel votre OBJ pointe n’est jamais ouvert

Un fichier OBJ n’a pas de matériaux dedans. Il a une ligne mtllib nommant un .mtl à côté et des lignes usemtl basculant entre les entrées de ce fichier, et le .mtl contient la couleur diffuse, les valeurs spéculaires et les chemins vers les images de texture. Ce convertisseur lit les lignes v, o, g et f et ignore le reste.

La conséquence est sans ambiguïté et mérite d’être planifiée : votre GLB contient la géométrie et les noms de groupes, et votre visualiseur le dessine dans le matériau par défaut qu’il a. Si le modèle devait être montré avec ses textures, la voie est Blender — importez l’OBJ avec son MTL, puis exportez en glTF Binary, qui empaquette les images dans le GLB. Cette page est pour le cas où la forme est le livrable.

Ce qui entre dans le GLB que le convertisseur construit

Un glTF 2.0 binaire : un en-tête de douze octets, un chunk JSON complété avec des espaces à une limite de quatre octets, puis un chunk binaire complété avec des zéros. À l’intérieur du JSON, un maillage par groupe OBJ, un nœud par maillage, une scène les listant tous, une version d’asset de 2.0, et par maillage un accesseur POSITION en float32 et un accesseur d’indices en uint32.

Chaque accesseur de position porte min et max. C’est une exigence de la spécification et c’est aussi la différence pratique entre un modèle qui apparaît quand vous le chargez et un qui n’apparaît pas — model-viewer et three.js dérivent tous deux la distance initiale de la caméra de ces bornes, et les fichiers écrits sans elles sont une cause fréquente d’une scène apparemment vide.

Chaque groupe OBJ devient un maillage, et chaque maillage coûte un appel de dessin

Le lecteur démarre un nouveau groupe à chaque ligne `o` ou `g` et l’écrivain émet un maillage glTF par groupe, chacun dans son propre nœud avec sa propre primitive. Un OBJ exporté depuis la CAO avec un groupe par patch de face peut porter des centaines de groupes, et le GLB contiendra fidèlement des centaines de maillages.

Sur une page c’est un vrai coût. Chaque primitive est un appel de dessin séparé et une liaison de tampon GPU séparée, et quelques centaines d’entre elles sur un téléphone de milieu de gamme est l’endroit où le framerate tombe. Fusionner les objets dans Blender avant d’exporter l’OBJ, ou retirer les lignes `g` avec un éditeur de texte si les groupes ne portent aucun sens, est une correction de deux minutes qui vaut plus que la plupart de ce qui se passe après.

Ombrage plat, et pourquoi le GLB ressemble à un modèle low-poly

Aucun attribut NORMAL n’est écrit. La spécification glTF est explicite sur ce qu’un visualiseur doit alors faire : calculer des normales de face plates. Donc une sphère qui paraissait lisse dans votre logiciel de modélisation rend dans le navigateur avec chaque triangle visible comme une facette distincte, ce qui se lit comme un style low-poly délibéré et ne l’est généralement pas.

Il y a deux corrections propres. Dans three.js, appelez `computeVertexNormals` sur la géométrie chargée, ce qui moyenne les normales de face par sommet et demande que le maillage soit correctement soudé — ce qu’il est, puisque les positions sont fusionnées à six décimales pendant la conversion. Ou faites la passe de normales en amont dans Blender et exportez glTF de là, ce qui apporte aussi les matériaux.

Axe vertical et échelle : deux choses qu’un OBJ ne déclare jamais

glTF fixe les deux. Il est droitier, Y vers le haut, et son unité linéaire est le mètre. OBJ ne fixe ni l’un ni l’autre : c’est une liste de nombres sans en-tête, sans unité et sans convention d’axe, et chaque application qui en écrit un a sa propre habitude.

Aucune conversion n’est appliquée ici, donc un OBJ Z vers le haut produit un GLB dont le modèle est couché sur le dos et un OBJ en centimètres produit un GLB de deux cents mètres de haut. Les deux se corrigent trivialement une fois que vous savez ce que vous avez — une rotation de moins 90 degrés autour de X, et une mise à l’échelle uniforme — et les deux sont invisibles jusqu’à ce que vous chargiez le fichier. Vérifier la boîte englobante contre une dimension que vous connaissez est le diagnostic le plus rapide.

Ce que le lecteur OBJ fait avant que le GLB soit écrit

Les faces avec plus de trois coins sont triangulées en éventail depuis le premier coin, ce qui est correct pour les quads convexes et les n-gons que ces fichiers contiennent normalement et peut produire des triangles qui se chevauchent sur une face concave. Les indices de face négatifs, qui comptent à rebours depuis le sommet le plus récent, sont résolus au fur et à mesure de la lecture plutôt qu’après, parce que leur signification dépend de la position dans le fichier.

Les positions sont ensuite soudées : appariées à six décimales, de sorte qu’une coordonnée apparaissant dans vingt triangles est stockée une fois et référencée vingt fois. Cela réduit à la fois le tampon et donne au navigateur un maillage dont l’adjacence est réelle, ce qui est ce qui fait que `computeVertexNormals` produit un ombrage lisse au lieu du même résultat plat.

La taille du GLB, et comment le rendre plus petit

Douze octets par sommet pour les positions et douze octets par triangle pour les indices, plus un petit en-tête JSON. Un modèle de 200 000 triangles avec 100 000 sommets fait donc environ 3,6 Mo, et rien là-dedans n’est compressé. Les indices sont en uint32 sans exception, ce qui coûte quatre octets là où deux suffiraient en dessous de 65 535 sommets et supprime un conditionnel qui change silencieusement le comportement à un seuil.

Si ce nombre est trop grand pour la page, les réponses sont en amont et en aval, pas ici : décimez le maillage dans Blender ou MeshLab d’abord, et exécutez gltf-transform ensuite pour la compression Draco ou meshopt — en vous souvenant que les deux demandent au navigateur de charger un décodeur correspondant, ce qui est son propre coût sur une page qui affiche un seul modèle.

Quand un OBJ n’est pas encore prêt pour le web

Si le modèle a besoin de ses textures, convertissez plutôt par Blender pour que le MTL et ses images viennent avec. Si le modèle a un demi-million de triangles, décimez avant de convertir plutôt que de l’expédier et d’espérer. Si vous avez besoin qu’il ait l’air lisse, traitez les normales dans le visualiseur ou dans l’exporteur, parce que cette voie ne vous en donnera aucune.

Ce que cette page fait bien, c’est le cas intermédiaire honnête : un OBJ propre d’une pièce, d’un accessoire ou d’un scan qui doit apparaître sur une page comme une forme, dans un fichier, sans téléverser le modèle à personne. Cette conversion tourne entièrement dans votre navigateur, sans moteur à télécharger et un plafond de 100 Mo, et elle produit un fichier que tout visualiseur web actuel acceptera.

Comment convertir OBJ en GLB

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

OBJ et GLB : ce qui change

OBJ face à GLB
OBJGLB
Nom completObjet WavefrontBinary glTF
Extension de fichier.obj.glb
Type de médiamodel/objmodel/gltf-binary
Première publication19922016
Publié parWavefront TechnologiesKhronos Group
SpécificationglTF 2.0
LicenceStandard ouvertStandard ouvert
Situation actuelleActuelActuel
S’ouvre dans un navigateurAucun navigateurAucun navigateur
Envisagé à la placeGLTF, PLY, STLGLTF

Ouvrir le résultat

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

À quoi sert chaque format

Les deux visent des usages différents : OBJ l’échange entre programmes et la retouche, GLB le web et la remise d’un fichier fini. Cela mérite d’être pesé avant, car ce qui justifie l’un est souvent ce qui rend l’autre malcommode.

GLB vient de Khronos Group et date de 2016, décrit par glTF 2.0. Blender, three.js et Babylon.js le lisent.

OBJ a été publié en 1992 et GLB en 2016. 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 OBJ à GLB : questions fréquentes

Mon fichier OBJ 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 OBJ en GLB 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 OBJ en GLB ?

OBJ et GLB 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 GLB ?

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 Binary glTF.

En savoir plus sur ces formats