UltKit

STL, OBJ czy 3MF: jaki format pliku 3D wybrać?

Wybierz STL do jednokolorowego wydruku, który trzeba tylko pociąć w slicerze, OBJ, gdy model ma tekstury do renderingu lub silnika gry, a 3MF, gdy obsługuje go Twój slicer i chcesz zachować jednostki, kolory oraz wiele części. Format decyduje o tym, jakie metadane trafiają razem z siatką; nigdy nie decyduje o tym, czy sama siatka jest poprawna.

Jonas WeberJonas WeberRedaktor wydajności stron internetowych
Zaktualizowano 12 min czytania
Biurkowa drukarka 3D w przezroczystej obudowie na białym biurku, obok laptop z modelem 3D i kolorowe wydrukowane elementy, m.in. mapa terenu i czerwone koło zębate

STL: lista trójkątów i nic więcej

STL powstał w 1987 roku dla pierwszych maszyn stereolitograficznych firmy 3D Systems i widać to w jego konstrukcji. Plik to płaska lista trójkątów, z których każdy opisany jest normalną ścianki i trzema wierzchołkami. Nie ma wspólnej tablicy wierzchołków, więc narożnik stykający się z sześcioma trójkątami zapisany jest sześć razy. Nie ma też pola jednostki: współrzędna 25 może oznaczać milimetry, cale lub metry, a prawie każdy slicer zakłada milimetry. Kolor, tekstura i nazwy części nie mieszczą się w podstawowym formacie, i właśnie dlatego czyta go każdy slicer, program CAD i serwis druku.

STL występuje w dwóch kodowaniach. ASCII STL zapisuje wszystko tekstem, w liniach takich jak facet normal, outer loop i vertex 12.5 0 3.2, więc można go otworzyć w edytorze tekstu i odczytać liczby. Binarny STL zaczyna się 80-bajtowym nagłówkiem i 4-bajtową liczbą trójkątów, a potem zapisuje każdy trójkąt jako dwanaście 4-bajtowych liczb zmiennoprzecinkowych plus 2-bajtowe pole atrybutu: dokładnie 50 bajtów na trójkąt. Dzięki tej regule łatwo przewidzieć rozmiar. Model z milionem trójkątów to około 50 MB w wersji binarnej, a wersja ASCII tej samej siatki jest zwykle cztery do sześciu razy większa, bo każda cyfra staje się znakiem.

Prostota jest zarazem siłą i pułapką. STL nie powie, czy miał być jedną częścią, czy trzema, czy wyeksportowano go w calach, ani czy jego trójkąty faktycznie zamykają bryłę. Slicer ustala to z surowych współrzędnych, a gdy się pomyli, dostajemy część 25,4 razy za małą albo brakującą ściankę. Dla jednokolorowej części, którą sam zaprojektowałeś i wyeksportowałeś w milimetrach, nie ma to znaczenia, a STL pozostaje formatem, który najrzadziej zostaje odrzucony.

OBJ: wielokąty, UV i osobny plik materiałów

OBJ pochodzi od Wavefront Technologies, której oprogramowanie Advanced Visualizer używało go pod koniec lat 80. W latach 90. rozpowszechnił się jako tekstowy format wymieniany przez niemal każdy program 3D. W przeciwieństwie do STL przechowuje listę wierzchołków i buduje ściany z indeksów, więc wspólny narożnik zapisany jest raz, a ściany mogą być trójkątami, czworokątami lub większymi wielokątami. Linie zaczynające się od v zawierają pozycje, vt współrzędne tekstur (UV), vn normalne, a f ściany. Grupy (g) i obiekty (o) nazywają części, dlatego OBJ przechodzi przez Blendera, Mayę czy ZBrusha z zachowaną strukturą.

Wygląd modelu znajduje się poza plikiem .obj. Linia mtllib wskazuje towarzyszący plik .mtl, a linie usemtl przypisują materiały do ścian. Plik .mtl przechowuje kolory, takie jak Kd (rozproszony), i wskazuje obrazy tekstur wpisami typu map_Kd wood.png. Model OBJ z teksturą to więc co najmniej trzy pliki: geometria, biblioteka materiałów i jeden lub więcej obrazów, wszystkie wskazane ścieżkami względnymi. Jeśli wyślesz sam .obj, odbiorca zobaczy szary model. Ten podział jest przydatny w produkcji gier i efektów wizualnych, gdzie graficy zmieniają tekstury bez dotykania geometrii, i jest najczęstszym powodem, dla którego pobrany model wygląda źle.

