UltKit

STL vs OBJ vs 3MF: jaký formát 3D souboru zvolit?

Použijte STL pro jednobarevný tisk, který stačí jen naslicovat, OBJ, když model nese textury pro rendering nebo herní engine, a 3MF, když ho váš slicer podporuje a chcete, aby jednotky, barvy a více dílů přežily přenos beze ztráty. Formát určuje, jaká metadata putují spolu se sítí. O tom, zda je samotná síť v pořádku, nerozhoduje nikdy.

Jonas WeberJonas WeberRedaktor výkonu webu
Aktualizováno 12 min čtení
Stolní 3D tiskárna v průhledném krytu na bílém stole, vedle notebook s 3D modelem a barevné vytištěné díly včetně terénní mapy a červeného ozubeného kola

STL: seznam trojúhelníků a nic víc

STL vzniklo v roce 1987 pro první stereolitografické stroje společnosti 3D Systems a je to na něm vidět. Soubor je prostý seznam trojúhelníků, každý popsaný normálou plošky a třemi vrcholy. Neexistuje sdílená tabulka vrcholů, takže roh, který se dotýká šesti trojúhelníků, se zapíše šestkrát. Chybí také údaj o jednotkách: souřadnice 25 může znamenat milimetry, palce nebo metry a téměř každý slicer předpokládá milimetry. Barva, textura ani názvy dílů se do základního formátu nevejdou, a právě proto ho stále čte každý slicer, CAD program i tisková služba.

STL existuje ve dvou kódováních. ASCII STL vše zapisuje textem, například řádky facet normal, outer loop a vertex 12.5 0 3.2, takže ho otevřete v textovém editoru a čísla přečtete. Binární STL začíná 80bajtovou hlavičkou a 4bajtovým počtem trojúhelníků, poté ukládá každý trojúhelník jako dvanáct 4bajtových čísel s plovoucí řádovou čárkou plus 2bajtové pole atributů: přesně 50 bajtů na trojúhelník. Díky tomu lze velikost snadno odhadnout. Model s milionem trojúhelníků má v binární podobě asi 50 MB a ASCII verze téže sítě bývá čtyřikrát až šestkrát větší, protože každá číslice je jeden znak.

Jednoduchost je zároveň silná stránka i past. Ze souboru STL nepoznáte, zda měl být jeden díl, nebo tři, zda byl exportován v palcích, ani zda trojúhelníky skutečně uzavírají těleso. Slicer to odvozuje ze surových souřadnic, a když se splete, dostanete díl 25,4krát menší nebo chybějící stěnu. U jednobarevného dílu, který jste sami navrhli a exportovali v milimetrech, na tom nezáleží a STL zůstává formátem, který je nejméně pravděpodobné, že bude odmítnut.

OBJ: polygony, UV a doprovodný soubor s materiály

OBJ pochází od společnosti Wavefront Technologies, jejíž software Advanced Visualizer ho používal koncem 80. let, a v 90. letech se rozšířil jako textový formát, který si vyměnil téměř každý 3D program. Na rozdíl od STL uchovává seznam vrcholů a plošky skládá z indexů, takže sdílený roh je uložen jednou, a plošky mohou být trojúhelníky, čtyřúhelníky i větší polygony. Řádky začínající v obsahují pozice, vt texturovací souřadnice (UV), vn normály a f plošky. Skupiny (g) a objekty (o) pojmenovávají části, takže OBJ přežije přenos mezi Blenderem, Mayou či ZBrush se zachovanou strukturou.

Vzhled je uložen mimo soubor .obj. Řádek mtllib uvádí doprovodný soubor .mtl a řádky usemtl přiřazují materiály ploškám. Soubor .mtl ukládá barvy, například Kd (difuzní), a odkazuje na obrázky textur záznamy jako map_Kd wood.png. Texturovaný OBJ tedy tvoří alespoň tři soubory: geometrie, knihovna materiálů a jeden či více obrázků, všechny odkazované relativní cestou. Pošlete-li jen .obj, příjemce uvidí šedý model. Toto oddělení se hodí v herních a VFX postupech, kde umělci mění textury bez zásahu do geometrie, a je zároveň nejčastějším důvodem, proč stažený model vypadá špatně.

