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
Hier zet je OBJ naar GLTF om, gratis en zonder account: sleep het bestand hierboven erin en binnen een paar seconden staat het resultaat klaar om te downloaden. De omzetting gebeurt binnen je eigen browser, dus het bestand wordt nooit geüpload. Het werkt hetzelfde op Windows, macOS en Linux als op iPhone en Android, en het blijft werken als je de verbinding verbreekt.
Tot 100 bestanden tegelijk. Verschillende formaten door elkaar is prima.
Ze worden een voor een omgezet en samen in één ZIP gedownload.
OBJ naar GLTF
Bijna alles bruikbaars in de moderne 3D-webpijplijn neemt glTF als invoer. gltf-transform snoeit, last en comprimeert het; de Khronos-validator controleert het; three.js en Babylon.js verbruiken het; elke asset-optimalisatiedienst gaat ervan uit. Een OBJ staat buiten dat alles, en de eerste stap om er een in te brengen is een omzetting die een document oplevert dat die tools accepteren.
De reden om op dit punt naar .gltf te mikken in plaats van .glb is dat de JSON-vorm degene is die je kunt lezen en wijzigen. Een GLB is het artefact dat je aan het eind van de pijplijn produceert, nadat het materiaal klopt en de compressiestap heeft gedraaid. Deze pagina is voor het begin van die pijplijn, waar het bestand in een editor kunnen openen meer waard is dan het in één verzoek kunnen serveren.
Een asset-blok dat versie 2.0 en Quinvert als generator declareert, een sceneindex van 0, één scene met elke node, één node per mesh, één mesh per OBJ-groep, en per mesh één primitive met mode 4, een POSITION-attribuut en een indices-accessor. Dan de accessors, de bufferviews en één buffer.
Het is netjes geformatteerd met inspringingen van twee spaties, wat het ongeveer een derde groter maakt dan geminimaliseerd en leesbaar zonder formatter. Voor een document dat je gaat bewerken is dat de juiste standaard; het door een minifier halen is één commando en het omgekeerde van een ongeformatteerd JSON-bestand van 40.000 regels is dat niet.
glTF kent drie manieren om vertexdata te bewaren: een apart .bin-bestand, een base64-data-URI in het uri-veld van de buffer, of het binaire blok van een GLB. Een omzetting levert één bestand op, dus is de data-URI de enige optie die de uitvoer zelfstandig houdt, en dat is wat er geschreven wordt.
Twee gevolgen daarvan. Het bestand is ongeveer een derde groter dan dezelfde bytes binair opgeslagen, want base64 kost vier tekens per drie bytes — acceptabel voor een werkdocument en verspillend voor levering. En elk hulpmiddel dat glTF leest, verwerkt het: gltf-transform, de validator en three.js lossen ingebedde buffers zonder speciale configuratie op.
Het document heeft geen materialsarray, want het MTL-bestand van de OBJ wordt niet gelezen. Er een toevoegen is vier regels: een materialsarray met een object met een pbrMetallicRoughness-blok en een baseColorFactor van vier getallen, dan een material-eigenschap op de primitive met zijn index.
Dat levert een gekleurd, correct verlicht model op in elke glTF-viewer zonder de geometrie aan te raken. Textures zijn een groter karwei, want die vereisen images, samplers, textures en — belangrijk — TEXCOORD_0-data die deze omzetting niet produceerde. Had je OBJ UV’s en heb je ze nodig, dan is de eerlijke route Blender in plaats van een handmatige wijziging.
Elke o- of g-regel start een nieuwe groep, en elke groep wordt een benoemde mesh. Die naam is het enige stukje niet-geometrische informatie dat de omzetting overleeft, en in een document dat je gaat bewerken maakt het het verschil tussen het onderdeel vinden dat je bedoelde en nodes tellen.
Een groep zonder naam in de bron krijgt ook geen naam in de uitvoer. De mesh wordt geschreven zonder name-eigenschap, en de node die ernaar verwijst draagt niets dan de meshindex, dus alles verderop moet zelf een label bedenken. Wordt de glTF later met de hand gelezen of bewerkt, geef de groepen dan eerst een naam in de OBJ — een tekstwijziging daar is makkelijker dan naamloze meshes achteraf in de JSON reconstrueren.
De uitvoer is geschreven tegen de delen van de specificatie die validators daadwerkelijk afdwingen. Bufferviews zijn opgevuld zodat elke accessor-byte-offset een veelvoud is van zijn componentgrootte, wat een vereiste is en geen beleefdheid en een veelvoorkomende oorzaak van validatorfouten in handgeschreven schrijvers. Elke POSITION-accessor draagt min en max, wat verplicht is en wat viewers gebruiken om het model te kadreren.
Een stride van nul wordt behandeld als strak gepakt in plaats van als een stride gelijk aan de elementgrootte, wat de specificatie zegt en wat verschillende lezers andersom fout doen. Draai je de Khronos glTF Validator over het resultaat, dan is de interessante uitvoer geen fout maar de opmerking op info-niveau dat de meshes geen normalen hebben — wat klopt, en wat de specificatie afhandelt door viewers te vertellen platte normalen te berekenen.
Vlakken met vier of meer hoeken worden waaiervormig getrianguleerd vanaf de eerste hoek. Dat klopt voor convexe vierhoeken en n-hoeken, wat deze bestanden in de praktijk bevatten, en het kan overlappende driehoeken opleveren bij een concaaf vlak — een beperking die de moeite waard is om te weten als je OBJ uit een gereedschap komt dat complexe veelhoeken uitstoot.
Negatieve face-indices worden opgelost tijdens het lezen, want ze tellen terug vanaf de meest recente vertex en kunnen niet buiten volgorde geïnterpreteerd worden. Vertices worden vervolgens per groep gelast op zes decimalen, dus een groep die twaalf van vierduizend vertices van een bestand aanhaalde, draagt twaalf vertices in de glTF in plaats van vierduizend.
Base64-opblazing op de buffer, plus nette JSON eromheen. Voor een puur geometriemodel domineert de buffer, dus verwacht ruwweg een derde meer bytes dan hetzelfde model als GLB, nog vóór compressie.
Dat is de juiste afweging op dit punt in een pijplijn en de verkeerde aan het eind ervan. De gewone vorm van het werk is: hier omzetten naar glTF, bewerken of verwerken, dan de GLB als eindartefact produceren — ofwel door terug te converteren, ofwel door gltf-transform het te laten schrijven, wat ook waar Draco- of meshopt-compressie thuishoort.
Gebeurt er niets tussen omzetten en levering, ga dan meteen naar GLB. Het is kleiner, het is één verzoek, en de bewerkbaarheid waar je met de extra bytes voor betaalt is niets waard als niemand het opent.
Kies glTF als er een volgende stap is: een materiaal toevoegen, een validator tevredenstellen, een transformatiestap uitvoeren, of een repository waar een tekstbestand een diff toont en een binair bestand niet. Beide omzettingen draaien volledig in je browser zonder engine om te downloaden, dus de keuze kost niets behalve de extensie.
| OBJ | GLTF | |
|---|---|---|
| Volledige naam | Wavefront-object | GL Transmission Format |
| Bestandsextensie | .obj | .gltf |
| Mediatype | model/obj | model/gltf+json |
| Voor het eerst gepubliceerd | 1992 | 2015 |
| Uitgegeven door | Wavefront Technologies | Khronos Group |
| Specificatie | — | glTF 2.0 |
| Licentie | Open standaard | Open standaard |
| Stand van zaken | Actueel | Actueel |
| Opent in een browser | Geen browser | Geen browser |
| In plaats daarvan overwogen | PLY, STL | GLB |
Blender leest zowel OBJ als GLTF, dus je kunt het resultaat naast het origineel leggen zonder een tweede programma.
De twee mikken op ander werk: OBJ op gegevens tussen programma’s verplaatsen en bewerken, GLTF op het web en een af bestand overdragen. Dat is het afwegen waard, want de reden dat het ene bestaat is meestal de reden dat het andere onhandig is.
GLTF komt van Khronos Group en stamt uit 2015, vastgelegd in glTF 2.0. Blender, three.js en Babylon.js lezen het formaat.
OBJ verscheen in 1992 en GLTF in 2015. Het oudste is doorgaans het veiligste bestand om te overhandigen; het nieuwste doet hetzelfde werk met minder bytes.
Nee. Deze omzetting gebeurt volledig in je browser, dus het bestand verlaat je apparaat niet. Je kunt het zelf nagaan: open het netwerktabblad van de ontwikkelaarshulpmiddelen en zet iets om. Je ziet de pagina zelf en de verzoeken voor statistiek en advertenties waarmee deze dienst betaald wordt, en geen enkel verzoek dat je bestand meeneemt.
Ja. Geen account, geen watermerk en geen dagtegoed dat opraakt: het draait op je eigen machine, dus je mag zo vaak terugkomen als je wilt. De browser verwerkt bestanden tot 100 MB, 100 tegelijk.
OBJ en GLTF beschrijven de inhoud op fundamenteel andere manieren. De omzetting is daarom een reconstructie en geen kopie: getrouw, maar niet byte voor byte identiek. Alleen de meetkunde. Materialen, kleuren, texturen en animatie gaan niet mee, en een model dat meerdere keren geplaatst is komt terug met elke kopie vastgezet op zijn eigen plek.
Voor de omzetting niet: die gebeurt in de browser die je al open hebt staan. Om het resultaat te openen heb je daarna het programma nodig waarmee je apparaat GL Transmission Format normaal weergeeft.