OBJ ma ten sam słaby punkt co STL, jeśli chodzi o skalę: przechowuje gołe liczby bez jednostki. Większość narzędzi do modelowania zapisuje metry lub centymetry, a slicery czytają milimetry, więc OBJ ze sklepu z zasobami do gier może trafić do slicera z błędem 10 lub 1000 razy. Do druku OBJ nie dodaje niczego, z czego korzysta slicer, poza kolorem wierzchołków w kilku programach, więc jeśli chcesz wydrukować zasób graficzny, zwykle najprościej zachować tekstury do renderowania, a do slicera wysłać czystą siatkę. W przeciwnym kierunku zamiana STL na OBJ to najkrótsza droga od modelu do druku do renderowania lub gry.

3MF: pakiet ZIP stworzony do druku

3MF opublikowało w 2015 roku 3MF Consortium, grupa założona przez Microsoft wraz z firmami z branży druku i CAD. Plik .3mf to archiwum ZIP, ten sam format kontenera, który opisujemy w artykule ZIP, RAR czy 7z. Zmień rozszerzenie na .zip, a znajdziesz plik XML 3D/3dmodel.model z siatką, plik typów zawartości, pliki relacji, a często także miniatury i konfigurację slicera. Każdy model deklaruje swoją jednostkę (mikron, milimetr, centymetr, cal, stopa lub metr), więc problem skali, który nęka STL i OBJ, po prostu nie występuje. Kolory, materiały bazowe, wiele obiektów i ich rozmieszczenie na stole roboczym należą do specyfikacji.

Specyfikacja wymaga też, aby siatki były rozmaitościowe (manifold) i spójnie zorientowane: każda krawędź należy do dokładnie dwóch trójkątów, a wszystkie są skierowane na zewnątrz. Eksportery przestrzegające reguł nie zapiszą otwartej, samoprzecinającej się geometrii, którą STL chętnie przenosi. Obsługa w obecnych narzędziach jest szeroka. PrusaSlicer, Bambu Studio, OrcaSlicer i UltiMaker Cura czytają 3MF, PrusaSlicer i Bambu Studio zapisują cały projekt jako .3mf z ustawieniami druku i malowanymi kolorami, a aplikacja Microsoft 3D Builder w Windows otwiera go bezpośrednio. Słabym punktem są starsze oprogramowanie sprzętowe, portale farm druku i importery CAD, które nadal oczekują STL; w takim przypadku skonwertuj 3MF na STL i pogódź się z tym, że dodatki zostaną za nami.

from ↓ · to →UnitsColorTexturesWiele częściUstawienia drukuReguła rozmaitości
STL– STL to Units: no– STL to Color: no– STL to Textures: no– STL to Wiele części: no– STL to Ustawienia druku: no– STL to Reguła rozmaitości: no
OBJ– OBJ to Units: noOBJ to Color: yesOBJ to Textures: yesOBJ to Wiele części: yes– OBJ to Ustawienia druku: no– OBJ to Reguła rozmaitości: no
3MF3MF to Units: yes3MF to Color: yes3MF to Textures: yes3MF to Wiele części: yes3MF to Ustawienia druku: yes3MF to Reguła rozmaitości: yes
supported not offeredWiersze to formaty, kolumny to informacje, które może przenosić sam plik. Kolory i tekstury OBJ wymagają osobnego pliku .mtl i obrazów; tekstury 3MF pochodzą z rozszerzenia materiałów. Niektóre narzędzia zapisują kolor w nieużywanych bajtach binarnego STL, ale żaden standard tego nie obejmuje.
Rząd drukarek 3D z otwartą ramą na drewnianych stołach, a na stole roboczym najbliższej z nich kilka niebieskich cylindrycznych części
Zdjęcie: Unsplash

Dopasowanie formatu do zadania

