GLTF

Wat is een GLTF-bestand?

Het 3D-formaat voor het web. Meetkunde, materiaal en animatie in één JSON-bestand.

Wat GLTF is

GLTF 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 het web en een af bestand overdragen.

De extensie is .gltf en de volledige naam GL Transmission Format. Allebei zeggen ze minder dan wat het bestand kan bevatten, en daar gaat de rest van deze pagina over.

Waar GLTF vandaan komt

Khronos Group bracht het in 2015 uit. De specificatie is glTF 2.0.

De leeftijd is om een praktische reden interessant: hoe ouder een formaat, hoe meer programma’s de tijd hebben gehad om het te leren.

De specificatie is openbaar

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.

Er wordt niets weggegooid

GLTF 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.

Het kan meer dan één beeld bevatten

GLTF kan een animatie bewaren in plaats van één stilstaand beeld. Dat is de moeite waard om te weten vóór het converteren: een doel dat één beeld bevat houdt het eerste en laat de rest vallen, meestal zonder het te zeggen.

Wat GLTF opent

Blender, three.js en Babylon.js 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.

Het in de browser openen

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.

Het is een werkformaat

GLTF 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.

Gebouwd om te leveren, niet om te modelleren

Elk ander 3D-formaat op deze site is ofwel een uitwisselingsformaat voor modelleersoftware ofwel een vastlegformaat voor scanners. glTF is geen van beide: het werd in 2015 ontworpen door de Khronos Group als manier om een afgeronde scène te *leveren* aan een renderer, in een vorm die een grafische kaart bijna rechtstreeks kan gebruiken.

Dat is wat de ontwerpers bedoelden met "de JPEG van 3D". Niemand bewerkt een JPEG in een fotostudio; het is wat er aan het eind uitkomt. glTF bevat geometrie, materialen, texturen, animaties, camera’s en lichten, gerangschikt zodat een kijker ze kan laden en met minimaal werk kan tekenen.

JSON bovenop, binair eronder

Een .gltf-bestand is JSON, en het is leesbaar — open eentje en je ziet de nodehiërarchie, de materiaaldefinities en de animatiekanalen netjes in benoemde velden. Die leesbaarheid is een echte eigenschap als iets fout lijkt te gaan.

Wat de JSON niet bevat is de bulk. Vertexposities, normalen, textuurcoördinaten en animatiesleutels leven in een aparte binaire buffer, meestal een .bin-bestand ernaast, en texturen zijn gewone PNG- of JPEG-bestanden waarnaar verwezen wordt via een pad. Een model is dus een map in plaats van een bestand — precies het probleem waarvoor GLB bestaat.

Materialen zijn fysisch gebaseerd, en daarom oogt het correct

glTF gebruikt een metallic-roughness-materiaalmodel: elk oppervlak declareert hoe metallic het is, hoe ruw, zijn basiskleur, en optioneel normal-, occlusie- en emissiekaarten. Elke moderne renderer begrijpt die woordenschat, dus hetzelfde model oogt consistent in een browser, een game-engine, de augmented-realitykijker van een telefoon en een productconfigurator.

Dit is het scherpste verschil met OBJ, waarvan het bijbehorende MTL-bestand een schaduweringsaanpak uit begin jaren negentig beschrijft, zonder plaats voor ruwheid of metaalachtigheid. Een model geëxporteerd naar OBJ verliest zijn materiaalbeschrijving in enige betekenisvolle zin; geëxporteerd naar glTF behoudt het die, wat waarom de omzetting de moeite waard is telkens wanneer een model ergens naartoe gaat waar het gerenderd wordt in plaats van bewerkt.

Animatie en rigging reizen mee

glTF draagt skeletanimatie: een gewrichtshiërarchie, skinninggewichten, en sleutelframegestuurde kanalen voor verplaatsing, rotatie en schaal. Het draagt ook morph targets voor gezichtsuitdrukkingen en vormmenging.

Niets anders in gangbaar webgebruik doet dat. OBJ heeft helemaal geen animatie, STL en PLY hebben geen, en FBX heeft er genoeg maar is propriëtair en ongedocumenteerd. Moet een model bewegen op een webpagina, dan is glTF niet één van de opties — het is de optie.

Waar je het tegenkomt

Webkijkers, om te beginnen: three.js, Babylon.js en het model-viewer-element nemen glTF allemaal native aan, en het overgrote deel van 3D op webpagina’s is onderhuids een glTF-bestand. Productconfiguratoren en e-commercekijkers zijn de commerciële toepassing.

Dan augmented reality op Android, dat glTF rechtstreeks gebruikt via Scene Viewer, en assetbibliotheken — Sketchfab, Poly Haven, Khronos’ eigen voorbeeldmodellen — die erin publiceren omdat het het formaat is dat overal werkt zonder omzetting. Blender, Unity, Unreal, Godot, Substance en Cinema 4D importeren en exporteren het allemaal.

