UltKit

STL, OBJ eller 3MF: vilket 3D-filformat ska du välja?

Använd STL för en enfärgad utskrift som bara ska slicas, OBJ när modellen har texturer för rendering eller en spelmotor, och 3MF när din slicer stöder formatet och du vill att enheter, färger och flera delar ska följa med hela vägen. Formatet avgör vilken metadata som följer med nätet, men det avgör aldrig om själva nätet är felfritt.

Jonas WeberJonas WeberRedaktör för webbprestanda
Uppdaterad 12 min läsning
En 3D-skrivare i ett genomskinligt hölje på ett vitt skrivbord, med en bärbar dator som visar en 3D-modell och färgglada utskrivna delar, bland annat en terrängkarta och ett rött kugghjul

STL: en lista med trianglar och inget annat

STL skapades 1987 för 3D Systems första stereolitografimaskiner, och designen visar det ursprunget. En fil är en platt lista med trianglar, var och en beskriven av en ytnormal och tre hörnpunkter. Det finns ingen gemensam hörntabell, så ett hörn som delas av sex trianglar skrivs sex gånger. Det finns inte heller något enhetsfält: koordinaten 25 kan betyda millimeter, tum eller meter, och nästan alla slicers gissar millimeter. Färg, textur och delnamn har ingen plats i grundformatet, och just därför läser alla slicers, CAD-program och utskriftstjänster det fortfarande.

STL finns i två kodningar. ASCII-STL skriver ut allt som text, med rader som facet normal, outer loop och vertex 12.5 0 3.2, så du kan öppna filen i en textredigerare och läsa siffrorna. Binär STL börjar med en rubrik på 80 byte och ett triangelantal på 4 byte, och lagrar sedan varje triangel som tolv flyttal på 4 byte plus ett attributfält på 2 byte: exakt 50 byte per triangel. Den regeln gör storleken lätt att förutse. En modell med en miljon trianglar blir ungefär 50 MB som binär fil, och ASCII-versionen av samma nät är vanligtvis fyra till sex gånger större eftersom varje siffra blir ett tecken.

Enkelheten är både styrkan och fällan. En STL kan inte tala om om den var tänkt som en del eller tre, om den exporterades i tum eller om trianglarna verkligen omsluter en solid kropp. Slicern får räkna ut det från råa koordinater, och när den gissar fel får du en del som är 25,4 gånger för liten eller en vägg som saknas. För en enfärgad del som du själv konstruerat och exporterat i millimeter spelar inget av detta roll, och STL är fortfarande det format som minst sannolikt avvisas.

OBJ: polygoner, UV och en separat materialfil

OBJ kommer från Wavefront Technologies, vars program Advanced Visualizer använde det i slutet av 1980-talet, och det spreds under 1990-talet som textformatet nästan alla 3D-program kunde utbyta. Till skillnad från STL har OBJ en hörnlista och bygger ytor från index, så ett delat hörn lagras en gång, och ytorna kan vara trianglar, fyrhörningar eller större polygoner. Rader som börjar med v innehåller positioner, vt texturkoordinater (UV), vn normaler och f ytorna. Grupper (g) och objekt (o) namnger delarna, så OBJ klarar en tur genom Blender, Maya eller ZBrush med strukturen intakt.

Utseendet ligger utanför .obj-filen. En mtllib-rad pekar ut en tillhörande .mtl-fil, och usemtl-rader tilldelar material till ytor. .mtl-filen lagrar färger som Kd (diffus) och pekar på texturbilder med rader som map_Kd wood.png. En texturerad OBJ består därför av minst tre filer: geometrin, materialbiblioteket och en eller flera bilder, alla angivna med relativ sökväg. Skickar du bara .obj ser mottagaren en grå modell. Uppdelningen är användbar i spel- och VFX-flöden där konstnärer byter texturer utan att röra geometrin, och den är den vanligaste orsaken till att en nedladdad modell ser fel ut.

OBJ har samma blinda fläck som STL när det gäller skala: det lagrar rena tal utan enhet. De flesta modelleringsverktyg skriver meter eller centimeter medan slicers läser millimeter, så en OBJ från en spelassetbutik kan hamna 10 eller 1 000 gånger fel. För utskrift tillför OBJ inget som en slicer använder, utom färg per hörn i några verktyg, så om du ska skriva ut en konsttillgång är det oftast enklast att behålla texturerna för rendering och ge slicern ett rent nät. Åt andra hållet är att göra om en STL till OBJ den kortaste vägen från en utskriftsmodell till ett renderings- eller spelflöde.

3MF: ett ZIP-paket byggt för utskrift

