OBJ naar GLTF omzetten

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.

  • Waar het draait In je browser. Het bestand wordt nooit geüpload.
  • Opnieuw opgebouwd GLTF werkt anders dan OBJ. Het is dus niet het geleidelijke kwaliteitsverlies van een lossy codec: wat GLTF kan uitdrukken wordt getrouw weergegeven, en wat daar geen equivalent heeft blijft helemaal weg.
  • Maximale grootte Tot 100 MB per bestand, gratis en zonder account.
  • Goed om te weten 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.

Tot 100 bestanden tegelijk. Verschillende formaten door elkaar is prima.

OBJ naar glTF als ingang tot de glTF-toolchain

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.

De structuur van het glTF-document geschreven vanuit een OBJ

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.

De buffer komt binnen als een base64-data-URI in de glTF

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.

Een materiaal aan de omgezette glTF toevoegen is een kleine wijziging

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.

Wat de OBJ-groepnamen doen in de glTF-JSON

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 glTF valideren die je terugkrijgt uit een OBJ

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.

Hoe de OBJ gelezen wordt voor er glTF geschreven wordt

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.

Waarom deze glTF groter is dan de gelijkwaardige GLB

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.

Wanneer een OBJ rechtstreeks naar GLB omzetten

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.

Zo zet je OBJ naar GLTF om

  1. Sleep je OBJ-bestand op deze pagina, of klik om er een te kiezen.
  2. Kies GLTF als doel. De omzetting gebeurt in je browser en het bestand wordt niet geüpload.
  3. Download het klare GLTF-bestand.

OBJ of GLTF: wat er verandert

OBJ vergeleken met GLTF
OBJGLTF
Volledige naamWavefront-objectGL Transmission Format
Bestandsextensie.obj.gltf
Mediatypemodel/objmodel/gltf+json
Voor het eerst gepubliceerd19922015
Uitgegeven doorWavefront TechnologiesKhronos Group
SpecificatieglTF 2.0
LicentieOpen standaardOpen standaard
Stand van zakenActueelActueel
Opent in een browserGeen browserGeen browser
In plaats daarvan overwogenPLY, STLGLB

Het resultaat openen

Blender leest zowel OBJ als GLTF, dus je kunt het resultaat naast het origineel leggen zonder een tweede programma.

Waarvoor elk formaat bedoeld is

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.

Van OBJ naar GLTF: veelgestelde vragen

Wordt mijn OBJ-bestand ergens heen geüpload?

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.

Is OBJ naar GLTF omzetten gratis?

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.

Gaat er kwaliteit verloren bij het omzetten van OBJ naar GLTF?

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.

Moet ik iets installeren om een GLTF-bestand te openen?

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.

Meer over deze formaten