OBJ sdílí se STL slepé místo v měřítku: ukládá holá čísla bez jednotky. Většina modelovacích nástrojů zapisuje metry nebo centimetry, zatímco slicery čtou milimetry, takže OBJ z obchodu s herními assety může být 10krát nebo 1 000krát vedle. Pro tisk OBJ nepřidává nic, co by slicer využil, kromě barvy po vrcholech v několika nástrojích. Chcete-li tisknout umělecký asset, je obvykle nejjednodušší ponechat textury pro renderování a slicer dostane čistou síť. Opačným směrem je převod STL do OBJ nejkratší cestou od tiskového modelu k renderování nebo do herního workflow.

3MF: balíček ZIP stvořený pro tisk

Formát 3MF zveřejnilo v roce 2015 konsorcium 3MF Consortium, které založil Microsoft spolu s firmami z oboru tisku a CAD. Soubor .3mf je archiv ZIP, tedy stejný kontejner, o němž pojednává článek ZIP vs RAR vs 7z. Přejmenujte ho na .zip a najdete soubor XML 3D/3dmodel.model se sítí, soubor typů obsahu, soubory vztahů a často náhledy a konfiguraci sliceru. Každý model deklaruje jednotku (mikron, milimetr, centimetr, palec, stopa nebo metr), takže problém s měřítkem, který trápí STL a OBJ, vůbec nevzniká. Barvy, základní materiály, více objektů i jejich rozmístění na tiskové podložce jsou součástí specifikace.

Specifikace také vyžaduje, aby sítě byly manifold a konzistentně orientované: každá hrana sdílená přesně dvěma trojúhelníky, všechny směřující ven. Exportéry, které pravidla dodržují, nemohou zapsat otevřenou a samoprotínající se geometrii, kterou STL klidně nese. Podpora mezi současnými nástroji je široká. PrusaSlicer, Bambu Studio, OrcaSlicer a UltiMaker Cura čtou 3MF, PrusaSlicer a Bambu Studio ukládají celý projekt jako .3mf včetně nastavení tisku a malovaných barev a aplikace Microsoft 3D Builder ve Windows ho otevře přímo. Slabým místem je starší firmware, portály tiskových farem a CAD importy, které stále očekávají STL; pro ně převeďte 3MF do STL a smiřte se s tím, že nadstavby zůstanou pozadu.

from ↓ · to →UnitsColorTexturesVíce dílůNastavení tiskuPravidlo manifold
STL– STL to Units: no– STL to Color: no– STL to Textures: no– STL to Více dílů: no– STL to Nastavení tisku: no– STL to Pravidlo manifold: no
OBJ– OBJ to Units: noOBJ to Color: yesOBJ to Textures: yesOBJ to Více dílů: yes– OBJ to Nastavení tisku: no– OBJ to Pravidlo manifold: no
3MF3MF to Units: yes3MF to Color: yes3MF to Textures: yes3MF to Více dílů: yes3MF to Nastavení tisku: yes3MF to Pravidlo manifold: yes
supported not offeredŘádky jsou formáty, sloupce říkají, co soubor sám unese. Barvy a textury v OBJ potřebují samostatný soubor .mtl a obrázky; textury ve 3MF pocházejí z rozšíření materiálů. Několik nástrojů zapisuje barvu do nevyužitých bajtů binárního STL, ale žádný standard to nepokrývá.
Řada 3D tiskáren s otevřeným rámem na dřevěných stolech, na podložce nejbližší z nich stojí několik modrých válcových dílů
Foto: Unsplash

Jaký formát zvolit pro jakou práci

