Zaktualizowano 13 września 2026
Co zachowuje konwersja 3D i ile to kosztuje
Konwersja siatki nie jest darmowa ani operacją bez strat. GLB i glTF zachowują wszystko. OBJ zachowuje oddzielne obiekty i ich nazwy materiałów, ale odrzuca kolor na wierzchołku. STL zachowuje tylko trójkąty. PLY zachowuje kolor na wierzchołku, ale spłaszcza scenę do jednej siatki. USDZ zachował oba obiekty i UV, stracił kolor na wierzchołku i nazwy materiałów po ponownym odczytaniu i zapisuje plik zip USDA. Poniższe liczby zostały zmierzone, a nie oszacowane.
Każda liczba na tej stronie pochodzi z uruchomienia tego samego konwertera, którego używa ta strona, na rzeczywistych plikach i z odczytania atrybutów bezpośrednio z bajtów, które zostały zapisane. Zmierzone 13 września 2026 z three.js r179. Metoda znajduje się na końcu strony, a skrypt jest w repozytorium.

Co zachowuje każdy format?#
Scena referencyjna z dwoma sześcianami o różnych nazwach, z każdym własnym materiałem metalicznym nazwanym, kolorem na wierzchołku, współrzędnymi UV i normalnymi, została przekonwertowana do sześciu formatów docelowych. GLB i glTF wróciły kompletne. Wszystkie pozostałe formaty coś straciły, a każdy stracił coś innego.
| Cel | Dwa obiekty | Współrzędne UV | Kolor według wierzchołka | Nazwy materiałów | Liczba wierzchołków |
|---|---|---|---|---|---|
| GLB | Zachowane 2 | Zachowane | Zachowane | Zachowane | 48 Wierzchołki |
| glTF | Zachowane 2 | Zachowane | Zachowane | Zachowane | 48 Wierzchołki |
| OBJ | Zachowane 2 | Zachowane | Utracone | Zachowane | 72 Wierzchołki |
| STL | Scalono w 1 | Utracone | Utracone | Utracone | 72 Wierzchołki |
| PLY | Scalono w 1 | Zachowane | Zachowane | Utracone | 48 Wierzchołki |
| USDZ | Zachowane 2 | Zachowane | Utracone | Utracone | 72 Wierzchołki |
Dlaczego STL i PLY łączą scenę w jedną siatkę?#
Żaden z tych formatów nie ma grafu sceny. GLB, glTF i OBJ mogą opisywać wiele obiektów z nazwami w tym samym pliku; STL opisuje pojedynczy obiekt bryłowy, a PLY pojedynczą listę elementów, więc oba sześciany trafiają jako jedna siatka i nie ma sposobu, by je ponownie rozdzielić.
To jest strata, która najbardziej zaskakuje, ponieważ jej nie widać. Przekształcony model wygląda identycznie w przeglądarce. Dopiero gdy próbujesz zaznaczyć, zmienić materiał lub animować jedną z jego części, odkrywasz, że części już nie istnieją.
Jeśli model musi pozostać rozdzielny, cel musi być GLB, glTF lub OBJ. Jeśli idzie do laminatora lub do druku z jednego materiału, scalenie nic cię nie kosztuje.
O ile powiększa się plik?#
Więcej, niż większość się spodziewa. W prawdziwej wygenerowanej siatce OBJ zajmował 5,6 krotnie więcej niż oryginalny GLB, a PLY 1,4 krotnie. Oba mają tę samą geometrię.
| Konwersja | Źródło | Wynik | Proporcja | Zapisane wierzchołki |
|---|---|---|---|---|
| mug.glb a GLB | 880 KB | 1173 KB | 1,3x | 25 000 |
| mug.glb a glTF | 880 KB | 1564 KB | 1,8x | 25 000 |
| mug.glb a OBJ | 880 KB | 4928 KB | 5,6x | 150 000 |
| mug.glb a STL | 880 KB | 2441 KB | 2,8x | 150 000 |
| mug.glb a PLY | 880 KB | 1221 KB | 1,4x | 25 000 |
| mug.glb a USDZ | 880 KB | 2927 KB | 3,3x | 150 000 |
| lion.glb a GLB | 8768 KB | 11 690 KB | 1,3x | 249 369 |
| lion.glb a glTF | 8768 KB | 15 587 KB | 1,8x | 249 369 |
| lion.glb a OBJ | 8768 KB | 51 880 KB | 5,9x | 1 496 202 |
| lion.glb a STL | 8768 KB | 24 352 KB | 2,8x | 1 496 202 |
| lion.glb a PLY | 8768 KB | 12 176 KB | 1,4x | 249 369 |
| lion.glb a USDZ | 8768 KB | 30 487 KB | 3,5x | 1 496 202 |
Dlaczego OBJ i STL mnożą liczbę wierzchołków?#
Ponieważ żaden z nich nie dzieli wierzchołków między trójkątami. Dobrze zindeksowana siatka przechowuje każdy wierzchołek tylko raz i odnosi się do niego ze wszystkich trójkątów, które go dotykają; OBJ i STL, tak jak są zapisane tutaj, przechowują osobno trzy wierzchołki każdego trójkąta. W teście z lion.glb, to zamieniło 249 369 wierzchołki na 1 496 202, kilka 6 razy więcej.
Geometria się nie zmienia. Ta sama powierzchnia, te same trójkąty, ta sama sylwetka; tylko rachunkowość kosztuje więcej, a plik rośnie mniej więcej w tym samym proporcjonalnym stosunku.
PLY jest przydatnym kontrprzykładem. Zachowuje indeks, więc ta sama siatka jest zapisywana w rozmiarze zbliżonym do oryginału i nadal przenosi kolor według wierzchołka. Dla dużej siatki, w której trzeba tylko zachować geometrię, PLY jest najtańszym uczciwym celem z tej listy.
Tekst w porównaniu z binarnym to pogarsza. glTF to JSON z buforami zakodowanymi w base64, co kosztuje około 33 procent więcej niż identyczny GLB, ponieważ base64 przekształca co trzy bajty w cztery.
Dlaczego plik urósł nawet po konwersji z GLB do GLB?#
Ponieważ konwerter oblicza normalne wierzchołkowe każdej siatki, która pojawia się bez nich, a następnie je zapisuje. Wygenerowana siatka często nie ma atrybutów normalnych, więc cykl w obie strony dodaje jeden pełny wektor na wierzchołek.
Test z mug.glb to wyraźny przykład: wchodzą 880 KB I odchodzą 1173 KB , bez żadnej zmiany geometrii. Dodane normalne to różnica.
To świadoma decyzja, a nie wada. Siatka bez normalnych wygląda płasko i fasetowano w większości mikroskopów, więc konwerter oblicza je raz podczas ładowania, zamiast zostawiać kolejne narzędzia do zgadywania.
Czy konwersja zmienia formę?#
Nie. Każdy cel został przekonwertowany, a następnie ponownie odczytany, a powierzchnia wyszła identyczna: ta sama liczba trójkątów i ta sama całkowita powierzchnia, do granicy pomiaru, w siatce 498 734 trójkątów. Geometria to część pliku 3D, która pozostaje nienaruszona podczas konwersji.
| Cel | Trójkąty po | Błąd powierzchni | Jak zapisywane są współrzędne |
|---|---|---|---|
| GLB | bez zmian | 0% | float32 binarny |
| glTF | bez zmian | 0% | bufor w base64 |
| OBJ | bez zmian | 0% | tekst z 17 przecinkami dziesiętnymi |
| STL | bez zmian | 0% | float32 binarny |
| PLY | bez zmian | 0% | float32 binarny |
| USDZ | bez zmian | 0% | zip USDA |
Więc czy konwersja 3D jest stratna, czy nie?#
Oba, a rozróżnienie jest użyteczne. Geometria nic nie traci: kształt, który wchodzi, to kształt, który wychodzi. Wszystko, co otacza geometrię, faktycznie się traci, a jakie części tracisz, zależy całkowicie od wybranego celu.
Tutaj nic nie przerywa współrzędnych. GLB, STL i PLY zapisują binarne floaty o 32 bitach. glTF osadza ten sam bufor binarny jako base64 w swoim JSON. USDZ zapisuje zip z USDA. OBJ jest jedynym, który zapisuje pozycje jako tekst dziesiętny i zapisuje je z pełną dokładnością zamiast je zaokrąglać, co jest częścią powodu, dla którego jego pliki są znacznie większe.
To oznacza, że zwykła obawa, że każda konwersja nieznacznie pogarsza model, jak ponowne zapisanie JPEG, nie ma zastosowania. Konwersja z GLB do OBJ i z powrotem nie wygładza siatki.
To, co faktycznie robi, to odrzucenie tego, co pojawia się wyżej na tej stronie: graf sceny w STL i PLY, kolor według wierzchołków w OBJ, STL i USDZ, nazwy materiałów w STL, PLY i USDZ oraz UV w STL. Te straty są trwałe, w tym sensie, że ponowna konwersja nie może ich wymyślić na nowo.
Jaki cel powinieneś wybrać?#
Wybierz cel w zależności od tego, co musi przetrwać, a nie według rozszerzenia, które narzędzie odbierające umieszcza jako pierwsze na swojej liście. Oto obronne wybory na podstawie tego, co zmierzono powyżej.
| Jeśli potrzebujesz | Wybierz | Dlaczego |
|---|---|---|
| Wszystko zachowane, w jednym pliku | GLB | Jedyny format docelowy, który zachował razem graf sceny, nazwy materiałów, UV oraz kolor na wierzchołkach, przy najmniejszym rozmiarze pełnych formatów. |
| Wszystko zachowane, czytelne dla człowieka | glTF | Ta sama zawartość co GLB, około 33 procent większa, ponieważ bufory są w base64 wewnątrz JSON. |
| Oddzielne obiekty z nazwą w programie desktopowym | OBJ | Zachował oba obiekty i obie nazwy materiałów. Odrzuca kolor na wierzchołkach i zapisuje największy plik z sześciu. |
| Druk 3D | STL | Tylko trójkąty i nic więcej, co jest wszystkim, co odczytuje slicer. Najmniejszy z celów innych niż glTF w rzeczywistej siatce. |
| Geometria i kolor na wierzchołkach, mało ważąca | PLY | Jedyny format docelowy, który nie jest glTF, który zachował kolor wierzchołków i utrzymuje indeks, więc pozostaje blisko rozmiaru oryginału. |
| Quick Look od Apple / AR na iPhone | USDZ | Zachowano oba obiekty i UV w scenie referencyjnej. Stracono kolor wierzchołków i nazwy materiałów po ponownym odczytaniu. Archiwum zip USDA, które telefon może otworzyć. |
Co definiuje te formaty#
Pomiary powyżej są nasze; to, co każdy format może przenosić, nie jest przez nas decydowane. To są specyfikacje i referencje formatów, które to decydują, aby to, co mówi ta strona, można było sprawdzić u źródła, zamiast wierzyć bez dowodu.
- Specyfikacja glTF 2.0The Khronos Group
Zdefiniuj graf sceny, materiały i akcesoria, które noszą GLB i glTF, i wyjaśnij, dlaczego były jedynymi miejscami docelowymi, które przetrwały nienaruszone tutaj.
- Typ medium model/gltf-binaryIANA
Zarejestrowany typ dla GLB, binarny kontener, który został zmierzony powyżej.
- Typ medium model/stlIANA
STL zgodnie z rejestrem: trójkąty i normalne ścian, bez żadnego pola na kolor, UV, materiały ani nazwy obiektu.
- Format pliku Wavefront OBJPaul Bourke
Zwykła referencja do OBJ, który nie ma własnego pola na kolor na wierzchołku, co odpowiada temu, co zostało odrzucone podczas konwersji.
- Format pliku poligonowego PLYPaul Bourke
Udokumentuj właściwości według wierzchołka, włączając kolor, które sprawiają, że PLY jest jedynym miejscem docelowym, które nie jest glTF, zachowując je tutaj.
- Specyfikacja formatu pliku USDZPixar / OpenUSD
USDZ jest plikiem zip, którego pierwszym elementem jest scena USDA. To jest pakiet, który ten konwerter zapisuje i odczytuje.
Jak mierzono#
Pomiar wykonuje produkt, a nie jego opis. Skrypt importuje te same ładowarki i eksportery, co konwerter przeglądarkowy, z tymi samymi opcjami i znajduje się w repozytorium, aby można było odtworzyć lub omówić liczby.
- Zbuduj scenę odniesienia z dwoma nazwanymi sześcianami, z których każdy ma nazwany materiał metaliczny, kolor według wierzchołka, współrzędne UV i normalne.
- Ładować wygenerowane rzeczywiste siatki w ten sam sposób, w jaki konwerter ładuje plik, który mu podajesz, w tym krok, który oblicza normalne wierzchołków, gdy siatka ich nie ma.
- Eksportować do GLB, glTF, OBJ, STL, PLY i USDZ tymi samymi eksporterami, które wywołuje konwerter i z tymi samymi ustawieniami binarnymi.
- Zarejestrować rozmiar w bajtach każdego wyniku.
- Odczytywać atrybuty bezpośrednio z zapisanych bajtów, a nie ze wczytanej sceny, ponieważ loader wymyśla to, czego plik nie zawiera: OBJ bez linii vn jest ponownie wczytywany z syntetycznym atrybutem normalnych.
- Publikować tabelę bezpośrednio z tego wyniku. Mierzony 13 września 2026 z three.js r179.
Pytania
- Czy konwersja pliku 3D powoduje utratę jakości?
- Kształt nie. Każdy cel został przekonwertowany i odczytany ponownie, a liczba trójkątów i całkowita powierzchnia pozostały identyczne w siatce 498 734 trójkątów, bez zaokrąglania współrzędnych w jakimkolwiek formacie. To, co jest tracone, to wszystko, co otacza geometrię, i zależy od celu: STL odrzuca UV, kolor, materiały i graf sceny; OBJ odrzuca kolor według wierzchołka; PLY odrzuca nazwy materiałów i scala scenę; USDZ odrzuca kolor według wierzchołka i nazwy materiałów przy ponownym odczycie; GLB i glTF zachowywały wszystko.
- Który format 3D zajmuje mniej?
- GLB, w rzeczywistej siatce. W tych testach GLB zapisał 1173 KB gdzie OBJ zapisał 4928 KB dla tego samego modelu, ponieważ GLB jest binarny i utrzymuje indeks współdzielonych wierzchołków, podczas gdy powstały OBJ jest tekstowy i zapisuje osobno każdy wierzchołek każdego trójkąta.
- Dlaczego mój OBJ zajmuje o wiele więcej niż GLB, z którego powstał?
- Z dwóch powodów, obu miar: OBJ jest tekstowy, a nie binarny, a OBJ zapisywany tutaj nie współdzieli wierzchołków między trójkątami, więc liczba wierzchołków mnoży się przez … 6 w dobrze indeksowanej siatce. Powierzchnia jest identyczna; matematyka nie.
- Czy STL zachowuje kolor?
- Nie. STL binarny zapisuje normalną ściany i trzy wierzchołki na trójkąt, i nie ma żadnego pola na kolor, UV, materiały ani nazwy obiektów. To zostało uwzględnione we wszystkich STL zapisanych w tych testach.
- Czy mogę zachować kolor na wierzchołku bez użycia GLB?
- Tak, z PLY. W tych testach był to jedyny cel, który nie jest glTF, który zadeklarował właściwość koloru w swoim nagłówku. Owszem, spłaszcza scenę z wieloma obiektami do jednej siatki, więc zachowujesz kolor i tracisz części.
- Czy wielokrotna konwersja modelu 3D go degraduję?
- Nie. W przeciwieństwie do ponownego zapisywania JPEG, konwersja 3D nie gromadzi błędu: współrzędne są kopiowane jako liczby zmiennoprzecinkowe binarne lub, w przypadku OBJ, zapisywane jako liczby dziesiętne z pełną precyzją. Podróż w obie strony przez którykolwiek z tych formatów zwróciła identyczną powierzchnię. To, co nie wraca, to informacje o materiałach i scenie, które cel nie mógł przechować od samego początku.
- Czy mogę odtworzyć te liczby?
- Tak. Skrypt pomiarowy znajduje się w repozytorium, w scripts/measure-conversions.mjs, i zapisuje JSON, który odczytuje ta strona. Był uruchamiany ostatnio 13 września 2026 z three.js r179.