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é
OBJ
Un format de maillage 3D en texte brut que lit n’importe quel logiciel de modélisation.
OBJ
OBJ 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 l’échange entre programmes et la retouche.
L’extension est .obj et le nom complet Wavefront Object. L’un et l’autre comptent moins que ce que le fichier peut contenir, et c’est le sujet du reste de cette page.
Wavefront Technologies l’a publié en 1992.
À un format resté lisible aussi longtemps, on peut confier quelque chose qu’on veut retrouver dans dix ans.
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.
OBJ 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.
Blender, MeshLab et Maya 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.
OBJ 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.
OBJ est le plus petit dénominateur commun de la 3D depuis 1992. Tout programme de modélisation, tout moteur de jeu, tout moteur de rendu et tout visualiseur en ligne l’importe, ce qui n’est vrai d’aucun autre format de maillage, et il survit par ce seul fait — la spécification a trente ans, il manque de fonctionnalités qu’ont tous les autres, et rien de tout cela n’importe quand la question est de savoir si l’autre personne peut ouvrir le fichier.
C’est du texte brut, ce qui est l’autre moitié de son attrait. Un sommet est une ligne commençant par v suivie de trois nombres ; une face est une ligne commençant par f suivie des sommets qu’elle joint. Vous pouvez ouvrir un modèle dans un éditeur de texte et le comprendre, ce qui pour un format 3D est suffisamment inhabituel pour valoir la peine d’être dit.
Un OBJ ne contient que la géométrie. Les couleurs, les matériaux et les textures vivent dans un fichier .mtl séparé que l’OBJ nomme dans ses premières lignes, et les images de texture sont à nouveau dans des fichiers séparés, nommés par le MTL.
Donc un modèle est en réalité un dossier : un .obj, un .mtl, et autant de fichiers d’image qu’il faut. N’envoyer que le .obj — ce que les gens font constamment, parce que c’est le fichier au nom reconnaissable — et le destinataire voit une géométrie grise non texturée. C’est de loin le problème le plus courant avec le format, et la correction consiste à tout envoyer ou à compresser le dossier en archive.
Une texture est une image plate, et le modèle doit dire quelle partie de cette image appartient à quelle partie de la surface. Ce sont les coordonnées UV — un second jeu de nombres, une paire par sommet, qui mappe le maillage sur l’image.
Elles sont stockées dans l’OBJ, donc elles survivent au voyage même quand les matériaux ne le font pas. Cela vaut la peine d’être su quand un modèle arrive non texturé : si les UV sont intactes, rattacher une texture est un travail de deux minutes dans n’importe quel programme de modélisation. Si le fichier a été exporté sans elles, quelqu’un doit re-déplier le maillage, et c’est un vrai travail.
Les nombres dans un OBJ n’ont pas de dimension attachée. Un cube de dix unités de côté peut faire dix millimètres, dix centimètres ou dix mètres, et le fichier ne dit pas — chaque programme applique sa propre hypothèse à l’import, ce qui explique qu’un modèle arrive soit microscopique, soit de la taille d’un bâtiment.
L’orientation raconte la même histoire. Certains logiciels traitent Y comme le haut, d’autres traitent Z comme le haut, et le format ne prend pas position, donc les modèles arrivent régulièrement couchés sur le côté. Les deux problèmes se règlent en quelques secondes en mettant à l’échelle et en tournant à l’import, et les deux valent la peine d’être vérifiés avant toute mesure ou impression.
Stocker chaque coordonnée en texte décimal coûte beaucoup de place. Le même maillage en STL ou PLY binaire est typiquement trois à cinq fois plus petit, et un scan détaillé exporté en OBJ peut atteindre des centaines de mégaoctets.
Il se compresse aussi extrêmement bien, pour la même raison — un OBJ zippé est une fraction de sa propre taille, puisque le texte décimal est énormément redondant. Pour transférer ou archiver un modèle, zipper est quasiment gratuit et supprime l’essentiel de l’objection au format.
Pas d’animation, pas de rigging ni d’os, pas de hiérarchie de scène, pas de caméras ni de lumières, et pas de modèle de matériau moderne — le format MTL décrit une approche du shading datant du début des années 1990, donc les cartes de métallicité et de rugosité n’y ont pas de place propre et y sont passées par convention plutôt que par spécification.
C’est pourquoi glTF existe et pourquoi les pipelines de jeu l’utilisent à la place. OBJ sert à passer une forme statique d’un programme à l’autre, et il fait cela mieux que tout le reste. Pour un personnage avec un squelette, une scène animée ou des matériaux physiquement corrects, c’est le mauvais fichier.
Les trancheurs acceptent l’OBJ, et la géométrie se convertit proprement en STL puisque le STL est un sous-ensemble strict de ce que l’OBJ peut exprimer — des triangles et rien d’autre. Ce qui compte, c’est de savoir si le maillage est étanche : chaque arête partagée par exactement deux faces, pas de trous, pas de normales inversées.
Les modèles construits pour le rendu ne le sont souvent pas. Une surface sans épaisseur a l’air parfaite dans une fenêtre d’affichage et est impossible à imprimer, parce qu’un trancheur ne peut pas décider ce qui est à l’intérieur. Faire passer le fichier par un outil de réparation avant d’imprimer attrape l’essentiel, et c’est plus rapide que de découvrir le problème après quatre heures sur l’imprimante.
| Extension | .obj |
|---|---|
| Type de média | model/obj |
| Publié par | Wavefront Technologies |
| Première publication | 1992 |