Správný formát závisí na tom, kam soubor putuje dál, ne na tom, který je novější. Pokud další zastávkou je slicer a díl je jednobarevný, STL stačí a je to stále formát, kterému rozumí každé fórum, knihovna modelů i tisková služba. Pokud další zastávkou je renderer, herní engine nebo modelovací nástroj jiného umělce, OBJ zachová UV, normály a pojmenované skupiny, které STL zahodí, a jeho textová podoba usnadňuje hledání problémů.

3MF si místo zaslouží, když soubor nese víc než geometrii. Vícebarevný tisk namalovaný v Bambu Studiu, podložka s dvanácti díly uspořádanými pro jednu úlohu, díl navržený v palcích nebo projekt, který chcete znovu otevřít se stejnou výškou vrstvy a výplní, to vše vyžaduje 3MF, protože žádný jiný zde uvedený formát tyto informace neunese. Pokud soubor míří na více míst, ponechte nejbohatší verzi jako hlavní kopii a jednodušší z ní exportujte pomocí převodníku 3D modelů místo řetězení převodů.

STL pro jednoduché tisky

Jeden díl, jedna barva, export v milimetrech. Otevře se v každém sliceru, importním dialogu CAD i formuláři tiskové služby.

OBJ pro texturované modely

UV, normály a pojmenované skupiny pro Blender, Maya, Unity nebo Unreal. Soubor .mtl a obrázky textur přibalte.

3MF pro moderní slicery

Skutečné jednotky, barvy, více objektů a nastavení tisku v jednom ZIPu. Nativní formát projektu v PrusaSliceru a Bambu Studiu.

Pět způsobů, jak se 3D soubor pokazí

Většina neúspěšných tisků a rozbitých importů, které se připisují formátu, jsou ve skutečnosti potíže se sítí nebo s tím, co si o ní přijímající program předpokládal. STL je nejvíce vystaveno, protože nenese žádná metadata, která by chyby zachytila; OBJ sdílí problémy s měřítkem a chybějícími soubory; 3MF se většině vyhne už svým návrhem, i když nedbalý exportér může stále zapsat špatnou síť. V řádcích níže najdete, jak která chyba vypadá a odkud obvykle pochází.

Síť, která není manifold

Hrany sdílené jedním trojúhelníkem nebo třemi či více, mezery mezi povrchy nebo stěny s nulovou tloušťkou. Slicer ukáže chybějící vrstvy, náhodné díry nebo varování o otevřených hranách. Příčina je v modelování nebo exportu, často ve sloučení dílů, které se jen dotýkají.

Převrácené normály

Některé trojúhelníky směřují dovnitř. Renderery ukazují černé nebo průhledné plochy a slicery mohou oblast považovat za prázdný prostor. Pomůže příkaz pro přepočet normál v Blenderu, Meshmixeru nebo opravný nástroj slicerů.

Záměna milimetrů a palců

Díl nakreslený v palcích dorazí do slicerů předpokládajícího milimetry 25,4krát menší; centimetry čtené jako milimetry dají desetinásobnou chybu. STL a OBJ jednotku zaznamenat neumějí, proto ji nastavte při exportu nebo převodu.

Chybějící soubor .mtl nebo textury

OBJ, který se načte šedě nebo purpurově, přišel o knihovnu materiálů či obrázky, nebo cesty v souboru .mtl ukazují do složky na počítači původního autora. Všechny soubory držte v jedné složce a zabalte je společně.

Obří ASCII soubory STL

Podrobný sken uložený jako ASCII STL může přesáhnout několik set megabajtů, což zpomaluje slicery a naráží na limity nahrávání. Export téže sítě jako binární STL ji zmenší zhruba na pětinu bez změny jediného trojúhelníku.

Jak velké soubory jednotlivé formáty obvykle mají

Velikost vyplývá ze struktury. Binární STL má pevně 50 bajtů na trojúhelník, takže ji spočítáte před exportem. ASCII STL zapisuje každý roh jako text a obvykle skončí čtyřikrát až šestkrát nad binárním. OBJ ukládá každý sdílený vrchol jednou a odkazuje na něj indexem, takže u typické uzavřené sítě vyjde menší než ASCII STL a zhruba v rozsahu binárního STL, větší, pokud nese i UV a normály. 3MF ukládá indexované XML a uvnitř ZIPu ho komprimuje, takže bývá u stejné geometrie nejmenší ze všech tří.

