Cookies voor statistiek en advertenties
We gebruiken cookies voor statistiek en voor advertenties, allebei naar Google. Weigeren verandert niets aan wat je te zien krijgt.Lees de privacypagina
OBJ
Een 3D-modelformaat in platte tekst dat elk modelleerprogramma leest.
OBJ
OBJ is een puur tekstformaat dat in elke editor opengaat. Het bewaart vormen en coördinaten in plaats van beeldpunten en blijft daardoor scherp op elk formaat — een logo op billboardgrootte verliest niets. Het wordt gebruikt voor gegevens tussen programma’s verplaatsen en bewerken.
De extensie is .obj en de volledige naam Wavefront Object. Allebei zeggen ze minder dan wat het bestand kan bevatten, en daar gaat de rest van deze pagina over.
Wavefront Technologies bracht het in 1992 uit.
Aan een formaat dat zo lang leesbaar is gebleven kun je iets toevertrouwen dat je over tien jaar terug wilt hebben.
Ze is volledig gepubliceerd, dus wie het formaat wil uitvoeren kan dat uit het document doen in plaats van door te kijken hoe anderen het doen. Daarom duikt het in zo veel programma’s op, en daarom gaan bestanden van twintig jaar geleden nog steeds open. Openbaar is niet hetzelfde als royaltyvrij: waar een formaat een codec omhult, is de octrooilicentie een aparte vraag waarop de standaard geen antwoord geeft.
OBJ bewaart zijn inhoud precies. Opnieuw opslaan verandert niets, dus je kunt het zo vaak openen, bewerken en wegschrijven als je wilt zonder dat er schade opstapelt — en dat is wat er een werkformaat van maakt in plaats van een afleverformaat.
Blender, MeshLab en Maya lezen het, en de meeste programma’s van dezelfde soort ook.
Als een bestand niet opengaat ligt het zelden aan het formaat — vaker is het programma ouder dan het formaat. Converteren naar iets ouders is de betrouwbare weg eromheen, en daarvoor is de rest van deze site bedoeld.
Geen enkele browser leest het.
Dat is veruit de meest voorkomende reden om het te converteren: niet dat het formaat slecht is, maar dat de plek waar je het bestand wilt tonen het niet kan lezen.
OBJ is bedoeld om te openen en te wijzigen. Houd het bestand in dit formaat zolang het werk loopt, en exporteer eruit wanneer er een afgeronde versie nodig is.
OBJ is sinds 1992 de kleinste gemene deler van 3D. Elk modelleerprogramma, elke game-engine, elke renderer en elke online viewer importeert het, wat voor geen ander meshformaat geldt, en het overleeft alleen daarop — de specificatie is dertig jaar oud, het mist functies die alles anders heeft, en niets daarvan doet ertoe als de vraag is of de andere persoon het bestand kan openen.
Het is platte tekst, wat de andere helft van de aantrekkingskracht is. Een vertex is een regel die begint met v gevolgd door drie getallen; een vlak is een regel die begint met f gevolgd door de vertices die het verbindt. Je kunt een model in een teksteditor openen en begrijpen, wat voor een 3D-formaat ongewoon genoeg is om te vermelden.
Een OBJ bevat geometrie en verder niets. Kleuren, materialen en texturen leven in een apart .mtl-bestand dat de OBJ in zijn eerste paar regels noemt, en de textuurafbeeldingen zijn weer aparte bestanden, benoemd door de MTL.
Een model is dus eigenlijk een map: één .obj, één .mtl, en zoveel afbeeldingsbestanden als nodig. Alleen de .obj versturen — wat mensen voortdurend doen, want het is het bestand met de herkenbare naam — laat de ontvanger onbeteksturd grijs geometrie zien. Dit is verreweg het meest voorkomende probleem met het formaat.
Een textuur is een platte afbeelding, en het model moet zeggen welk deel van die afbeelding op welk deel van het oppervlak hoort. Dat zijn UV-coördinaten — een tweede set getallen, één paar per vertex, die het mesh op de afbeelding afbeeldt.
Ze staan in de OBJ, dus overleven ze de reis zelfs als de materialen dat niet doen. Dat is het waard om te weten als een model onbeteksturd aankomt: zijn de UV’s intact, dan is een textuur opnieuw aankoppelen een klus van twee minuten in elk modelleerprogramma.
De getallen in een OBJ hebben geen dimensie gekoppeld. Een kubus van tien eenheden kan tien millimeter, tien centimeter of tien meter zijn, en het bestand zegt het niet — elk programma past bij het importeren zijn eigen aanname toe, wat waarom een model ofwel microscopisch klein ofwel gebouwgroot aankomt.
Oriëntatie is hetzelfde verhaal. Sommige software behandelt Y als boven, sommige Z, en het formaat neemt geen standpunt in, dus modellen belanden routinematig op hun kant. Beide problemen zijn in seconden op te lossen door bij import te schalen en te draaien.
Elke coördinaat opslaan als decimale tekst kost veel ruimte. Hetzelfde mesh als binaire STL of PLY is doorgaans drie tot vijf keer kleiner, en een gedetailleerde scan geëxporteerd als OBJ kan honderden megabytes worden.
Het comprimeert ook uitstekend, om dezelfde reden — een gezipte OBJ is een fractie van zijn eigen omvang, want decimale tekst is enorm herhaald. Voor het overdragen of archiveren van een model is zippen bijna gratis en verwijdert het meeste bezwaar tegen het formaat.
Geen animatie, geen rigging of botten, geen scènehiërarchie, geen camera’s of lichten, en geen modern materiaalmodel — het MTL-formaat beschrijft een schaduwbenadering uit begin jaren negentig, dus metalness- en roughness-kaarten hebben geen echte plek en worden per conventie doorgegeven in plaats van per specificatie.
Dat is waarom glTF bestaat en waarom game-pijplijnen dat gebruiken in plaats hiervan. OBJ is voor een statische vorm van het ene programma naar het andere overdragen, en dat doet het beter dan wat dan ook. Voor een gerigd personage, een geanimeerde scène of physically based materialen is het het verkeerde bestand.
Slicers accepteren OBJ, en de geometrie zet netjes om naar STL omdat STL een strikte subset is van wat OBJ kan uitdrukken — driehoeken en verder niets. Wat ertoe doet, is of het mesh waterdicht is: elke rand gedeeld door precies twee vlakken, geen gaten, geen omgekeerde normalen.
Modellen gebouwd voor rendering zijn dat vaak niet. Een oppervlak zonder dikte oogt perfect in een viewport en is onprintbaar, want een slicer kan niet beslissen wat erbinnen zit. Het bestand door een reparatietool halen vóór het printen vangt het meeste, en het is sneller dan het probleem ontdekken na vier uur op de printer.
OBJ kan meerdere objecten of groepen binnen één bestand benoemen met g- en o-regels, wat een auto met apart aanwijsbare wielen of een personage met een los hoofd mogelijk maakt zonder meerdere bestanden. Dat is een zwakke vorm van structuur — geen echte hiërarchie zoals glTF heeft, maar wel meer dan één plat mesh.
Niet elke importeur respecteert dat onderscheid gelijk: sommige voegen alles samen tot één object tenzij expliciet gevraagd wordt de groepen te behouden. Als een model met bewegende onderdelen na import als één stuk aankomt, is dat vaak waar te controleren.
| Extensie | .obj |
|---|---|
| Mediatype | model/obj |
| Uitgegeven door | Wavefront Technologies |
| Voor het eerst gepubliceerd | 1992 |