3MF publicerades 2015 av 3MF Consortium, en grupp som startades av Microsoft tillsammans med företag inom utskrifts- och CAD-branschen. En .3mf-fil är ett ZIP-arkiv, samma behållarformat som tas upp i ZIP vs RAR vs 7z. Byter du namn till .zip hittar du en XML-fil 3D/3dmodel.model med nätet, en fil med innehållstyper, relationsfiler och ofta miniatyrer och slicerkonfiguration. Varje modell anger sin enhet (mikrometer, millimeter, centimeter, tum, fot eller meter), så skalproblemet som plågar STL och OBJ uppstår helt enkelt inte. Färger, basmaterial, flera objekt och deras placering på byggplattan ingår i specifikationen.

Specifikationen kräver också att nät är slutna och konsekvent orienterade: varje kant delas av exakt två trianglar, och alla vetter utåt. Exportörer som följer reglerna kan inte skriva den öppna, självskärande geometri som en STL gärna bär på. Stödet är brett bland dagens verktyg. PrusaSlicer, Bambu Studio, OrcaSlicer och UltiMaker Cura läser 3MF, PrusaSlicer och Bambu Studio sparar hela projektet som en .3mf med utskriftsinställningar och målade färger inuti, och Microsofts app 3D Builder i Windows öppnar den direkt. Den svaga punkten är äldre firmware, portaler för utskriftsfarmar och CAD-importer som fortfarande förväntar sig STL; för dem kan du konvertera 3MF till STL och acceptera att extrafunktionerna blir kvar.

from ↓ · to →UnitsColorTexturesFlera delarUtskriftsinställningarSlutet-nät-krav
STL– STL to Units: no– STL to Color: no– STL to Textures: no– STL to Flera delar: no– STL to Utskriftsinställningar: no– STL to Slutet-nät-krav: no
OBJ– OBJ to Units: noOBJ to Color: yesOBJ to Textures: yesOBJ to Flera delar: yes– OBJ to Utskriftsinställningar: no– OBJ to Slutet-nät-krav: no
3MF3MF to Units: yes3MF to Color: yes3MF to Textures: yes3MF to Flera delar: yes3MF to Utskriftsinställningar: yes3MF to Slutet-nät-krav: yes
supported not offeredRaderna är format, kolumnerna är vad själva filen kan innehålla. Färg och texturer i OBJ kräver den separata .mtl-filen och bilderna; texturer i 3MF kommer från dess materialtillägg. Några verktyg skriver färg i de oanvända byten i binär STL, men ingen standard täcker det.
En rad öppna 3D-skrivare på träbänkar, där den närmaste har flera blå cylindriska delar på byggplattan
Foto: Unsplash

Välj format efter uppgiften

Rätt format beror på vart filen ska härnäst, inte på vilket som är nyast. Om nästa steg är en slicer och delen är enfärgad är STL bra, och det är fortfarande formatet som alla forum, modellbibliotek och utskriftstjänster förstår. Om nästa steg är en renderare, en spelmotor eller en annan konstnärs modelleringsverktyg behåller OBJ de UV-koordinater, normaler och namngivna grupper som STL kastar bort, och textformen gör att problem är lätta att inspektera.

3MF gör nytta när filen innehåller mer än geometri. En flerfärgsutskrift målad i Bambu Studio, en platta med tolv delar arrangerade för ett jobb, en del konstruerad i tum eller ett projekt som du vill öppna igen med samma lagerhöjd och ifyllnad kräver alla 3MF, eftersom inget annat format här kan hålla den informationen. Behöver du flera mål, behåll den rikaste versionen som huvudkopia och exportera enklare versioner från den med en 3D-konverterare i stället för att kedja konverteringar.

STL för enkla utskrifter

En del, en färg, exporterad i millimeter. Öppnas i alla slicers, CAD-importdialoger och uppladdningsformulär hos utskriftstjänster.

OBJ för texturerade modeller

UV-koordinater, normaler och namngivna grupper för Blender, Maya, Unity eller Unreal. Skicka med .mtl-filen och texturbilderna.

3MF för moderna slicers

Riktiga enheter, färger, flera objekt och utskriftsinställningar i en ZIP. Det egna projektformatet i PrusaSlicer och Bambu Studio.

Fem sätt en 3D-fil kan gå fel

De flesta misslyckade utskrifter och trasiga importer som skylls på formatet beror egentligen på problem i nätet, eller på vad mottagande program antog om det. STL är mest utsatt eftersom det inte har någon metadata som fångar misstag; OBJ delar problemen med skala och saknade filer; 3MF undviker de flesta genom sin utformning, även om en slarvig exportör ändå kan skriva ett dåligt nät. Öppna raderna nedan för att se hur varje fel ser ut och var det oftast kommer från.