Właściwy format zależy od tego, dokąd trafi plik, a nie od tego, który jest nowszy. Jeśli następnym krokiem jest slicer, a część ma jeden kolor, STL wystarczy i nadal jest formatem rozumianym przez każde forum, bibliotekę modeli i serwis druku. Jeśli następnym krokiem jest renderer, silnik gry lub program do modelowania innego grafika, OBJ zachowa UV, normalne i nazwane grupy, które STL odrzuca, a jego tekstowa forma ułatwia szukanie problemów.

3MF jest potrzebny, gdy plik niesie więcej niż geometrię. Wielokolorowy wydruk namalowany w Bambu Studio, stół z dwunastoma częściami ułożonymi do jednego zadania, część zaprojektowana w calach czy projekt, który chcesz otworzyć ponownie z tą samą wysokością warstwy i wypełnieniem, wymagają 3MF, bo żaden inny format z tej listy nie pomieści takich informacji. Gdy plik ma trafić w kilka miejsc, zachowaj najbogatszą wersję jako kopię główną i eksportuj z niej prostsze za pomocą konwertera modeli 3D, zamiast łączyć kolejne konwersje.

STL do zwykłych wydruków

Jedna część, jeden kolor, eksport w milimetrach. Otwiera się w każdym slicerze, oknie importu CAD i formularzu serwisu druku.

OBJ do modeli z teksturami

UV, normalne i nazwane grupy dla Blendera, Mayi, Unity lub Unreal. Dołącz plik .mtl i obrazy tekstur.

3MF do nowoczesnych slicerów

Prawdziwe jednostki, kolory, kilka obiektów i ustawienia druku w jednym ZIP-ie. Natywny format projektu PrusaSlicer i Bambu Studio.

Pięć sposobów, w jakie plik 3D może zawieść

Większość nieudanych wydruków i błędnych importów, które przypisuje się formatowi, to tak naprawdę problemy z siatką albo z założeniami programu odbierającego. STL jest najbardziej narażony, bo nie niesie metadanych wychwytujących pomyłki; OBJ ma te same problemy ze skalą i brakującymi plikami; 3MF unika większości z nich dzięki konstrukcji, choć niedbały eksporter nadal może zapisać złą siatkę. Rozwiń poniższe wiersze, aby zobaczyć, jak wygląda każda usterka i skąd zwykle się bierze.

Siatka nierozmaitościowa

Krawędzie należące do jednego trójkąta albo do trzech lub więcej, szczeliny między powierzchniami lub ścianki o zerowej grubości. Slicer pokazuje brakujące warstwy, przypadkowe dziury lub ostrzeżenie o otwartych krawędziach. Przyczyna leży w modelowaniu lub eksporcie, często w łączeniu części, które tylko się stykają.

Odwrócone normalne

Niektóre trójkąty są skierowane do wewnątrz. Renderery pokazują czarne lub przezroczyste plamy, a slicery mogą traktować ten obszar jak pustą przestrzeń. Naprawi to polecenie przeliczenia normalnych w Blenderze, Meshmixerze lub narzędziu naprawy w slicerze.

Pomylone milimetry i cale

Część narysowana w calach trafia do slicera zakładającego milimetry 25,4 razy za mała; centymetry odczytane jako milimetry dają błąd 10-krotny. STL i OBJ nie zapisują jednostki, więc ustawiasz ją przy eksporcie lub konwersji.

Brak pliku .mtl lub tekstur

OBJ, który ładuje się na szaro lub w kolorze magenta, stracił bibliotekę materiałów lub obrazy albo ścieżki w pliku .mtl wskazują folder na komputerze autora. Trzymaj wszystkie pliki w jednym folderze i spakuj je razem.

Ogromne pliki ASCII STL

Szczegółowy skan zapisany jako ASCII STL może przekroczyć kilkaset megabajtów, co spowalnia slicery i przekracza limity wysyłania. Ponowny eksport tej samej siatki jako binarny STL zmniejsza plik mniej więcej pięciokrotnie bez zmiany ani jednego trójkąta.

Jak duże bywają pliki w każdym formacie

Rozmiar wynika ze struktury. Binarny STL ma stałe 50 bajtów na trójkąt, więc można go obliczyć przed eksportem. ASCII STL powtarza każdy narożnik jako tekst i zwykle jest cztery do sześciu razy większy od binarnego. OBJ zapisuje każdy wspólny wierzchołek raz i odwołuje się do niego indeksem, więc dla typowej zamkniętej siatki jest mniejszy niż ASCII STL i mniej więcej na poziomie binarnego STL, a większy, jeśli zawiera też UV i normalne. 3MF przechowuje indeksowany XML i kompresuje go w ZIP-ie, co zwykle czyni go najmniejszym z trójki dla tej samej geometrii.

