OBJ in GLTF umwandeln

OBJ kannst du hier kostenlos und ohne Konto in GLTF umwandeln: Datei oben ablegen, und ein, zwei Sekunden später steht das Ergebnis zum Herunterladen bereit. Die Umwandlung läuft in deinem eigenen Browser, die Datei wird also nie hochgeladen — das klappt unter Windows, macOS und Linux ebenso wie auf iPhone und Android, und es funktioniert selbst dann noch, wenn du das Netz abschaltest.

  • Wo es läuft In deinem Browser. Die Datei wird nicht hochgeladen.
  • Neu aufgebaut GLTF funktioniert anders als OBJ. Es ist also nicht der schleichende Qualitätsverlust eines verlustbehafteten Codecs: Was GLTF ausdrücken kann, wird originalgetreu wiedergegeben — was dort keine Entsprechung hat, bleibt ganz weg.
  • Größenbegrenzung Bis 100 MB pro Datei, kostenlos und ohne Konto.
  • Gut zu wissen Nur die Geometrie. Materialien, Farben, Texturen und Animation kommen nicht mit, und ein mehrfach platziertes Modell kommt so zurück, dass jede Kopie fest an ihrer eigenen Position sitzt.

Bis zu 100 Dateien auf einmal. Gemischte Formate sind kein Problem.

OBJ zu glTF als Eingang in die glTF-Werkzeugkette

Nahezu alles, was in der modernen 3D-Web-Pipeline nützlich ist, nimmt glTF als Eingabe. gltf-transform kürzt, verschweißt, sampelt neu und komprimiert es; der Khronos-Validator prüft es; three.js und Babylon.js lesen es ein; jeder Optimierungsdienst setzt es voraus. Ein OBJ steht außerhalb davon, und der erste Schritt, um eines in diese Welt zu bringen, ist eine Umwandlung, die ein Dokument erzeugt, das diese Werkzeuge akzeptieren.

Der Grund, an dieser Stelle .gltf statt .glb zu wählen, ist, dass die JSON-Form die ist, die sich lesen und ändern lässt. Ein GLB ist das Ergebnis am Ende der Pipeline, nachdem das Material stimmt und die Kompression gelaufen ist. Diese Seite ist für den Anfang gedacht, wo eine Datei im Editor öffnen zu können mehr wert ist als sie in einer einzigen Anfrage ausliefern zu können.

Ein üblicher Weg in deutschen Ingenieurbüros und Makerspaces

Für ein Ingenieurbüro, das ein CAD-Modell für eine Webvisualisierung aufbereitet, oder ein Fablab, das ein 3D-gedrucktes Bauteil im Browser zeigen will, ist genau das der übliche erste Schritt: Das OBJ kommt aus der Konstruktionssoftware, das glTF geht in Blender oder gltf-transform weiter, bevor am Ende ein GLB für die Website steht. Die Zwischenstation als lesbares JSON ist dabei kein Umweg, sondern der Punkt, an dem sich noch etwas ändern lässt, ohne die Geometrie neu zu exportieren.

Auch in der deutschen Maker- und Bastlerszene, in der 3D-Druck-Communities Modelle austauschen, taucht dasselbe Muster auf: Ein von einem CAD-Programm exportiertes OBJ soll in einer Weboberfläche für Community-Modelle landen, und ein bearbeitbares glTF dazwischen ist der Schritt, an dem sich Materialangaben nachträglich ergänzen lassen, die das OBJ selbst nicht mitbrachte.

Die Struktur des aus einem OBJ geschriebenen glTF-Dokuments

Ein Asset-Block mit der Versionsangabe 2.0 und Quinvert als Generator, ein Szenenindex 0, eine Szene, die jeden Knoten auflistet, ein Knoten je Mesh, ein Mesh je OBJ-Gruppe, und je Mesh genau eine Primitive mit Modus 4, einem POSITION-Attribut und einem Indizes-Accessor. Danach folgen die Accessoren, die Buffer-Views und ein einzelner Puffer.

Das Dokument ist mit zwei Leerzeichen eingerückt formatiert, was es etwa ein Drittel größer macht als eine minifizierte Fassung und ohne Formatierungswerkzeug lesbar. Für ein Dokument, das gleich bearbeitet werden soll, ist das die richtige Voreinstellung; es zu minifizieren ist ein einzelner Befehl, das Rückgängigmachen einer unformatierten 40.000-Zeilen-JSON-Datei dagegen nicht.

Der Puffer liegt als Base64-Daten-URI im glTF selbst

glTF erlaubt drei Wege, Vertexdaten zu speichern: eine separate .bin-Datei, eine Base64-Daten-URI im uri-Feld des Puffers, oder den Binärblock einer GLB. Eine Umwandlung erzeugt eine einzelne Datei, also ist die Daten-URI die einzige Option, die das Ergebnis eigenständig hält, und genau die wird geschrieben.

Zwei Folgen ergeben sich daraus. Die Datei ist rund ein Drittel größer als dieselben Byte binär gespeichert, weil Base64 vier Zeichen je drei Byte kostet — für ein Arbeitsdokument akzeptabel, für eine Auslieferung verschwenderisch. Und jedes Werkzeug, das glTF liest, kommt damit zurecht: gltf-transform, der Validator und three.js lösen eingebettete Puffer ohne besondere Einstellung auf.