Icke-slutet nät

Kanter som delas av en triangel eller av tre eller fler, glapp mellan ytor eller väggar utan tjocklek. Slicern visar saknade lager, slumpmässiga hål eller en varning om öppna kanter. Orsaken finns i modelleringen eller exporten, ofta från delar som slagits ihop trots att de bara rör vid varandra.

Inverterade normaler

Vissa trianglar vetter inåt. Renderare visar svarta eller genomskinliga fläckar, och slicers kan behandla området som tomrum. Ett kommando för att räkna om normaler i Blender, Meshmixer eller slicerns reparationsverktyg löser det.

Förväxling av millimeter och tum

En del ritad i tum blir 25,4 gånger för liten i en slicer som antar millimeter; centimeter som läses som millimeter ger ett fel på faktor 10. STL och OBJ kan inte spara enheten, så du anger den vid export eller konvertering.

Saknad .mtl-fil eller saknade texturer

En OBJ som laddas grå eller magenta har tappat sitt materialbibliotek eller sina bilder, eller så pekar sökvägarna i .mtl till en mapp på upphovspersonens dator. Håll alla filer i en mapp och zippa ihop dem.

Enorma ASCII-STL-filer

En detaljerad skanning sparad som ASCII-STL kan passera flera hundra megabyte, vilket gör slicers långsamma och slår i uppladdningsgränser. Exporterar du samma nät som binär STL krymper den till ungefär en femtedel utan att en enda triangel ändras.

Hur stora formaten brukar bli

Storleken följer av strukturen. Binär STL är fast 50 byte per triangel, så du kan räkna ut den före exporten. ASCII-STL upprepar varje hörn som text och landar oftast fyra till sex gånger över binär. OBJ lagrar varje delat hörn en gång och hänvisar till det med index, så för ett typiskt slutet nät blir den mindre än ASCII-STL och ungefär i nivå med binär STL, större om den också innehåller UV och normaler. 3MF lagrar indexerad XML och komprimerar den sedan i ZIP-arkivet, vilket oftast gör den minst av de tre för samma geometri.

Siffrorna nedan är typiska för ett slutet nät med cirka 500 000 trianglar, till exempel en detaljerad figur. Verkliga filer varierar med koordinatprecision och exportör, så se dem som storleksordningar, användbara när en utskriftstjänst har en uppladdningsgräns eller en STL exporterad från en 3MF blir flera gånger större.

Binär STL (500 000 trianglar × 50 byte)
≈ 25 MB
ASCII-STL, samma nät, typiskt
≈ 100–150 MB
OBJ utan UV, typiskt
≈ 15–30 MB
3MF efter ZIP-komprimering, typiskt
≈ 5–12 MB

Vad konvertering löser och vad den aldrig löser

En konvertering läser trianglarna från en behållare och skriver dem till en annan. Allt målformatet kan uttrycka följer med; det som det inte kan tappas. Därför är STL till OBJ förlustfritt för geometrin, 3MF till STL förlorar färger, enheter och plattlayout, och OBJ till STL förlorar texturer och delnamn. I 3D-verktygen på UltKit är de extra valen uttryckliga: Modellenheter talar om för konverteraren vilken skala källan använder, Uppåtaxel hanterar skillnaden mellan Y-upp och Z-upp mellan spelmotorer och slicers, och Slå ihop till ett nät avgör om separata delar förblir separata.

Ingen konvertering reparerar ett nät. Om en STL har ett hål har OBJ-filen du gör av den samma hål, och en 3MF-exportör vägrar antingen eller skriver den ändå. Reparation är ett separat steg i ett nätverktyg eller slicerns inbyggda reparationsfunktion, och görs bäst en gång i din huvudfil innan du exporterar något annat. Samma sak gäller skala: konverteringen kan inte veta att en del var tänkt i tum om du inte säger det. Detaljrikedom fungerar likadant: en lågpolygonal STL blir en lågpolygonal OBJ eller 3MF, så exportera på nytt från källmodellen när kvaliteten är viktig.

Vad ett formatbyte gör

  • Flyttar samma trianglar till en behållare som ett annat program accepterar
  • Tillämpar enheten du väljer under Modellenheter och rättar ett skalfel på 25,4× eller 10×
  • Roterar modellen mellan Y-upp och Z-upp med Uppåtaxel
  • Krymper en ASCII-STL genom att skriva binärt i stället
  • Behåller eller slår ihop separata delar, beroende på Slå ihop till ett nät

