UltKit

STL, OBJ eller 3MF: Hvilket 3D-filformat bør du velge?

Bruk STL for en ensfarget utskrift du bare skal slice, OBJ når modellen har teksturer for rendering eller en spillmotor, og 3MF når sliceren din støtter det og du vil at enheter, farger og flere deler skal komme trygt frem. Formatet bestemmer hvilke metadata som følger med nettet; det avgjør aldri om selve nettet er feilfritt.

Jonas WeberJonas WeberRedaktør for nettytelse
Oppdatert 12 min lesetid
En 3D-skriver for skrivebordet i et gjennomsiktig kabinett på en hvit pult, med en bærbar PC som viser en 3D-modell og fargerike utskrevne deler, blant annet et terrengkart og et rødt tannhjul

STL: en liste med trekanter og ingenting annet

STL ble laget i 1987 for 3D Systems' første stereolitografimaskiner, og designet bærer preg av det. En fil er en flat liste med trekanter, hver beskrevet av en flatenormal og tre hjørnepunkter. Det finnes ingen felles hjørnetabell, så et hjørne som berører seks trekanter skrives seks ganger. Det finnes heller ikke noe enhetsfelt: en koordinat på 25 kan bety millimeter, tommer eller meter, og nesten alle slicere gjetter millimeter. Farge, tekstur og delnavn har ingen plass i kjerneformatet, og det er akkurat derfor alle slicere, CAD-programmer og utskriftstjenester fortsatt leser det.

STL finnes i to kodinger. ASCII-STL skriver alt ut som tekst, med linjer som facet normal, outer loop og vertex 12.5 0 3.2, slik at du kan åpne filen i et tekstredigeringsprogram og lese tallene. Binær STL starter med en header på 80 byte og et trekantantall på 4 byte, og lagrer deretter hver trekant som tolv flyttall på 4 byte pluss et attributtfelt på 2 byte: nøyaktig 50 byte per trekant. Den regelen gjør størrelsen lett å forutsi. En modell med én million trekanter er omtrent 50 MB som binær, og ASCII-versjonen av det samme nettet er vanligvis fire til seks ganger større fordi hvert siffer blir et tegn.

Enkelheten er både styrken og fellen. En STL kan ikke fortelle om den skulle være én del eller tre, om den ble eksportert i tommer, eller om trekantene faktisk omslutter et solid legeme. Slicereren må lese det ut av rå koordinater, og når den gjetter feil, får du en del som er 25,4 ganger for liten eller en manglende vegg. For en enfarget del du har tegnet selv og eksportert i millimeter spiller ikke dette noen rolle, og STL er fortsatt formatet som minst sannsynlig blir avvist.

OBJ: polygoner, UV og en separat materialfil

OBJ stammer fra Wavefront Technologies, hvis programvare Advanced Visualizer brukte det på slutten av 1980-tallet, og det spredte seg gjennom 1990-tallet som tekstformatet nesten alle 3D-programmer kunne utveksle. I motsetning til STL har det en hjørneliste og bygger flater fra indekser, så et felles hjørne lagres én gang, og flater kan være trekanter, firkanter eller større polygoner. Linjer som starter med v inneholder posisjoner, vt teksturkoordinater (UV-er), vn normaler og f flatene. Grupper (g) og objekter (o) gir delene navn, så OBJ overlever en rundtur gjennom Blender, Maya eller ZBrush med strukturen intakt.

Utseendet ligger utenfor .obj-filen. En mtllib-linje peker til en tilhørende .mtl-fil, og usemtl-linjer tildeler materialer til flater. .mtl-filen lagrer farger som Kd (diffus) og peker på teksturbilder med oppføringer som map_Kd wood.png. En tekstur-OBJ består derfor av minst tre filer: geometrien, materialbiblioteket og ett eller flere bilder, alle referert med relativ sti. Sender du bare .obj, ser mottakeren en grå modell. Denne oppdelingen er nyttig i spill- og VFX-arbeidsflyter der kunstnere bytter teksturer uten å røre geometrien, og det er den vanligste grunnen til at en nedlastet modell ser feil ut.

OBJ har samme blinde flekk som STL når det gjelder skala: det lagrer rene tall uten enhet. De fleste modelleringsverktøy skriver meter eller centimeter, mens slicere leser millimeter, så en OBJ fra en spillressursbutikk kan komme med 10 eller 1000 ganger feil størrelse. Til utskrift tilfører OBJ ingenting slicereren bruker, bortsett fra farge per hjørne i noen få verktøy. Skal du skrive ut en kunstressurs, er det derfor ofte enklest å beholde teksturene til rendering og gi slicereren et rent nett. Motsatt vei er å gjøre om en STL til OBJ den korteste veien fra en utskriftsmodell til en rendering- eller spillarbeidsflyt.