Poniższe wartości są typowe dla zamkniętej siatki z około 500 000 trójkątów, na przykład szczegółowej figurki. Rzeczywiste pliki różnią się zależnie od dokładności współrzędnych i eksportera, więc traktuj je jako rzędy wielkości, przydatne, gdy serwis druku ogranicza wysyłane pliki albo STL wyeksportowany z 3MF wychodzi kilka razy większy.

Binarny STL (500 000 trójkątów × 50 bajtów)
≈ 25 MB
ASCII STL, ta sama siatka, typowo
≈ 100–150 MB
OBJ bez UV, typowo
≈ 15–30 MB
3MF po kompresji ZIP, typowo
≈ 5–12 MB

Co naprawia konwersja, a czego nigdy nie naprawi

Konwersja odczytuje trójkąty z jednego kontenera i zapisuje je w drugim. Wszystko, co format docelowy potrafi wyrazić, zostaje przeniesione; reszta jest pomijana. Dlatego STL na OBJ jest bezstratny dla geometrii, 3MF na STL traci kolory, jednostki i układ stołu, a OBJ na STL traci tekstury i nazwy części. W narzędziach 3D w UltKit dodatkowe decyzje są jawne: Jednostki modelu informują konwerter, jakiej skali używa źródło, Oś pionowa obsługuje różnicę między osią Y w górę a Z w górę w silnikach gier i slicerach, a Scal w jedną siatkę decyduje, czy oddzielne części pozostaną oddzielne.

Konwersja nigdy nie naprawia siatki. Jeśli STL ma dziurę, OBJ z niego wykonany ma tę samą dziurę, a eksporter 3MF albo ją odrzuci, albo zapisze mimo wszystko. Naprawa to osobny krok w narzędziu do siatek lub we wbudowanym naprawiaczu slicera i najlepiej zrobić ją raz, w pliku głównym, zanim wyeksportujesz cokolwiek innego. Tak samo jest ze skalą: konwersja nie może wiedzieć, że część miała być w calach, jeśli jej tego nie powiesz. Szczegółowość działa podobnie: STL o niskiej liczbie wielokątów zostanie OBJ lub 3MF o niskiej liczbie wielokątów, więc gdy liczy się jakość, wyeksportuj model ponownie ze źródła.

Co zmienia zmiana formatu

  • Przenosi te same trójkąty do kontenera, który akceptuje inny program
  • Stosuje jednostkę wybraną w polu Jednostki modelu, naprawiając błąd skali 25,4× lub 10×
  • Obraca model między osią Y w górę a Z w górę za pomocą Oś pionowa
  • Zmniejsza ASCII STL, zapisując zamiast niego wersję binarną
  • Zachowuje lub scala oddzielne części, zależnie od Scal w jedną siatkę

Co zostaje dokładnie takie, jakie było

  • Dziury, otwarte krawędzie i geometria nierozmaitościowa
  • Odwrócone lub niespójne normalne
  • Samoprzecinające się części i ścianki o zerowej grubości
  • Szczegóły utracone przy pierwszym eksporcie siatki
  • Kolory i tekstury, gdy format docelowy nie ma na nie miejsca

Tabela decyzyjna: STL, OBJ czy 3MF

Przy tym pytaniu zawsze wracają jeszcze dwa inne formaty. STEP (ISO 10303) przechowuje dokładne bryły i powierzchnie zamiast trójkątów, więc to format do użycia, gdy część ma wrócić do Fusion 360, SolidWorks lub FreeCAD w celu edycji. GLB, binarna forma glTF 2.0 grupy Khronos, pakuje siatkę wraz z materiałami i teksturami w jeden plik w metrach i jest formatem do pokazywania modelu w sieci lub w AR na Androidzie.

Dla trzech formatów omawianych w artykule poniższa tabela podsumowuje wybór według miejsca docelowego. Jeśli pasują dwa wiersze, wybierz format niosący więcej informacji, a prostszy wyeksportuj później; przejście z 3MF na STL jest łatwe, a odtwarzanie utraconych kolorów lub jednostek to praca ręczna.