Čísla níže jsou typická pro uzavřenou síť s asi 500 000 trojúhelníky, například podrobnou figurku. Skutečné soubory se liší podle přesnosti souřadnic a exportéru, berte je proto jako řádové hodnoty, užitečné, když tisková služba omezuje nahrávání nebo když STL exportované z 3MF vyjde několikrát větší.

Binární STL (500 000 trojúhelníků × 50 bajtů)
≈ 25 MB
ASCII STL, stejná síť, typicky
≈ 100–150 MB
OBJ bez UV, typicky
≈ 15–30 MB
3MF po kompresi ZIP, typicky
≈ 5–12 MB

Co převod opraví a co nikdy neopraví

Převod přečte trojúhelníky z jednoho kontejneru a zapíše je do jiného. Vše, co cílový formát umí vyjádřit, se přenese; co neumí, se zahodí. Proto je STL do OBJ bezeztrátové pro geometrii, 3MF do STL ztrácí barvy, jednotky i rozložení podložky a OBJ do STL ztrácí textury a názvy dílů. V 3D nástrojích UltKit jsou další rozhodnutí explicitní: Jednotky modelu sdělují převodníku, v jakém měřítku je zdroj, Svislá osa řeší rozdíl mezi Y nahoru a Z nahoru u herních enginů a slicerů a Sloučit do jedné sítě určuje, zda samostatné díly zůstanou oddělené.

Co žádný převod nedělá, je oprava sítě. Má-li STL díru, má ji i OBJ, které z něj vytvoříte, a exportér 3MF ji buď odmítne, nebo přesto zapíše. Oprava je samostatný krok v nástroji pro sítě nebo ve vestavěné opravě slicerů a nejlépe ji provést jednou, v hlavním souboru, před jakýmkoli dalším exportem. Totéž platí pro měřítko: převod nemůže vědět, že díl měl být v palcích, pokud mu to neřeknete. Podobně je to s detailem: STL s nízkým počtem polygonů se stane OBJ nebo 3MF s nízkým počtem polygonů, takže když záleží na kvalitě, exportujte znovu ze zdrojového modelu.

Co změna formátu udělá

  • Přenese stejné trojúhelníky do kontejneru, který jiný program přijme
  • Použije jednotku, kterou zvolíte v Jednotky modelu, a opraví chybu měřítka 25,4× nebo 10×
  • Otočí model mezi Y nahoru a Z nahoru pomocí Svislá osa
  • Zmenší ASCII STL tím, že místo něj zapíše binární
  • Zachová nebo sloučí samostatné díly podle Sloučit do jedné sítě

Co nechá přesně tak, jak to bylo

  • Díry, otevřené hrany a geometrii, která není manifold
  • Převrácené nebo nekonzistentní normály
  • Samoprotínající se díly a stěny s nulovou tloušťkou
  • Detail, který se ztratil při prvním exportu sítě
  • Barvy a textury, pokud pro ně cílový formát nemá místo

Rozhodovací tabulka: STL, OBJ, nebo 3MF

Při této otázce se vždy objeví ještě dva další formáty. STEP (ISO 10303) ukládá přesná tělesa a plochy místo trojúhelníků, takže je to formát pro případ, kdy se díl musí vrátit do Fusion 360, SolidWorks nebo FreeCADu k úpravám. GLB, binární podoba glTF 2.0 od Khronos Group, balí síť s materiály a texturami do jednoho souboru v metrech a je to formát pro zobrazení modelu na webu nebo v AR na Androidu.

Pro tři formáty, kterými se článek zabývá, shrnuje tabulka níže volbu podle cíle. Hodí-li se dva řádky, vyberte formát, který nese víc informací, a jednodušší exportujte později; z 3MF do STL je to snadné, zatímco obnova ztracených barev či jednotek je ruční práce.