3MF: en ZIP-pakke laget for utskrift

3MF ble utgitt i 2015 av 3MF Consortium, en gruppe startet av Microsoft sammen med selskaper fra utskrifts- og CAD-bransjen. En .3mf-fil er et ZIP-arkiv, det samme beholderformatet som omtales i ZIP vs RAR vs 7z. Gi den filendelsen .zip, så finner du en XML-fil 3D/3dmodel.model med nettet, en fil med innholdstyper, relasjonsfiler og ofte miniatyrbilder og slicer-konfigurasjon. Hver modell oppgir sin enhet (mikrometer, millimeter, centimeter, tomme, fot eller meter), så skalaproblemet som plager STL og OBJ oppstår rett og slett ikke. Farger, basismaterialer, flere objekter og plasseringen på byggeplaten er alle del av spesifikasjonen.

Spesifikasjonen krever også at nett er manifold og konsekvent orientert: hver kant deles av nøyaktig to trekanter, og alle vender utover. Eksportører som følger reglene kan ikke skrive den åpne, selvskjærende geometrien en STL gjerne bærer på. Støtten er bred blant dagens verktøy. PrusaSlicer, Bambu Studio, OrcaSlicer og UltiMaker Cura leser 3MF, PrusaSlicer og Bambu Studio lagrer hele prosjektet som en .3mf med utskriftsinnstillinger og malte farger inni, og Microsofts app 3D Builder på Windows åpner den direkte. Det svake punktet er eldre fastvare, portaler hos printfarmer og CAD-importører som fortsatt forventer STL. For dem kan du konvertere 3MF til STL og godta at tilleggene blir igjen.

from ↓ · to →UnitsColorTexturesFlere delerUtskriftsinnstillingerManifold-regel
STL– STL to Units: no– STL to Color: no– STL to Textures: no– STL to Flere deler: no– STL to Utskriftsinnstillinger: no– STL to Manifold-regel: no
OBJ– OBJ to Units: noOBJ to Color: yesOBJ to Textures: yesOBJ to Flere deler: yes– OBJ to Utskriftsinnstillinger: no– OBJ to Manifold-regel: no
3MF3MF to Units: yes3MF to Color: yes3MF to Textures: yes3MF to Flere deler: yes3MF to Utskriftsinnstillinger: yes3MF to Manifold-regel: yes
supported not offeredRadene er formater, kolonnene er det filen selv kan inneholde. Farger og teksturer i OBJ krever den separate .mtl-filen og bildene; teksturer i 3MF kommer fra materialutvidelsen. Noen få verktøy skriver farge i de ubrukte bytene i binær STL, men ingen standard dekker det.
En rekke 3D-printere med åpen ramme på trebenker, og den nærmeste har flere blå sylinderformede deler på byggeplaten
Foto: Unsplash

Velg format etter oppgaven

Riktig format avhenger av hvor filen skal videre, ikke av hvilket som er nyest. Hvis neste stopp er en slicer og delen er enfarget, er STL helt greit, og det er fortsatt formatet alle forum, modellbiblioteker og utskriftstjenester forstår. Hvis neste stopp er en renderer, en spillmotor eller en annen kunstners modelleringsverktøy, beholder OBJ UV-ene, normalene og de navngitte gruppene som STL kaster, og tekstformen gjør det enkelt å inspisere problemer.

3MF fortjener plassen sin når filen bærer mer enn geometri. En flerfarget utskrift malt i Bambu Studio, en plate med tolv deler ordnet for én jobb, en del tegnet i tommer eller et prosjekt du vil åpne igjen med samme lagtykkelse og fyllgrad trenger alle 3MF, fordi ingen andre formater her kan holde den informasjonen. Skal filen til flere mål, behold den rikeste versjonen som hovedkopi og eksporter enklere versjoner fra den med en 3D-modellkonverter i stedet for å kjede sammen konverteringer.

STL for enkle utskrifter

Én del, én farge, eksportert i millimeter. Åpnes i alle slicere, CAD-importdialoger og opplastingsskjemaer hos utskriftstjenester.

OBJ for teksturerte modeller

UV-er, normaler og navngitte grupper for Blender, Maya, Unity eller Unreal. Send med .mtl-filen og teksturbildene.

3MF for moderne slicere

Ekte enheter, farger, flere objekter og utskriftsinnstillinger i én ZIP. Det opprinnelige prosjektformatet i PrusaSlicer og Bambu Studio.

Fem måter en 3D-fil kan gå galt på

De fleste mislykkede utskrifter og ødelagte importer som skyldes formatet, er egentlig problemer i nettet, eller i det mottakerprogrammet antok om det. STL er mest utsatt fordi det ikke har metadata som fanger opp feil; OBJ deler problemene med skala og manglende filer; 3MF unngår de fleste av dem ved design, selv om en slurvete eksportør fortsatt kan skrive et dårlig nett. Åpne radene nedenfor for å se hvordan hver feil ser ut og hvor den vanligvis kommer fra.

