UltKit

STL, OBJ eller 3MF: Hvilket 3D-filformat skal du vælge?

Brug STL til et ensfarvet print, du blot skal slice, OBJ når modellen har teksturer til rendering eller en spilmotor, og 3MF når din slicer understøtter det, og du vil have enheder, farver og flere dele med hele vejen. Formatet bestemmer, hvilke metadata der følger med meshet; det afgør aldrig, om selve meshet er fejlfrit.

Jonas WeberJonas WeberRedaktør for webydeevne
Opdateret 12 min. læsning
En 3D-printer i en gennemsigtig kabine på et hvidt skrivebord med en bærbar computer, der viser en 3D-model, og farverige printede dele, herunder et terrænkort og et rødt tandhjul

STL: en liste over trekanter og intet andet

STL blev skabt i 1987 til 3D Systems' første stereolitografimaskiner, og designet bærer præg af det. En fil er en flad liste af trekanter, hver beskrevet ved en fladenormal og tre hjørnepunkter. Der er ingen fælles tabel over punkter, så et hjørne, der rører seks trekanter, skrives seks gange. Der er heller ikke noget felt til enhed: en koordinat på 25 kan betyde millimeter, tommer eller meter, og næsten alle slicere gætter på millimeter. Farve, tekstur og delnavne har ingen plads i kerneformatet, og det er netop derfor, at alle slicere, CAD-programmer og printtjenester stadig læser det.

STL findes i to kodninger. ASCII-STL skriver alt som tekst, med linjer som facet normal, outer loop og vertex 12.5 0 3.2, så du kan åbne filen i en teksteditor og læse tallene. Binær STL starter med en header på 80 bytes og et antal trekanter på 4 bytes og gemmer derefter hver trekant som tolv 4-byte floats plus et attributfelt på 2 bytes: præcis 50 bytes pr. trekant. Den regel gør størrelsen let at forudsige. En model med en million trekanter fylder ca. 50 MB som binær, og ASCII-versionen af samme mesh er typisk fire til seks gange større, fordi hvert ciffer bliver til et tegn.

Enkelheden er både styrken og faldgruben. En STL kan ikke fortælle, om den var tænkt som én del eller tre, om den er eksporteret i tommer, eller om trekanterne faktisk omslutter et massivt legeme. Slicer'en regner det ud fra rå koordinater, og gætter den forkert, får du en del, der er 25,4 gange for lille, eller en manglende væg. Til en enfarvet del, du selv har designet og eksporteret i millimeter, betyder intet af det noget, og STL er stadig det format, der er mindst sandsynligt at blive afvist.

OBJ: polygoner, UV'er og en separat materialefil

