Aktualisiert 13. September 2026
Was eine 3D-Konvertierung beibehält und wie viel sie kostet
Die Konvertierung eines Meshes ist weder kostenlos noch eine verlustfreie Operation. GLB und glTF bewahren alles. OBJ bewahrt die einzelnen Objekte und deren Materialnamen, verwirft jedoch die Vertex-Farbe. STL bewahrt nur die Dreiecke. PLY bewahrt die Vertex-Farbe, aber vereinheitlicht die Szene zu einem einzigen Mesh. USDZ bewahrte die beiden Objekte und die UVs, verlor jedoch die Vertex-Farbe und die Materialnamen beim erneuten Einlesen, und schreibt ein Zip von USDA. Die unten stehenden Zahlen wurden gemessen, nicht geschätzt.
Jede Zahl auf dieser Seite stammt aus der Ausführung desselben Konverters, den diese Seite verwendet, mit realen Dateien, und aus dem direkten Lesen der Attribute aus den Bytes, die er geschrieben hat. Gemessen mit 13. September 2026 mit three.js r179Die Methode befindet sich am Ende der Seite und das Skript ist im Repository.

Was speichert jedes Format?#
Eine Referenzszene mit zwei Würfeln mit unterschiedlichen Namen, von denen jeder sein eigenes metallisches Material mit Namen, Farbwerte pro Scheitelpunkt, UV-Koordinaten und Normalen hatte, wurde in sechs Zielformate konvertiert. GLB und glTF kamen vollständig zurück. Alle anderen Formate verloren etwas, und jedes verlor etwas anderes.
| Ziel | Zwei Objekte | UV-Koordinaten | Farbe pro Scheitelpunkt | Materialnamen | Anzahl der Scheitelpunkte |
|---|---|---|---|---|---|
| GLB | Werden beibehalten 2 | Wird beibehalten | Wird beibehalten | Wird beibehalten | 48 Scheitelpunkte |
| glTF | Werden beibehalten 2 | Wird beibehalten | Wird beibehalten | Wird beibehalten | 48 Scheitelpunkte |
| OBJ | Werden beibehalten 2 | Wird beibehalten | Geht verloren | Wird beibehalten | 72 Scheitelpunkte |
| STL | Zu einem zusammengeführt | Geht verloren | Geht verloren | Geht verloren | 72 Scheitelpunkte |
| PLY | Zu einem zusammengeführt | Wird beibehalten | Wird beibehalten | Geht verloren | 48 Scheitelpunkte |
| USDZ | Werden beibehalten 2 | Wird beibehalten | Geht verloren | Geht verloren | 72 Scheitelpunkte |
Warum führen STL und PLY eine Szene zu einem einzigen Mesh zusammen?#
Keines der beiden Formate hat einen Szenengraphen. GLB, glTF und OBJ können mehrere benannte Objekte in einer einzigen Datei beschreiben; STL beschreibt ein einzelnes Festkörperobjekt und PLY eine einzelne Liste von Elementen, daher kommen die beiden Würfel als ein einziges Mesh an und es gibt keine Möglichkeit, sie wieder zu trennen.
Es ist der Verlust, der am meisten überrascht, weil er nicht sichtbar ist. Das konvertierte Modell sieht in einem Viewer identisch aus. Erst wenn man versucht, Teile auszuwählen, Materialien zu ändern oder einen Teil zu animieren, entdeckt man, dass die Teile nicht mehr existieren.
Wenn das Modell weiterhin trennbar sein muss, muss das Ziel GLB, glTF oder OBJ sein. Wenn es zu einem Laminator oder einem Druck mit nur einem Material geht, kostet dich das Verschmelzen nichts.
Wie sehr wächst die Datei?#
Mehr als die meisten erwarten. In einem real generierten Mesh nahm OBJ 5,6 mal so viel Platz ein wie das ursprüngliche GLB, und PLY 1,4 mal. Beide haben die gleiche Geometrie.
| Konvertierung | Quelle | Ergebnis | Verhältnis | Geschriebene Scheitelpunkte |
|---|---|---|---|---|
| mug.glb a GLB | 880 KB | 1.173 KB | 1,3x | 25.000 |
| mug.glb a glTF | 880 KB | 1.564 KB | 1,8x | 25.000 |
| mug.glb a OBJ | 880 KB | 4.928 KB | 5,6x | 150.000 |
| mug.glb a STL | 880 KB | 2.441 KB | 2,8x | 150.000 |
| mug.glb a PLY | 880 KB | 1.221 KB | 1,4x | 25.000 |
| mug.glb a USDZ | 880 KB | 2.927 KB | 3,3x | 150.000 |
| lion.glb a GLB | 8.768 KB | 11.690 KB | 1,3x | 249.369 |
| lion.glb a glTF | 8.768 KB | 15.587 KB | 1,8x | 249.369 |
| lion.glb a OBJ | 8.768 KB | 51.880 KB | 5,9x | 1.496.202 |
| lion.glb a STL | 8.768 KB | 24.352 KB | 2,8x | 1.496.202 |
| lion.glb a PLY | 8.768 KB | 12.176 KB | 1,4x | 249.369 |
| lion.glb a USDZ | 8.768 KB | 30.487 KB | 3,5x | 1.496.202 |
Warum vervielfachen OBJ und STL die Anzahl der Scheitelpunkte?#
Weil keiner von beiden Eckpunkte zwischen Dreiecken teilt. Ein gut indiziertes Mesh speichert jede Ecke nur einmal und verweist von allen Dreiecken, die sie berühren; OBJ und STL, so wie sie hier geschrieben stehen, speichern die drei Ecken jedes Dreiecks separat. Im Test mit lion.glb, das verwandelte 249.369 Eckpunkte in 1.496.202, ein paar 6 mal mehr.
Die Geometrie ändert sich nicht. Die gleiche Oberfläche, die gleichen Dreiecke, die gleiche Silhouette; nur die Buchhaltung wird teurer, und die Datei wächst ungefähr im gleichen Verhältnis.
PLY ist das nützliche Gegenbeispiel. Es behält den Index, sodass dasselbe Mesh mit einer Größe nahe dem Original geschrieben wird und weiterhin die Farbe pro Scheitelpunkt trägt. Für ein großes Mesh, bei dem nur die Geometrie erhalten werden muss, ist PLY das günstigste ehrliche Ziel auf dieser Liste.
Der Text im Gegensatz zum Binärformat verschlimmert es. glTF ist JSON mit in Base64 codierten Puffern, was etwa ein 33 Prozent mehr kostet als das identische GLB, weil Base64 jeweils drei Bytes in vier umwandelt.
Warum ist die Datei sogar beim Konvertieren von GLB zu GLB gewachsen?#
Weil der Konverter die Vertex-Normalen jeder Mesh berechnet, die ohne diese ankommt, und sie danach schreibt. Ein oft generiertes Mesh hat keine Normalattribute, sodass die Hin- und Rückreise einen zusätzlichen Vektor pro Vertex hinzufügt.
Der Test mit mug.glb ist ein klares Beispiel: es gehen ein 880 KB und gehen aus 1.173 KB, ohne dass sich die Geometrie ändert. Die hinzugefügten Normalen sind der Unterschied.
Es ist eine bewusste Entscheidung, kein Fehler. Ein Mesh ohne Normalen erscheint in den meisten Viewern mit flacher und facettierter Schattierung, sodass der Konverter sie einmal beim Laden berechnet, anstatt jede nachfolgende Software raten zu lassen.
Ändert die Konvertierung die Form?#
Nein. Jedes Ziel wurde konvertiert und anschließend wieder ausgelesen, und die Oberfläche kam identisch heraus: die gleiche Anzahl an Dreiecken und die gleiche Gesamtlänge der Oberfläche, bis zur Grenze der Messung, in einem Netz von 498.734 Dreiecken. Die Geometrie ist der Teil einer 3D-Datei, der die Konvertierung unversehrt überlebt.
| Ziel | Dreiecke danach | Flächenfehler | Wie die Koordinaten gespeichert werden |
|---|---|---|---|
| GLB | ohne Änderungen | 0% | float32 Binär |
| glTF | ohne Änderungen | 0% | Base64-Puffer |
| OBJ | ohne Änderungen | 0% | Text mit 17 Dezimalstellen |
| STL | ohne Änderungen | 0% | float32 Binär |
| PLY | ohne Änderungen | 0% | float32 Binär |
| USDZ | ohne Änderungen | 0% | Zip von USDA |
Also, hat die 3D-Konvertierung Verluste oder nicht?#
Beides, und der Unterschied ist das Nützliche. Die Geometrie verliert nichts: die Form, die hinein geht, ist die Form, die herauskommt. Alles, was die Geometrie umgibt, geht jedoch verloren, und welche Teile verloren gehen, hängt vollständig vom gewählten Ziel ab.
Hier bricht nichts die Koordinaten. GLB, STL und PLY schreiben 32-Bit-Binär-Floats. glTF bettet denselben Binärpuffer als Base64 innerhalb seines JSON ein. USDZ schreibt ein Zip von USDA. OBJ ist der einzige, der die Positionen als Dezimaltext schreibt, und er schreibt sie mit voller Genauigkeit, anstatt sie zu runden, was ein Teil des Grundes ist, warum seine Dateien viel größer sind.
Das bedeutet, dass die übliche Sorge, dass jede Konvertierung das Modell ein wenig verschlechtert, wie das erneute Speichern eines JPEG, nicht zutrifft. Von GLB zu OBJ und zurück zu konvertieren, glättet das Mesh nicht.
Was es jedoch tut, ist das Verwerfen dessen, was weiter oben auf dieser Seite erscheint: der Szenengraph in STL und PLY, die Vertex-Farbe in OBJ, STL und USDZ, die Materialnamen in STL, PLY und USDZ und die UVs in STL. Diese Verluste sind dauerhaft, im Sinne davon, dass ein erneutes Konvertieren sie nicht wiedererfinden kann.
Welches Ziel solltest du wählen?#
Wähle das Ziel nach dem, was überleben muss, nicht nach der Erweiterung, die das empfangende Werkzeug zuerst auf seiner Liste setzt. Dies sind die vertretbaren Entscheidungen basierend auf den oben gemessenen Informationen.
| Wenn du brauchst | Wähle | Warum |
|---|---|---|
| Alles behalten, in einer einzigen Datei | GLB | Das einzige Ziel, das den Szenengraphen, die Materialnamen, die UVs und die Vertex-Farbe zusammen beibehielt, mit der kleinsten Größe der Vollformate. |
| Alles gespeichert, für eine Person lesbar | glTF | Der gleiche Inhalt wie GLB, etwa um ein 33 Prozent größer, weil die Puffer in Base64 innerhalb des JSON liegen. |
| Getrennte Objekte mit Namen in einem Desktop-Programm | OBJ | Behielt die beiden Objekte und die beiden Materialnamen bei. Verwirft die Vertex-Farbe und schreibt die größte der sechs Dateien. |
| 3D-Druck | STL | Dreiecke und nichts weiter, was alles ist, was ein Slicer liest. Das kleinste Ziel, das kein glTF in einem echten Mesh ist. |
| Geometrie und Vertex-Farbe, mit geringem Gewicht | PLY | Das einzige Ziel, das nicht glTF ist, das die Vertex-Farbe behalten hat und den Index beibehält, so dass es in der Nähe der Ursprunggröße bleibt. |
| Quick Look von Apple / AR auf dem iPhone | USDZ | Es behielt die beiden Objekte und die UVs in der Referenzszene. Beim erneuten Einlesen verlor es die Vertex-Farbe und die Materialnamen. Eine USDA-Zip-Datei, die ein Telefon öffnen kann. |
Was diese Formate definiert#
Die obigen Messungen sind unsere; was jedes Format tragen kann, entscheiden wir nicht. Dies sind die Spezifikationen und Formatreferenzen, die dies entscheiden, sodass das, was auf dieser Seite steht, anhand der Quelle überprüft werden kann, statt es einfach zu glauben.
- glTF 2.0 SpezifikationDie Khronos Group
Definiere den Szenengraph, die Materialien und die Accessoires, die GLB und glTF tragen, und erkläre, warum sie die einzigen Ziele waren, die hier intakt überlebt haben.
- Medientyp model/gltf-binaryIANA
Der registrierte Typ für GLB, den oben gemessenen Binärcontainer.
- Medientyp model/stlIANA
STL wie registriert: Dreiecke und Flächennormalen, ohne ein Feld für Farbe, UV, Materialien oder Objektnamen.
- Die Wavefront OBJ-DateiformatPaul Bourke
Die stets zitierte Referenz für OBJ, die kein eigenes Feld für die Vertex-Farbe hat, was mit dem übereinstimmt, was die Konvertierung verworfen hat.
- Das Polygon-Dateiformat PLYPaul Bourke
Dokumentiere die Eigenschaften pro Scheitelpunkt, einschließlich Farbe, die PLY zum einzigen Ziel machen, das nicht glTF ist und es hier beibehält.
- Spezifikation des USDZ-DateiformatsPixar / OpenUSD
USDZ ist ein Zip, dessen erster Eintrag die USDA-Szene ist. Das ist das Paket, das dieser Konverter schreibt und liest.
Wie gemessen wurde#
Die Messung führt das Produkt aus, keine Beschreibung davon. Das Skript importiert die gleichen Loader und Exporter wie der Browser-Konverter, mit denselben Optionen, und befindet sich im Repository, damit die Zahlen reproduziert oder diskutiert werden können.
- Eine Referenzszene mit zwei cubes mit Namen erstellen, jeder mit einem benannten Metallmaterial, Scheitelpunktfarbe, UV-Koordinaten und Normalen.
- Reale erzeugte Meshes auf die gleiche Weise laden, wie der Konverter die Datei lädt, die man ihm gibt, einschließlich des Schritts, der die Vertex-Normalen berechnet, wenn ein Mesh ohne diese ankommt.
- Exportieren nach GLB, glTF, OBJ, STL, PLY und USDZ mit denselben Exportern, die der Konverter aufruft, und denselben Binäreinstellungen.
- Die Größe jedes Ergebnisses in Bytes registrieren.
- Die Attribute direkt aus den geschriebenen Bytes lesen und nicht aus einer neu geladenen Szene, da ein Loader erfindet, was die Datei nicht enthält: Ein OBJ ohne vn-Linien wird trotzdem mit einem synthetischen Normalenattribut neu geladen.
- Die Tabelle direkt aus diesem Ergebnis veröffentlichen. Gemessen das 13. September 2026 mit three.js r179.
Fragen
- Verliert eine 3D-Datei beim Konvertieren an Qualität?
- Die Form nicht. Jedes Ziel wurde konvertiert und erneut gelesen, und die Anzahl der Dreiecke sowie die Gesamtoberfläche waren identisch in einem Netz von 498.734 Dreiecken, ohne Koordinaten in irgendeinem Format zu kürzen. Was verloren geht, ist alles, was die Geometrie umgibt, und hängt vom Ziel ab: STL verwirft die UV, die Farbe, die Materialien und den Szenengraph; OBJ verwirft die Scheitelpunktfarbe; PLY verwirft die Materialnamen und fusioniert die Szene; USDZ verwirft die Scheitelpunktfarbe und die Materialnamen beim erneuten Lesen; GLB und glTF behielten alles.
- Welches 3D-Format benötigt weniger Speicher?
- GLB, in einem realen Netz. In diesen Tests schrieb GLB 1.173 KB wo OBJ schrieb 4.928 KB für dasselbe Modell, weil GLB binär ist und einen Index für gemeinsame Scheitelpunkte beibehält, während das resultierende OBJ Text ist und jede Ecke jedes Dreiecks separat speichert.
- Warum nimmt mein OBJ viel mehr Platz ein als das GLB, aus dem es entstanden ist?
- Aus zwei Gründen, beide Maßzahlen: OBJ ist Text und nicht binär, und das hier geschriebene OBJ teilt keine Scheitelpunkte zwischen Dreiecken, also vervielfacht sich die Zahl der Scheitelpunkte um etwa 6 in einem gut indexierten Netz. Die Oberfläche ist identisch; die Buchführung nicht.
- Speichert STL die Farbe?
- Nein. Ein binäres STL speichert eine Flächennormalen und drei Ecken pro Dreieck und hat kein Feld für Farbe, UV, Materialien oder Objektnamen. Das wurde in allen in diesen Tests geschriebenen STL berücksichtigt.
- Kann ich die Farbe pro Scheitelpunkt beibehalten, ohne GLB zu verwenden?
- Ja, mit PLY. In diesen Tests war es das einzige Ziel, das nicht glTF ist, das eine Farbeigenschaft in seinem Header deklariert hat. Allerdings flacht es eine Szene mit mehreren Objekten zu einem einzigen Mesh ab, sodass du die Farbe behältst, aber die Teile verlierst.
- Führt das wiederholte Konvertieren eines 3D-Modells zu einer Verschlechterung?
- Nein. Im Gegensatz zum erneuten Speichern eines JPEG sammelt eine 3D-Konvertierung keinen Fehler an: die Koordinaten werden als binäre Floats kopiert oder, im Fall von OBJ, als Dezimalzahlen mit voller Genauigkeit geschrieben. Ein Hin- und Rückweg durch eines dieser Formate lieferte die identische Oberfläche. Was nicht zurückkehrt, sind Material- und Szeneninformationen, die das Ziel von Anfang an nicht aufnehmen konnte.
- Kann ich diese Zahlen reproduzieren?
- Ja. Das Messskript befindet sich im Repository, in scripts/measure-conversions.mjs, und schreibt das JSON, das diese Seite ausliest. Es wurde zuletzt ausgeführt am 13. September 2026 mit three.js r179.