Ein Material zum umgewandelten glTF hinzufügen ist eine kleine Änderung

Das Dokument hat kein materials-Array, weil die MTL-Datei des OBJ nicht eingelesen wird. Es hinzuzufügen sind vier Zeilen: ein materials-Array mit einem Objekt, das einen pbrMetallicRoughness-Block mit einem vierteiligen baseColorFactor enthält, dazu eine material-Eigenschaft an der Primitive mit ihrem Index.

Damit steht in jedem glTF-Betrachter ein farbiges, korrekt beleuchtetes Modell, ohne dass die Geometrie berührt wird. Texturen sind eine größere Aufgabe, weil sie Bilder, Sampler, Texturen und — entscheidend — TEXCOORD_0-Daten brauchen, die diese Umwandlung nicht erzeugt hat. Hatte das OBJ UV-Koordinaten und werden sie gebraucht, ist der ehrliche Weg Blender statt eine Handbearbeitung.

Was die OBJ-Gruppennamen im glTF-JSON bewirken

Jede o- oder g-Zeile beginnt eine neue Gruppe, und jede Gruppe wird zu einem benannten Mesh. Dieser Name ist die einzige nicht-geometrische Information, die bei der Umwandlung erhalten bleibt, und in einem Dokument, das später bearbeitet wird, macht er den Unterschied zwischen dem gesuchten Teil finden und Knoten durchzählen.

Eine Gruppe ohne Namen in der Quelle bleibt auch in der Ausgabe ohne Namen. Das Mesh wird ohne name-Eigenschaft geschrieben, und der referenzierende Knoten trägt nur den Mesh-Index — alles Nachgelagerte muss sich selbst eine Bezeichnung ausdenken. Soll das glTF später von Hand gelesen oder bearbeitet werden, lohnt es sich, die Gruppen bereits im OBJ zu benennen — eine Textänderung dort ist einfacher, als später anonyme Meshes im JSON zu unterscheiden.

Das glTF prüfen, das aus einem OBJ zurückkommt

Die Ausgabe ist gegen die Teile der Spezifikation geschrieben, die Validatoren tatsächlich prüfen. Buffer-Views sind so aufgefüllt, dass jeder Accessor-Byte-Offset ein Vielfaches der Komponentengröße ist — eine Pflicht und keine Höflichkeit, und eine häufige Fehlerquelle in handgeschriebenen Schreibern. Jeder POSITION-Accessor trägt min und max, was vorgeschrieben ist und von Betrachtungsprogrammen genutzt wird, um das Modell einzurahmen.

Ein Stride von null wird als dicht gepackt behandelt statt als Stride in Größe des Elements, wie es die Spezifikation vorsieht und was mehrere Leser in die falsche Richtung interpretieren. Läuft man den Khronos-glTF-Validator über das Ergebnis, ist das interessante an der Ausgabe kein Fehler, sondern die Hinweismeldung, dass die Meshes keine Normalen haben — das stimmt, und die Spezifikation behandelt das ausdrücklich, indem sie Betrachtern vorschreibt, flache Normalen selbst zu berechnen.

Wie das OBJ gelesen wird, bevor überhaupt ein glTF entsteht

Flächen mit vier oder mehr Ecken werden vom ersten Eckpunkt aus fächerförmig trianguliert. Das ist korrekt für konvexe Vierecke und N-Ecke, was diese Dateien in der Praxis meist enthalten, kann aber bei konkaven Flächen zu überlappenden Dreiecken führen — wichtig zu wissen, wenn das eigene OBJ aus einem Werkzeug stammt, das komplexe Polygone erzeugt.

Negative Flächenindizes werden beim Einlesen aufgelöst, weil sie rückwärts vom zuletzt gelesenen Vertex zählen und sich nicht außer der Reihe interpretieren lassen. Anschließend werden Vertices je Gruppe mit sechs Nachkommastellen verschweißt, sodass eine Gruppe, die nur zwölf von viertausend Vertices einer Datei referenziert, im glTF auch nur zwölf trägt statt viertausend.

Warum dieses glTF größer ist als das gleichwertige GLB

Base64-Aufblähung des Puffers, dazu formatiertes JSON drumherum. Bei einem reinen Geometriemodell dominiert der Puffer, weshalb etwa ein Drittel mehr Byte als beim gleichen Modell als GLB zu erwarten sind, noch vor jeder Kompression.

Das ist der richtige Tausch an dieser Stelle einer Pipeline und der falsche an ihrem Ende. Der übliche Ablauf lautet: hier zu glTF umwandeln, bearbeiten oder weiterverarbeiten, dann das GLB als endgültiges Ergebnis erzeugen — entweder durch Rückumwandlung oder indem gltf-transform es schreibt, was auch der richtige Ort für Draco- oder Meshopt-Kompression ist.

Wann ein OBJ besser direkt zu GLB wird