Nett som ikke er manifold

Kanter som deles av én trekant eller av tre eller flere, gap mellom overflater eller vegger med null tykkelse. Slicereren viser manglende lag, tilfeldige hull eller en advarsel om åpne kanter. Årsaken ligger i modelleringen eller eksporten, ofte fra sammenslåing av deler som bare tangerer hverandre.

Snudde normaler

Noen trekanter vender innover. Rendere viser svarte eller gjennomsiktige flekker, og slicere kan behandle området som tomt rom. En kommando for å beregne normaler på nytt i Blender, Meshmixer eller slicerens reparasjonsverktøy løser det.

Forveksling av millimeter og tommer

En del tegnet i tommer kommer 25,4 ganger for liten inn i en slicer som antar millimeter; centimeter lest som millimeter gir en feil på 10 ganger. STL og OBJ kan ikke lagre enheten, så du setter den ved eksport eller konvertering.

Manglende .mtl-fil eller teksturer

En OBJ som lastes grå eller magenta har mistet materialbiblioteket eller bildene, eller stiene i .mtl peker til en mappe på den opprinnelige kunstnerens datamaskin. Ha alle filene i én mappe og zip dem sammen.

Enorme ASCII-STL-filer

En detaljert skanning lagret som ASCII-STL kan passere flere hundre megabyte, noe som gjør slicere trege og går over opplastingsgrenser. Eksporterer du det samme nettet på nytt som binær STL, krymper det til omtrent en femtedel uten å endre en eneste trekant.

Hvor store filene i hvert format typisk blir

Størrelsen følger av strukturen. Binær STL er fast på 50 byte per trekant, så du kan regne den ut før eksport. ASCII-STL gjentar hvert hjørne som tekst og havner vanligvis fire til seks ganger over binær. OBJ lagrer hvert felles hjørne én gang og refererer til det med indeks, så for et typisk lukket nett blir den mindre enn ASCII-STL og omtrent på nivå med binær STL, større hvis den også har UV-er og normaler. 3MF lagrer indeksert XML og komprimerer den i ZIP-en, noe som vanligvis gjør den minst av de tre for samme geometri.

Tallene nedenfor er typiske for et lukket nett på omtrent 500 000 trekanter, for eksempel en detaljert figur. Faktiske filer varierer med koordinatpresisjon og eksportør, så regn dem som størrelsesordener, nyttige når en utskriftstjeneste setter tak på opplasting eller en STL eksportert fra en 3MF blir flere ganger større.

Binær STL (500 000 trekanter × 50 byte)
≈ 25 MB
ASCII-STL, samme nett, typisk
≈ 100–150 MB
OBJ uten UV-er, typisk
≈ 15–30 MB
3MF etter ZIP-komprimering, typisk
≈ 5–12 MB

Hva konvertering løser, og hva den aldri vil løse

En konvertering leser trekantene fra én beholder og skriver dem inn i en annen. Alt målformatet kan uttrykke, følger med; alt det ikke kan, forsvinner. Derfor er STL til OBJ tapsfritt for geometri, mens 3MF til STL mister farger, enheter og platelayout, og OBJ til STL mister teksturer og delnavn. I 3D-verktøyene på UltKit er de ekstra valgene eksplisitte: Modellenheter forteller konverteren hvilken skala kilden bruker, Opp-akse håndterer forskjellen mellom Y-opp og Z-opp i spillmotorer og slicere, og Slå sammen til ett nett avgjør om separate deler forblir separate.

Det ingen konvertering gjør, er å reparere et nett. Hvis en STL har et hull, har OBJ-en du lager av den det samme hullet, og en 3MF-eksportør vil enten avvise den eller skrive den likevel. Reparasjon er et eget steg i et nettverktøy eller slicerens innebygde reparasjon, og det gjøres best én gang, i hovedfilen, før du eksporterer noe annet. Det samme gjelder skala: en konvertering kan ikke vite at en del var ment å være i tommer med mindre du sier det. Detaljer fungerer på samme måte: en STL med få polygoner blir en OBJ eller 3MF med få polygoner, så eksporter på nytt fra kildemodellen når kvaliteten er viktig.

Hva et formatbytte gjør

  • Flytter de samme trekantene inn i en beholder et annet program godtar
  • Bruker enheten du velger under Modellenheter, og retter en skalafeil på 25,4× eller 10×
  • Roterer modellen mellom Y-opp og Z-opp med Opp-akse
  • Krymper en ASCII-STL ved å skrive binær i stedet
  • Beholder eller slår sammen separate deler, avhengig av Slå sammen til ett nett