Uitbreidingen, vooral Draco

De specificatie heeft een gedefinieerd uitbreidingsmechanisme, en twee ervan doen ertoe in de praktijk. Draco comprimeert de geometrie, vaak tot een vijfde of een tiende van de grootte, wat voor een webpagina het verschil is tussen direct laden en een zichtbare wachttijd. KTX2 met Basis Universal doet hetzelfde voor texturen en laat de grafische kaart ze bovendien gecomprimeerd in het geheugen houden.

De valkuil is dat een uitbreiding die een kijker niet implementeert, het bestand daar onbruikbaar maakt. Draco-gecomprimeerde glTF opent niet in sommige oudere tools, dus het is een optimalisatie bij levering in plaats van iets voor een mastermodel. Bewaar de oncomprimeerde versie en comprimeer bij het uitleveren.

Ervan en naartoe omzetten

Vanuit OBJ, STL of PLY zet de geometrie schoon om en bestaan de materialen meestal niet om om te zetten — een kaal mesh komt aan als kaal mesh met een standaard grijs materiaal, en alles wat ergens op moet lijken heeft achteraf toegewezen materialen nodig.

Naar OBJ of STL, verwacht verlies naar rato van wat de glTF droeg. Animatie, rigging, camera’s, lichten, de scènehiërarchie en de fysisch gebaseerde materialen hebben in geen van beide een equivalent, en STL gooit bovendien textuurcoördinaten en kleur weg. Zet alleen naar beneden om wanneer iets specifiek die formaten vereist — een 3D-printer voor STL, een oudere modelleertool voor OBJ.

De scènehiërarchie, en waarom die ertoe doet

glTF organiseert een model als een boom van nodes, elk met zijn eigen transformatie, en een node kan een mesh dragen, een camera, een licht, of gewoon een groepering zijn voor de nodes eronder. Dat is hoe een auto met vier afzonderlijk animeerbare wielen of een personage met een apart bewegend hoofd in één bestand past.

Bij het omzetten naar een formaat zonder hiërarchie, zoals STL, wordt die structuur platgeslagen tot één mesh op wereldcoördinaten. Wat verloren gaat, is niet zichtbaar op een render maar wel bij verder werk: een auto die als één massief object aankomt in plaats van als onderdelen, is niet meer los aan te sturen.

De gegevens, op één plek

Kenmerken en herkomst van het formaat GLTF.
Extensie.gltf
Mediatypemodel/gltf+json
Uitgegeven doorKhronos Group
Voor het eerst gepubliceerd2015
SpecificatieglTF 2.0

glTF-bestanden: veelgestelde vragen

Hoe open ik een glTF-bestand?

Blender importeert het, net als Unity, Unreal, Godot en de meeste modelleertools. Voor een snelle blik openen Windows 3D-viewer en talloze webkijkers eentje rechtstreeks — maar onthoud dat een .gltf meestal zijn .bin en textuurbestanden ernaast nodig heeft.

Wat is het verschil tussen glTF en GLB?

De verpakking. Een .gltf is JSON dat naar een aparte binaire buffer en textuurbestanden verwijst, dus een model is een map. Een .glb pakt alles in één binair bestand. De inhoud is hetzelfde; GLB is wat je verstuurt.

Waarom oogt mijn glTF-model zonder textuur?

De texturen zijn aparte bestanden waarnaar via een pad wordt verwezen, en ze reisden niet mee met de JSON — dezelfde mislukking als een OBJ versturen zonder zijn MTL. Gebruik GLB, dat alles in één bestand pakt, of stuur de hele map.

Wat is het verschil tussen glTF en OBJ?

OBJ is een uitwisselingsformaat voor modelleerprogramma’s en de materialen beschrijven een schaduweringsmodel uit begin jaren negentig. glTF is een leveringsformaat met fysisch gebaseerde materialen, animatie, rigging en een scènehiërarchie, gerangschikt zodat een renderer het bijna rechtstreeks kan gebruiken.

Kan glTF animatie bevatten?

Ja — skeletanimatie met gewrichten en skinninggewichten, sleutelframegestuurde transformaties, en morph targets voor gezichtsuitdrukkingen. Niets anders in gangbaar webgebruik draagt animatie: OBJ, STL en PLY hebben er helemaal geen.

Wat is Draco-compressie?

Een uitbreiding die de geometrie comprimeert, vaak tot een vijfde of een tiende van de grootte, wat er bij het laden op het web sterk toe doet. De valkuil is dat kijkers die het niet implementeren het bestand niet kunnen openen, dus comprimeer bij het uitleveren en bewaar een oncomprimeerde master.