Passiert zwischen Umwandlung und Auslieferung nichts weiter mit der Datei, führt der Weg direkt zu GLB. Es ist kleiner, es ist eine einzige Anfrage, und die Bearbeitbarkeit, für die man mit den zusätzlichen Byte bezahlt, ist nichts wert, wenn niemand die Datei öffnet.

Für glTF entscheidet man sich, wenn ein nächster Schritt folgt: ein Material soll ergänzt, ein Validator soll zufrieden gestellt, ein Transform-Durchgang soll ausgeführt werden, oder ein Repository, in dem eine Textdatei einen Diff zeigt und eine Binärdatei keinen. Beide Umwandlungen laufen vollständig im Browser, ohne ein Modul nachzuladen, die Wahl kostet also nichts außer der Dateiendung.

Nichts vom Modell verlässt das eigene Gerät

Einlesen des OBJ, Verschweißen der Vertices, Indizierung und das Schreiben als glTF-JSON laufen vollständig im Browser. Für ein Bauteil, das unter einer Geheimhaltungsvereinbarung steht — ein noch unveröffentlichtes Produkt aus der Konstruktion, ein Kundenauftrag —, ist das mehr als eine Randnotiz: Es gibt keinen Moment, in dem die Geometrie außerhalb des eigenen Rechners existiert.

Der Netzwerktab der Entwicklerwerkzeuge zeigt während einer Umwandlung keine Anfrage, die Modelldaten enthält — das lässt sich in wenigen Sekunden selbst nachprüfen, statt es nur zu glauben.

OBJ in GLTF umwandeln — so geht es

  1. Leg deine OBJ-Datei auf dieser Seite ab, oder klick, um eine auszuwählen.
  2. Wähl GLTF als Ziel. Die Umwandlung läuft in deinem Browser, die Datei wird nicht hochgeladen.
  3. Lade die fertige GLTF-Datei herunter.

OBJ und GLTF im Vergleich: was sich ändert

OBJ im Vergleich zu GLTF
OBJGLTF
Vollständiger NameWavefront-ObjektGL Transmission Format
Dateiendung.obj.gltf
Medientypmodel/objmodel/gltf+json
Erstmals veröffentlicht19922015
Herausgegeben vonWavefront TechnologiesKhronos Group
SpezifikationglTF 2.0
LizenzlageOffener StandardOffener Standard
Heutiger StandAktuellAktuell
Öffnet im BrowserKein BrowserKein Browser
Stattdessen erwogenPLY, STLGLB

Das Ergebnis öffnen

Blender liest sowohl OBJ als auch GLTF — du kannst das Ergebnis also gegen das Original prüfen, ohne ein zweites Programm zu brauchen.

Wofür die beiden Formate gedacht sind

Die beiden zielen auf verschiedene Arbeit: OBJ auf den Austausch zwischen Programmen und die Bearbeitung, GLTF auf das Web und die Weitergabe fertiger Dateien. Das lohnt sich vorher abzuwägen — der Grund, aus dem es das eine gibt, ist meist der Grund, aus dem das andere unpraktisch ist.

GLTF kommt von Khronos Group und stammt aus 2015, festgehalten in glTF 2.0. Blender, three.js und Babylon.js lesen das Format.

OBJ wurde 1992 veröffentlicht, GLTF 2015. Das ältere ist in der Regel die sicherere Datei zum Weitergeben, das jüngere erledigt dieselbe Aufgabe mit weniger Bytes.

OBJ zu GLTF: häufige Fragen

Werden meine OBJ-Dateien irgendwo hochgeladen?

Nein. Diese Umwandlung läuft vollständig in deinem Browser, die Datei verlässt dein Gerät also nicht. Du kannst das selbst nachprüfen: Öffne den Netzwerk-Tab der Entwicklerwerkzeuge und wandle etwas um. Zu sehen sind die Seite selbst und die Statistik- und Werbeanfragen, mit denen dieser Dienst bezahlt wird — und keine einzige, die deine Datei trägt.

Ist das Umwandeln von OBJ in GLTF kostenlos?

Ja. Kein Konto, kein Wasserzeichen und kein Tageskontingent, das sich verbraucht — es läuft auf deinem eigenen Rechner, du darfst also so oft wiederkommen, wie du willst. Dateien bis 100 MB verarbeitet der Browser, 100 auf einmal.

Geht beim Umwandeln von OBJ in GLTF Qualität verloren?

OBJ und GLTF beschreiben Inhalte auf grundverschiedene Weise. Die Umwandlung ist deshalb ein Nachbau und keine Kopie: originalgetreu, aber nicht Byte für Byte dasselbe. Nur die Geometrie. Materialien, Farben, Texturen und Animation kommen nicht mit, und ein mehrfach platziertes Modell kommt so zurück, dass jede Kopie fest an ihrer eigenen Position sitzt.

Muss ich etwas installieren, um GLTF-Dateien zu öffnen?

Für die Umwandlung selbst nicht — sie läuft in dem Browser, den du ohnehin offen hast. Zum Öffnen brauchst du danach das Programm, das auf deinem Gerät üblicherweise GL Transmission Format anzeigt.

Mehr über diese Formate