Vyberte podle toho, kam soubor putuje dál
SituaceNejlepší formátProč
Jednobarevný díl pro libovolný slicerSTL (binární)Univerzální podpora; slicer nepotřebuje nic dalšího
Nahrání do knihovny modelů nebo tiskové službySTL, případně i 3MF, je-li nabídnutoSTL se přijímá vždy; 3MF uchová jednotky a barvy
Vícebarevný nebo vícemateriálový tisk3MFJediný zde uvedený formát, který pro slicery ukládá barvy a materiály po dílech
Podložka s několika díly a nastavením tisku3MFUkládá rozmístění objektů a nastavení slicerů v jednom souboru
Díl navržený v palcích3MFDeklaruje jednotku, takže se nic nezmění 25,4krát
Texturovaný model pro Blender, Unity nebo UnrealOBJ (+ .mtl a obrázky)Zachová UV, normály a přiřazení materiálů
Rychlá kontrola v textovém editoruOBJ nebo ASCII STLProstý text, který přečtete řádek po řádku
Starý firmware nebo software, který uvádí jen STLSTLZbavte se nadstaveb a pošlete samotnou síť

Nejdůležitější poznatky

  • STL ukládá jen trojúhelníky: bez jednotek, bez barev a v binární podobě 50 bajtů na trojúhelník.
  • OBJ přidává UV, normály a pojmenované skupiny, ale jeho barvy a textury závisejí na samostatném souboru .mtl a souborech s obrázky.
  • 3MF je ZIP s XML, který zaznamenává jednotky, barvy, více objektů a nastavení tisku a vyžaduje uzavřené sítě.
  • STL použijte pro jednoduché jednobarevné tisky, OBJ pro texturované modely v uměleckých a herních postupech a 3MF všude, kde ho váš slicer podporuje.
  • Převod mění kontejner, ne síť: díry a normály opravte v nástroji pro sítě a jednotku nastavte sami.
SdíletXFacebookWhatsAppTelegram

Často kladené otázky

Nahrazuje 3MF formát STL?

Pomalu, a to u tiskových workflow. PrusaSlicer a Bambu Studio už ukládají projekty jako 3MF, ale STL zůstává formátem, který přijímá každý nástroj i knihovna modelů, takže oba formáty budou ještě roky existovat vedle sebe.

Dokáže binární STL uložit barvu?

Ne standardním způsobem. Některé programy zapisují barvu do 2bajtového pole atributů každého trojúhelníku, ale většina slicerů ji ignoruje, proto když záleží na barvě, použijte 3MF nebo OBJ.

Proč se mi OBJ po stažení zobrazuje šedě?

Soubor .mtl nebo obrázky textur zůstaly jinde, nebo cesty uvnitř souboru .mtl ukazují do složek, které na vašem počítači neexistují. Uložte .obj, .mtl a obrázky do jedné složky a model načtěte znovu.

Dává přesnější tisk ASCII, nebo binární STL?

V praxi netiskne přesněji ani jeden. Oba popisují stejné trojúhelníky; binární formát ukládá souřadnice jako 32bitová čísla s plovoucí řádovou čárkou a ASCII jako text, přičemž binární soubory bývají několikanásobně menší.

Mohu OBJ převést zpět do STL pro tisk?

Ano. Trojúhelníky se přenesou beze změny, zatímco UV souřadnice, materiály a textury se zahodí, protože STL pro ně nemá místo. Poté zkontrolujte měřítko, protože soubory OBJ z modelovacích nástrojů bývají v metrech nebo centimetrech.

Jaký formát použít, když chci model sdílet, aby si ho ostatní mohli vytisknout?

Nabídněte STL pro nejširší kompatibilitu a pokud model obsahuje více částí, barvy nebo byl navržen v palcích, přidejte vedle něj i 3MF, aby uživatelé s moderním slicerem dostali celé nastavení.

Čtěte dál