Vad det lämnar precis som det var

  • Hål, öppna kanter och icke-sluten geometri
  • Inverterade eller inkonsekventa normaler
  • Självskärande delar och väggar utan tjocklek
  • Detaljer som gick förlorade när nätet först exporterades
  • Färger och texturer när målformatet saknar plats för dem

Beslutstabell: STL, OBJ eller 3MF

Två andra format dyker upp varje gång den här frågan ställs. STEP (ISO 10303) lagrar exakta solider och ytor i stället för trianglar, så det är formatet att använda när en del ska tillbaka till Fusion 360, SolidWorks eller FreeCAD för redigering. GLB, den binära formen av Khronos Groups glTF 2.0, packar ett nät med material och texturer i en fil i meter och är formatet för att visa en modell på webben eller i Android AR.

För de tre format som den här artikeln behandlar sammanfattar tabellen nedan valet efter mål. Passar två rader, välj formatet som bär mest information och exportera det enklare senare; att gå från 3MF till STL är lätt, medan det är handarbete att bygga upp förlorade färger eller enheter.

Välj efter vart filen ska härnäst
SituationBästa formatVarför
Enfärgad del som ska till valfri slicerSTL (binär)Universellt stöd; slicern behöver inget mer
Uppladdning till ett modellbibliotek eller en utskriftstjänstSTL, plus 3MF om det erbjudsSTL accepteras alltid; 3MF behåller enheter och färger
Flerfärgs- eller flermaterialutskrift3MFEnda formatet här som lagrar färger och material per del för slicers
Platta med flera delar och utskriftsinställningar3MFLagrar objektplacering och slicerinställningar i en fil
Del konstruerad i tum3MFAnger enheten, så ingenting skalas med 25,4
Texturerad modell för Blender, Unity eller UnrealOBJ (+ .mtl och bilder)Behåller UV, normaler och materialtilldelningar
Snabb kontroll i en textredigerareOBJ eller ASCII-STLRen text som du kan läsa rad för rad
Gammal firmware eller programvara som bara listar STLSTLTa bort extrafunktionerna och skicka nätet

Viktigast att komma ihåg

  • STL lagrar bara trianglar: inga enheter, ingen färg och 50 byte per triangel i binär form.
  • OBJ lägger till UV, normaler och namngivna grupper, men färger och texturer beror på en separat .mtl-fil och bildfiler.
  • 3MF är en ZIP med XML som innehåller enheter, färger, flera objekt och utskriftsinställningar, och kräver slutna nät.
  • Använd STL för enkla enfärgade utskrifter, OBJ för texturerade modeller i konst- och spelflöden, och 3MF så fort din slicer stöder det.
  • Konvertering ändrar behållaren, inte nätet: reparera hål och normaler i ett nätverktyg och ange enheten själv.
DelaXFacebookWhatsAppTelegram

Vanliga frågor

Håller 3MF på att ersätta STL?

Långsamt, när det gäller utskriftsflöden. PrusaSlicer och Bambu Studio sparar redan projekt som 3MF, men STL är fortfarande det format som alla verktyg och modellbibliotek accepterar, så de två kommer att samexistera i många år.

Kan en binär STL lagra färg?

Inte på något standardiserat sätt. Några program skriver in färg i det 2 byte stora attributfältet i varje triangel, men de flesta slicers ignorerar det, så använd 3MF eller OBJ när färg spelar roll.

Varför visas min OBJ grå när jag har laddat ner den?

Antingen har .mtl-filen eller texturbilderna lämnats kvar, eller så pekar sökvägarna i .mtl-filen på mappar som inte finns på din dator. Lägg .obj-filen, .mtl-filen och bilderna i samma mapp och läs in modellen igen.

Ger ASCII- eller binär STL en mer exakt utskrift?

Ingen av dem skriver ut mer exakt i praktiken. Båda beskriver samma trianglar; binär lagrar koordinaterna som 32-bitars flyttal och ASCII som text, och binära filer är oftast flera gånger mindre.

Kan jag konvertera en OBJ tillbaka till STL för utskrift?

Ja. Trianglarna förs över oförändrade, medan UV-koordinater, material och texturer tas bort eftersom STL inte har någon plats för dem. Kontrollera skalan efteråt, eftersom OBJ-filer från modelleringsverktyg ofta anges i meter eller centimeter.

Vilket format ska jag använda när andra ska skriva ut min modell?

Erbjud en STL för bredast kompatibilitet och, om modellen har flera delar, färger eller är ritad i tum, lägg till en 3MF vid sidan av så att den som har en modern slicer får hela inställningen.

Läs vidare