OBJ stammer fra Wavefront Technologies, hvis software Advanced Visualizer brugte det i slutningen af 1980'erne, og det bredte sig i 1990'erne som det almindelige tekstformat, næsten alle 3D-programmer kunne udveksle. I modsætning til STL har det en liste over punkter og bygger flader ud fra indeks, så et fælles hjørne gemmes én gang, og fladerne kan være trekanter, firkanter eller større polygoner. Linjer med v rummer positioner, vt teksturkoordinater (UV'er), vn normaler og f fladerne. Grupper (g) og objekter (o) navngiver delene, så OBJ overlever en rundtur gennem Blender, Maya eller ZBrush med strukturen intakt.

Udseendet ligger uden for .obj-filen. En mtllib-linje angiver en tilhørende .mtl-fil, og usemtl-linjer tildeler materialer til flader. .mtl-filen gemmer farver som Kd (diffus) og peger på teksturbilleder med poster som map_Kd wood.png. En tekstureret OBJ er derfor mindst tre filer: geometrien, materialebiblioteket og et eller flere billeder, alle refereret med relativ sti. Sender du kun .obj-filen, ser modtageren en grå model. Den adskillelse er nyttig i spil- og VFX-forløb, hvor kunstnere skifter teksturer uden at røre geometrien, og det er den hyppigste enkeltårsag til, at en downloadet model ser forkert ud.

OBJ har samme blinde vinkel som STL med hensyn til skala: det gemmer rene tal uden enhed. De fleste modelleringsværktøjer skriver meter eller centimeter, mens slicere læser millimeter, så en OBJ fra en spil-asset-butik kan være 10 eller 1.000 gange forkert. Til print tilfører OBJ intet, som en slicer bruger, bortset fra farve pr. punkt i nogle få værktøjer, så hvis du skal printe et kunstværk, er det som regel enklest at beholde teksturerne til rendering og give slicer'en et rent mesh. Den anden vej er at lave en STL om til OBJ den korteste vej fra en printmodel til en rendering eller et spilforløb.

3MF: en ZIP-pakke bygget til 3D-print

3MF blev udgivet i 2015 af 3MF Consortium, en gruppe startet af Microsoft sammen med virksomheder fra print- og CAD-branchen. En .3mf-fil er et ZIP-arkiv, det samme containerformat som omtales i ZIP vs RAR vs 7z. Omdøb en til .zip, og du finder en XML-fil 3D/3dmodel.model med mesh'et, en fil med indholdstyper, relationsfiler og ofte miniaturer og slicer-konfiguration. Hver model angiver sin enhed (mikrometer, millimeter, centimeter, tomme, fod eller meter), så skalaproblemet, der plager STL og OBJ, simpelthen ikke opstår. Farver, basismaterialer, flere objekter og deres placering på byggepladen er alle en del af specifikationen.

Specifikationen kræver også, at meshes er manifold og konsekvent orienteret: hver kant deles af præcis to trekanter, og alle vender udad. Eksportører, der følger reglerne, kan ikke skrive den åbne, selvskærende geometri, som en STL gerne bærer rundt på. Understøttelsen er bred blandt nuværende værktøjer. PrusaSlicer, Bambu Studio, OrcaSlicer og UltiMaker Cura læser 3MF, PrusaSlicer og Bambu Studio gemmer hele projektet som en .3mf med printindstillinger og malede farver indeni, og Microsofts app 3D Builder på Windows åbner den direkte. Det svage punkt er ældre firmware, portaler hos printfarme og CAD-importere, der stadig forventer STL; til dem kan du konvertere 3MF til STL og acceptere, at ekstraerne bliver tilbage.

from ↓ · to →UnitsColorTexturesFlere delePrintindstillingerManifold-regel
STL– STL to Units: no– STL to Color: no– STL to Textures: no– STL to Flere dele: no– STL to Printindstillinger: no– STL to Manifold-regel: no
OBJ– OBJ to Units: noOBJ to Color: yesOBJ to Textures: yesOBJ to Flere dele: yes– OBJ to Printindstillinger: no– OBJ to Manifold-regel: no
3MF3MF to Units: yes3MF to Color: yes3MF to Textures: yes3MF to Flere dele: yes3MF to Printindstillinger: yes3MF to Manifold-regel: yes
supported not offeredRækkerne er formater, kolonnerne er det, selve filen kan indeholde. Farve og teksturer i OBJ kræver den separate .mtl-fil og billeder; teksturer i 3MF kommer fra dets materialeudvidelse. Nogle få værktøjer skriver farve i de ubrugte bytes i binær STL, men ingen standard dækker det.
En række 3D-printere med åben ramme på træborde, hvor den nærmeste har flere blå cylinderformede dele på byggepladen
Foto: Unsplash

Vælg det rette format til opgaven

Det rigtige format afhænger af, hvor filen skal hen, ikke af hvilket der er nyest. Er næste stop en slicer, og delen har én farve, er STL fint, og det er stadig det format, alle fora, modelbiblioteker og printtjenester forstår. Er næste stop en renderer, en spilmotor eller en anden kunstners modelleringsværktøj, bevarer OBJ de UV'er, normaler og navngivne grupper, som STL smider væk, og tekstformen gør det let at undersøge problemer.

3MF gør sig fortjent til sin plads, når filen indeholder mere end geometri. Et flerfarvet print malet i Bambu Studio, en plade med tolv dele sat op til ét job, en del designet i tommer eller et projekt, du vil genåbne med samme lagtykkelse og fyldning, kræver alle 3MF, fordi intet andet format her kan rumme de oplysninger. Skal filen til flere destinationer, så behold den rigeste version som masterkopi og eksportér enklere versioner fra den med en 3D-modelkonverter i stedet for at kæde konverteringer.

STL til almindelige print

Én del, én farve, eksporteret i millimeter. Åbner i alle slicere, CAD-importdialoger og uploadformularer hos printtjenester.

OBJ til teksturerede modeller

UV'er, normaler og navngivne grupper til Blender, Maya, Unity eller Unreal. Send .mtl-filen og teksturbillederne med.

3MF til moderne slicere

Rigtige enheder, farver, flere objekter og printindstillinger i én ZIP. Det oprindelige projektformat i PrusaSlicer og Bambu Studio.

Fem måder, en 3D-fil går galt på

De fleste mislykkede print og ødelagte importer, der skyldes formatet, er i virkeligheden problemer i mesh'et eller i, hvad det modtagende program antog om det. STL er mest udsat, fordi det ikke har metadata, der kan fange fejl; OBJ deler problemerne med skala og manglende filer; 3MF undgår de fleste af dem ved design, selvom en sjusket eksportør stadig kan skrive et dårligt mesh. Åbn rækkerne nedenfor for at se, hvordan hver fejl ser ud, og hvor den som regel kommer fra.

Ikke-manifold mesh

Kanter, der deles af én trekant eller af tre eller flere, huller mellem overflader eller vægge uden tykkelse. Slicer'en viser manglende lag, tilfældige huller eller en advarsel om åbne kanter. Årsagen ligger i modelleringen eller eksporten, ofte fra sammenføjning af dele, der kun rører hinanden.

Omvendte normaler

Nogle trekanter vender indad. Renderere viser sorte eller gennemsigtige pletter, og slicere kan behandle området som tomt rum. En kommando til genberegning af normaler i Blender, Meshmixer eller slicerens reparationsværktøj løser det.

Forveksling af millimeter og tommer

En del tegnet i tommer ankommer 25,4 gange for lille i en slicer, der antager millimeter; centimeter læst som millimeter giver en fejl på 10 gange. STL og OBJ kan ikke gemme enheden, så du angiver den ved eksport eller konvertering.

Manglende .mtl-fil eller teksturer

En OBJ, der indlæses grå eller magenta, har mistet sit materialebibliotek eller sine billeder, eller stierne i .mtl peger på en mappe på den oprindelige kunstners computer. Hold alle filer i én mappe, og zip dem sammen.

Enorme ASCII-STL-filer

En detaljeret scanning gemt som ASCII-STL kan nå flere hundrede megabyte, hvilket gør slicere langsomme og rammer uploadgrænser. Eksporteres samme mesh igen som binær STL, skrumper det til omkring en femtedel uden at ændre en eneste trekant.

Hvor store filerne typisk bliver i hvert format

Størrelsen følger af strukturen. Binær STL er fastlagt til 50 bytes pr. trekant, så du kan regne den ud før eksport. ASCII-STL gentager hvert hjørne som tekst og ender som regel fire til seks gange over binær. OBJ gemmer hvert fælles punkt én gang og henviser til det via indeks, så for et typisk lukket mesh bliver den mindre end ASCII-STL og nogenlunde på niveau med binær STL, større hvis den også har UV'er og normaler. 3MF gemmer indekseret XML og komprimerer det derefter i ZIP-filen, hvilket som regel gør den til den mindste af de tre for samme geometri.

Tallene nedenfor er typiske for et lukket mesh på ca. 500.000 trekanter, f.eks. en detaljeret figur. Rigtige filer varierer med koordinatpræcision og eksportør, så se dem som størrelsesordener, nyttige når en printtjeneste begrænser uploads, eller når en STL eksporteret fra en 3MF bliver mange gange større.

Binær STL (500.000 trekanter × 50 bytes)
≈ 25 MB
ASCII-STL, samme mesh, typisk
≈ 100–150 MB
OBJ uden UV'er, typisk
≈ 15–30 MB
3MF efter ZIP-komprimering, typisk
≈ 5–12 MB

Hvad konvertering løser, og hvad den aldrig vil løse

En konvertering læser trekanterne fra én beholder og skriver dem ind i en anden. Alt, hvad målformatet kan udtrykke, følger med; alt andet falder fra. Derfor er STL til OBJ tabsfri for geometri, 3MF til STL mister farver, enheder og pladeopsætning, og OBJ til STL mister teksturer og delnavne. I 3D-værktøjerne på UltKit er de ekstra valg eksplicitte: Modelenheder fortæller konverteren, hvilken skala kilden bruger, Op-akse håndterer forskellen mellem Y-op og Z-op mellem spilmotorer og slicere, og Flet til ét mesh afgør, om separate dele forbliver adskilte.

Det, ingen konvertering gør, er at reparere et mesh. Har en STL et hul, har den OBJ, du laver af den, samme hul, og en 3MF-eksportør vil enten afvise den eller skrive den alligevel. Reparation er et separat trin i et mesh-værktøj eller slicerens indbyggede reparationsfunktion, og det gøres bedst én gang i din masterfil, før du eksporterer andet. Det samme gælder skala: en konvertering kan ikke vide, at en del var tænkt i tommer, medmindre du fortæller det. Detaljer fungerer på samme måde: en STL med få polygoner bliver til en OBJ eller 3MF med få polygoner, så eksportér igen fra kildemodellen, når kvaliteten tæller.

Hvad et formatskift gør

  • Flytter de samme trekanter over i en beholder, et andet program accepterer
  • Anvender den enhed, du vælger under Modelenheder, og retter en skalafejl på 25,4× eller 10×
  • Drejer modellen mellem Y-op og Z-op med Op-akse
  • Gør en ASCII-STL mindre ved at skrive binær i stedet
  • Beholder eller fletter separate dele afhængigt af Flet til ét mesh

Hvad det lader være præcis som før

  • Huller, åbne kanter og non-manifold geometri
  • Omvendte eller inkonsekvente normaler
  • Selvskærende dele og vægge uden tykkelse
  • Detaljer, der gik tabt, da mesh'et først blev eksporteret
  • Farver og teksturer, når målformatet ikke har plads til dem

Beslutningstabel: STL, OBJ eller 3MF

To andre formater dukker op, hver gang dette spørgsmål stilles. STEP (ISO 10303) gemmer eksakte legemer og flader i stedet for trekanter, så det er formatet at bruge, når en del skal tilbage i Fusion 360, SolidWorks eller FreeCAD til redigering. GLB, den binære form af Khronos Groups glTF 2.0, pakker et mesh med materialer og teksturer i én fil i meter og er formatet til at vise en model på nettet eller i Android AR.

For de tre formater, denne artikel dækker, opsummerer tabellen nedenfor valget efter destination. Passer to rækker, så vælg det format, der rummer mest information, og eksportér det enklere senere; at gå fra 3MF til STL er let, mens genopbygning af tabte farver eller enheder er manuelt arbejde.

Vælg efter, hvor filen skal hen
SituationBedste formatHvorfor
Enfarvet del til en vilkårlig slicerSTL (binær)Universel understøttelse; slicer'en behøver intet andet
Upload til et modelbibliotek eller en printtjenesteSTL, plus 3MF hvis det tilbydesSTL accepteres altid; 3MF bevarer enheder og farver
Flerfarvet print eller print i flere materialer3MFEneste format her, der gemmer farver og materialer pr. del til slicere
Plade med flere dele og printindstillinger3MFGemmer objekternes placering og slicer-indstillinger i én fil
Del designet i tommer3MFAngiver enheden, så intet skaleres med 25,4
Tekstureret model til Blender, Unity eller UnrealOBJ (+ .mtl og billeder)Bevarer UV'er, normaler og materialetildelinger
Hurtigt tjek i en teksteditorOBJ eller ASCII-STLRen tekst, du kan læse linje for linje
Gammel firmware eller software, der kun nævner STLSTLFjern ekstraerne, og send mesh'et

Det vigtigste

  • STL gemmer kun trekanter: ingen enheder, ingen farve og 50 bytes pr. trekant i binær form.
  • OBJ tilføjer UV'er, normaler og navngivne grupper, men farver og teksturer afhænger af en separat .mtl-fil og billedfiler.
  • 3MF er en ZIP med XML, der registrerer enheder, farver, flere objekter og printindstillinger, og kræver lukkede meshes.
  • Brug STL til almindelige enfarvede print, OBJ til teksturerede modeller i kunst- og spilforløb, og 3MF, når din slicer understøtter det.
  • Konvertering ændrer beholderen, ikke mesh'et: reparer huller og normaler i et mesh-værktøj, og angiv enheden selv.

Ofte stillede spørgsmål

Bliver STL erstattet af 3MF?

Langsomt, når det gælder 3D-print. PrusaSlicer og Bambu Studio gemmer allerede projekter som 3MF, men STL er stadig det format, som alle programmer og modelbiblioteker accepterer, så de to formater vil eksistere side om side i mange år.

Kan en binær STL gemme farver?

Ikke på nogen standardiseret måde. Nogle få programmer skriver farve ind i det 2 byte store attributfelt i hver trekant, men de fleste slicere ignorerer det, så brug 3MF eller OBJ, når farve har betydning.

Hvorfor er min OBJ grå, når jeg har downloadet den?

Enten er .mtl-filen eller teksturbillederne blevet væk, eller også peger stierne i .mtl-filen på mapper, der ikke findes på din computer. Læg .obj, .mtl og billederne i samme mappe, og indlæs modellen igen.

Giver ASCII- eller binær STL det mest præcise print?

Ingen af dem udskriver mere nøjagtigt i praksis. Begge beskriver de samme trekanter. Binær gemmer koordinaterne som 32-bit flydende tal og ASCII som tekst, og binære filer er typisk flere gange mindre.

Kan jeg konvertere en OBJ tilbage til STL til print?

Ja. Trekanterne overføres uændret, mens UV'er, materialer og teksturer udelades, fordi STL ikke har plads til dem. Tjek skaleringen bagefter, da OBJ-filer fra modelleringsprogrammer ofte er i meter eller centimeter.

Hvilket format skal jeg bruge til at dele en model, som andre skal printe?

Tilbyd en STL for størst mulig kompatibilitet, og hvis modellen har flere dele, farver eller er designet i tommer, så læg en 3MF ved siden af, så folk med en moderne slicer får hele opsætningen.

Læs videre