Hva det lar stå helt uendret

  • Hull, åpne kanter og geometri som ikke er manifold
  • Snudde eller inkonsekvente normaler
  • Selvskjærende deler og vegger med null tykkelse
  • Detaljer som gikk tapt da nettet først ble eksportert
  • Farger og teksturer når målformatet ikke har plass til dem

Beslutningstabell: STL, OBJ eller 3MF

To andre formater dukker opp hver gang dette spørsmålet stilles. STEP (ISO 10303) lagrer eksakte solide legemer og flater i stedet for trekanter, så det er formatet å bruke når en del skal tilbake til Fusion 360, SolidWorks eller FreeCAD for redigering. GLB, den binære formen av Khronos Groups glTF 2.0, pakker et nett med materialer og teksturer i én fil i meter og er formatet for å vise en modell på nettet eller i Android AR.

For de tre formatene denne artikkelen dekker, oppsummerer tabellen nedenfor valget etter bestemmelsessted. Hvis to rader passer, velg formatet som bærer mest informasjon og eksporter det enklere senere; å gå fra 3MF til STL er lett, mens det er manuelt arbeid å gjenskape tapte farger eller enheter.

Velg etter hvor filen skal videre
SituasjonBeste formatHvorfor
Enfarget del til en hvilken som helst slicerSTL (binær)Universell støtte; slicereren trenger ikke noe annet
Opplasting til et modellbibliotek eller en utskriftstjenesteSTL, pluss 3MF hvis det tilbysSTL godtas alltid; 3MF beholder enheter og farger
Flerfarget utskrift eller utskrift med flere materialer3MFDet eneste formatet her som lagrer farger og materialer per del for slicere
Plate med flere deler og utskriftsinnstillinger3MFLagrer objektplassering og slicer-innstillinger i én fil
Del tegnet i tommer3MFOppgir enheten, så ingenting skaleres med 25,4
Teksturert modell for Blender, Unity eller UnrealOBJ (+ .mtl og bilder)Beholder UV-er, normaler og materialtildelinger
Rask kontroll i et tekstredigeringsprogramOBJ eller ASCII-STLRen tekst du kan lese linje for linje
Gammel fastvare eller programvare som bare oppgir STLSTLFjern tilleggene og send nettet

Viktigste punkter

  • STL lagrer bare trekanter: ingen enheter, ingen farger og 50 byte per trekant i binær form.
  • OBJ legger til UV-er, normaler og navngitte grupper, men farger og teksturer avhenger av en separat .mtl-fil og bildefiler.
  • 3MF er en ZIP med XML som registrerer enheter, farger, flere objekter og utskriftsinnstillinger, og krever lukkede nett.
  • Bruk STL for enkle enfargede utskrifter, OBJ for teksturerte modeller i kunst- og spillarbeidsflyter, og 3MF når slicereren din støtter det.
  • Konvertering endrer beholderen, ikke nettet: reparer hull og normaler i et nettverktøy, og sett enheten selv.

Vanlige spørsmål

Blir STL erstattet av 3MF?

Sakte, når det gjelder 3D-printing. PrusaSlicer og Bambu Studio lagrer allerede prosjekter som 3MF, men STL er fortsatt formatet som alle verktøy og modellbiblioteker godtar, så de to vil eksistere side om side i mange år.

Kan en binær STL lagre farger?

Ikke på noen standard måte. Noen programmer skriver farge inn i attributtfeltet på 2 byte i hver trekant, men de fleste slicere ignorerer det, så bruk 3MF eller OBJ når farge er viktig.

Hvorfor vises OBJ-filen min grå etter at jeg har lastet den ned?

Enten ble .mtl-filen eller teksturbildene liggende igjen, eller så peker banene inne i .mtl-filen til mapper som ikke finnes på datamaskinen din. Legg .obj-filen, .mtl-filen og bildene i én mappe, og last inn modellen på nytt.

Gir ASCII- eller binær STL en mer nøyaktig utskrift?

Ingen av dem skriver ut mer nøyaktig i praksis. Begge beskriver de samme trekantene. Binær lagrer koordinater som 32-biters flyttall og ASCII som tekst, og binære filer er vanligvis flere ganger mindre.

Kan jeg gjøre en OBJ om til STL igjen for utskrift?

Ja. Trekantene overføres uendret, mens UV-er, materialer og teksturer går tapt fordi STL ikke har plass til dem. Sjekk skalaen etterpå, siden OBJ-filer fra modelleringsverktøy ofte bruker meter eller centimeter.

Hvilket format bør jeg bruke når jeg deler en modell som andre skal skrive ut?

Tilby en STL for bredest mulig kompatibilitet, og legg ved en 3MF hvis modellen har flere deler eller farger, eller er tegnet i tommer, slik at de som har en moderne slicer får hele oppsettet.

Les videre