Wybierz według tego, dokąd trafi plik
SytuacjaNajlepszy formatDlaczego
Jednokolorowa część do dowolnego sliceraSTL (binarny)Powszechna obsługa; slicer nie potrzebuje niczego więcej
Wysyłanie do biblioteki modeli lub serwisu drukuSTL, a także 3MF, jeśli jest dostępnySTL jest zawsze akceptowany; 3MF zachowuje jednostki i kolory
Wydruk wielokolorowy lub z wielu materiałów3MFJedyny format z tej listy, który przechowuje kolory i materiały poszczególnych części dla slicerów
Stół z kilkoma częściami i ustawieniami druku3MFPrzechowuje rozmieszczenie obiektów i ustawienia slicera w jednym pliku
Część zaprojektowana w calach3MFDeklaruje jednostkę, więc nic nie jest skalowane przez 25,4
Model z teksturami do Blendera, Unity lub UnrealOBJ (+ .mtl i obrazy)Zachowuje UV, normalne i przypisania materiałów
Szybkie sprawdzenie w edytorze tekstuOBJ lub ASCII STLZwykły tekst, który można czytać linia po linii
Stare oprogramowanie sprzętowe lub program obsługujący tylko STLSTLUsuń dodatki i wyślij samą siatkę

Najważniejsze wnioski

  • STL przechowuje tylko trójkąty: bez jednostek, bez koloru, a w wersji binarnej 50 bajtów na trójkąt.
  • OBJ dodaje UV, normalne i nazwane grupy, ale jego kolory i tekstury zależą od osobnego pliku .mtl i plików obrazów.
  • 3MF to ZIP z XML, który zapisuje jednostki, kolory, kilka obiektów i ustawienia druku oraz wymaga zamkniętych siatek.
  • Używaj STL do zwykłych jednokolorowych wydruków, OBJ do modeli z teksturami w grafice i grach, a 3MF zawsze, gdy obsługuje go Twój slicer.
  • Konwersja zmienia kontener, a nie siatkę: dziury i normalne napraw w narzędziu do siatek, a jednostkę ustaw samodzielnie.
UdostępnijXFacebookWhatsAppTelegram

Najczęściej zadawane pytania

Czy 3MF zastępuje STL?

Powoli, jeśli chodzi o druk. PrusaSlicer i Bambu Studio już zapisują projekty jako 3MF, ale STL nadal jest formatem akceptowanym przez każde narzędzie i każdą bibliotekę modeli, więc oba formaty będą współistnieć jeszcze przez lata.

Czy binarny STL może przechowywać kolor?

Nie w żaden standardowy sposób. Niektóre programy zapisują kolor w 2-bajtowym polu atrybutu każdego trójkąta, ale większość slicerów go ignoruje, dlatego gdy kolor ma znaczenie, użyj 3MF lub OBJ.

Dlaczego mój plik OBJ po pobraniu jest szary?

Plik .mtl lub obrazy tekstur zostały pominięte albo ścieżki wewnątrz pliku .mtl wskazują foldery, których nie ma na Twoim komputerze. Umieść pliki .obj, .mtl i obrazy w jednym folderze i wczytaj model ponownie.

Czy STL ASCII czy binarny daje dokładniejszy wydruk?

W praktyce żaden z nich nie drukuje dokładniej. Oba opisują te same trójkąty; format binarny zapisuje współrzędne jako 32-bitowe liczby zmiennoprzecinkowe, a ASCII jako tekst, a pliki binarne są zwykle kilkukrotnie mniejsze.

Czy mogę zamienić OBJ z powrotem na STL do druku?

Tak. Trójkąty zostają przeniesione bez zmian, natomiast mapy UV, materiały i tekstury są pomijane, ponieważ STL nie ma na nie miejsca. Potem sprawdź skalę, bo pliki OBJ z programów do modelowania są często w metrach lub centymetrach.

Jakiego formatu użyć, by udostępnić model innym do druku?

Udostępnij plik STL dla jak najszerszej zgodności, a jeśli model ma kilka części, kolory lub został zaprojektowany w calach, dodaj obok plik 3MF, aby osoby z nowoczesnym slicerem dostały pełną konfigurację.

Czytaj dalej