UltKit

STL vs OBJ vs 3MF: welk 3D-bestandsformaat kiest u?

Gebruik STL voor een eenkleurige print die u alleen hoeft te slicen, OBJ wanneer het model texturen bevat voor rendering of een game-engine, en 3MF wanneer uw slicer het ondersteunt en u wilt dat eenheden, kleuren en meerdere onderdelen onderweg behouden blijven. Het formaat bepaalt welke metadata met de mesh meegaat; het bepaalt nooit of de mesh zelf in orde is.

Jonas WeberJonas WeberRedacteur webprestaties
Bijgewerkt 12 min leestijd
Een 3D-printer voor op het bureau in een transparante behuizing op een wit bureau, met een laptop die een 3D-model toont en kleurrijke geprinte onderdelen, waaronder een reliëfkaart en een rood tandwiel

STL: een lijst driehoeken en verder niets

STL is in 1987 geschreven voor de eerste stereolithografiemachines van 3D Systems, en dat zie je aan het ontwerp. Een bestand is een platte lijst driehoeken, elk beschreven door een facetnormaal en drie hoekpunten. Er is geen gedeelde vertextabel, dus een hoekpunt waar zes driehoeken samenkomen wordt zes keer weggeschreven. Er is ook geen eenheidsveld: een coördinaat van 25 kan millimeters, inches of meters betekenen, en vrijwel elke slicer gaat uit van millimeters. Kleur, textuur en onderdeelnamen horen niet bij het basisformaat, en juist daarom lezen alle slicers, CAD-pakketten en printdiensten het nog steeds.

STL kent twee codeervormen. ASCII-STL schrijft alles als tekst uit, met regels als facet normal, outer loop en vertex 12.5 0 3.2, zodat je het in een teksteditor kunt openen en de getallen kunt lezen. Binaire STL begint met een header van 80 bytes en een driehoekenteller van 4 bytes, en slaat daarna elke driehoek op als twaalf floats van 4 bytes plus een attribuutveld van 2 bytes: precies 50 bytes per driehoek. Zo is de grootte makkelijk te voorspellen. Een model van een miljoen driehoeken is als binair bestand ongeveer 50 MB; dezelfde mesh in ASCII is meestal vier tot zes keer groter, omdat elk cijfer een teken wordt.

De eenvoud is zowel de kracht als de valkuil. Een STL kan niet vertellen of het één onderdeel of drie moest zijn, of het in inches is geëxporteerd, of de driehoeken wel een massief lichaam omsluiten. De slicer leidt dat af uit ruwe coördinaten, en als die verkeerd gokt krijg je een onderdeel dat 25,4 keer te klein is of een ontbrekende wand. Voor een eigen ontwerp in één kleur, geëxporteerd in millimeters, maakt dat niets uit en wordt STL het minst snel geweigerd.

OBJ: polygonen, UV's en een apart materiaalbestand

OBJ komt van Wavefront Technologies, wier software Advanced Visualizer het eind jaren tachtig gebruikte, en het verspreidde zich in de jaren negentig als het tekstformaat dat bijna elk 3D-programma kon uitwisselen. Anders dan STL bewaart het een vertexlijst en bouwt het vlakken op uit indices, zodat een gedeeld hoekpunt één keer wordt opgeslagen, en vlakken driehoeken, vierhoeken of grotere polygonen kunnen zijn. Regels met v bevatten posities, vt textuurcoördinaten (UV's), vn normalen en f de vlakken. Groepen (g) en objecten (o) geven onderdelen een naam, dus OBJ overleeft een heen-en-weerreis via Blender, Maya of ZBrush met behoud van de structuur.

Het uiterlijk staat buiten het .obj-bestand. Een mtllib-regel noemt een bijbehorend .mtl-bestand en usemtl-regels wijzen materialen aan vlakken toe. Het .mtl-bestand slaat kleuren op zoals Kd (diffuus) en verwijst naar textuurafbeeldingen met regels als map_Kd wood.png. Een OBJ met textuur bestaat dus uit minstens drie bestanden: de geometrie, de materiaalbibliotheek en een of meer afbeeldingen, allemaal via relatieve paden. Stuur je alleen het .obj, dan ziet de ontvanger een grijs model. Die scheiding is handig in game- en VFX-pipelines, waar artiesten texturen verwisselen zonder de geometrie aan te raken, en het is de meest voorkomende reden dat een gedownload model er verkeerd uitziet.

OBJ heeft dezelfde blinde vlek voor schaal als STL: het bewaart kale getallen zonder eenheid. De meeste modelleertools schrijven meters of centimeters, terwijl slicers millimeters lezen, dus een OBJ uit een game-assetstore kan 10 of 1.000 keer ernaast zitten. Voor printen voegt OBJ niets toe wat een slicer gebruikt, behalve kleur per vertex in enkele tools. Wil je een kunstasset printen, bewaar dan het liefst de texturen voor rendering en geef de slicer een schone mesh. Andersom is een STL omzetten naar OBJ de kortste weg van een printmodel naar een render- of gameworkflow.

3MF: een ZIP-pakket gemaakt voor 3D-printen

3MF werd in 2015 gepubliceerd door het 3MF Consortium, een groep die Microsoft startte met bedrijven uit de print- en CAD-industrie. Een .3mf-bestand is een ZIP-archief, dezelfde containervorm als besproken in ZIP vs RAR vs 7z. Hernoem het naar .zip en je vindt een XML-bestand 3D/3dmodel.model met de mesh, een content-typesbestand, relatiebestanden en vaak miniaturen en slicerconfiguratie. Elk model geeft zijn eenheid aan (micron, millimeter, centimeter, inch, voet of meter), dus het schaalprobleem van STL en OBJ komt gewoon niet voor. Kleuren, basismaterialen, meerdere objecten en hun plaats op het printbed maken allemaal deel uit van de specificatie.

De specificatie eist ook dat meshes manifold en consistent georiënteerd zijn: elke rand gedeeld door precies twee driehoeken, allemaal naar buiten gericht. Exporters die zich aan de regels houden kunnen de open, zichzelf snijdende geometrie die een STL gewoon bevat niet wegschrijven. De ondersteuning is breed bij huidige tools. PrusaSlicer, Bambu Studio, OrcaSlicer en UltiMaker Cura lezen 3MF, PrusaSlicer en Bambu Studio slaan hun hele project op als .3mf met printinstellingen en geschilderde kleuren erin, en de app 3D Builder van Microsoft op Windows opent het direct. De zwakke plek is oudere firmware, portalen van printfarms en CAD-importers die nog STL verwachten; zet de 3MF daarvoor om naar STL en accepteer dat de extra's achterblijven.

from ↓ · to →UnitsColorTexturesMeerdere onderdelenPrintinstellingenManifoldregel
STL– STL to Units: no– STL to Color: no– STL to Textures: no– STL to Meerdere onderdelen: no– STL to Printinstellingen: no– STL to Manifoldregel: no
OBJ– OBJ to Units: noOBJ to Color: yesOBJ to Textures: yesOBJ to Meerdere onderdelen: yes– OBJ to Printinstellingen: no– OBJ to Manifoldregel: no
3MF3MF to Units: yes3MF to Color: yes3MF to Textures: yes3MF to Meerdere onderdelen: yes3MF to Printinstellingen: yes3MF to Manifoldregel: yes
supported not offeredRijen zijn formaten, kolommen zijn wat het bestand zelf kan bevatten. Kleur en texturen bij OBJ vragen om het aparte .mtl-bestand en afbeeldingen; texturen in 3MF komen uit de materialenextensie. Een paar tools schrijven kleur in de ongebruikte bytes van binaire STL, maar geen standaard dekt dat.
Een rij open 3D-printers op houten werkbanken, de dichtstbijzijnde met meerdere blauwe cilindrische onderdelen op het printbed
Foto: Unsplash

Het juiste formaat voor de taak

Het juiste formaat hangt af van waar het bestand heen gaat, niet van welk formaat nieuwer is. Is de volgende stop een slicer en is het onderdeel eenkleurig, dan is STL prima, en het is nog steeds het formaat dat elk forum, elke modelbibliotheek en elke printdienst begrijpt. Is de volgende stop een renderer, een game-engine of de modelleertool van een andere artiest, dan behoudt OBJ de UV's, normalen en benoemde groepen die STL weggooit, en de tekstvorm maakt problemen makkelijk te inspecteren.

3MF verdient zijn plek als het bestand meer bevat dan geometrie. Een meerkleurige print geschilderd in Bambu Studio, een plaat met twaalf onderdelen voor één klus, een onderdeel ontworpen in inches of een project dat je wilt heropenen met dezelfde laaghoogte en vulling: ze vragen allemaal om 3MF, want geen ander formaat hier kan die informatie bewaren. Heb je meerdere bestemmingen, bewaar dan de rijkste versie als hoofdkopie en exporteer eenvoudiger versies daarvan met een 3D-modelconverter in plaats van conversies te ketenen.

STL voor eenvoudige prints

Eén onderdeel, één kleur, geëxporteerd in millimeters. Opent in elke slicer, CAD-importdialoog en uploadformulier van printdiensten.

OBJ voor modellen met textuur

UV's, normalen en benoemde groepen voor Blender, Maya, Unity of Unreal. Lever het .mtl-bestand en de textuurafbeeldingen mee.

3MF voor moderne slicers

Echte eenheden, kleuren, meerdere objecten en printinstellingen in één ZIP. Eigen projectformaat van PrusaSlicer en Bambu Studio.

Vijf manieren waarop een 3D-bestand misgaat

De meeste mislukte prints en kapotte imports die aan het formaat worden toegeschreven, zijn in werkelijkheid problemen in de mesh of in wat het ontvangende programma erover aannam. STL is het kwetsbaarst omdat het geen metadata bevat om fouten op te vangen; OBJ deelt de schaalproblemen en het probleem van ontbrekende bestanden; 3MF voorkomt de meeste door zijn ontwerp, al kan een slordige exporter nog steeds een slechte mesh schrijven. Open de rijen hieronder om te zien hoe elk probleem eruitziet en waar het meestal vandaan komt.

Niet-manifold mesh

Randen gedeeld door één driehoek of door drie of meer, gaten tussen oppervlakken of wanden zonder dikte. De slicer toont ontbrekende lagen, willekeurige gaten of een waarschuwing over open randen. De oorzaak ligt in het modelleren of exporteren, vaak door onderdelen samen te voegen die elkaar alleen raken.

Omgekeerde normalen

Sommige driehoeken wijzen naar binnen. Renderers tonen zwarte of doorzichtige plekken en slicers kunnen het gebied als lege ruimte behandelen. Een opdracht om normalen opnieuw te berekenen in Blender, Meshmixer of de reparatietool van de slicer lost het op.

Verwarring tussen millimeters en inches

Een onderdeel getekend in inches komt 25,4 keer te klein aan in een slicer die millimeters aanneemt; centimeters gelezen als millimeters geven een fout van factor 10. STL en OBJ kunnen de eenheid niet vastleggen, dus stel je die in bij het exporteren of converteren.

Ontbrekend .mtl-bestand of ontbrekende texturen

Een OBJ die grijs of magenta laadt, mist zijn materiaalbibliotheek of afbeeldingen, of de paden in het .mtl wijzen naar een map op de computer van de oorspronkelijke maker. Houd alle bestanden in één map en zip ze samen.

Enorme ASCII-STL-bestanden

Een gedetailleerde scan opgeslagen als ASCII-STL kan enkele honderden megabytes beslaan, wat slicers vertraagt en uploadlimieten overschrijdt. Dezelfde mesh opnieuw exporteren als binaire STL verkleint hem tot ongeveer een vijfde zonder één driehoek te veranderen.

Hoe groot elk formaat doorgaans wordt

De grootte volgt uit de structuur. Binaire STL ligt vast op 50 bytes per driehoek, dus je kunt hem vóór het exporteren uitrekenen. ASCII-STL herhaalt elk hoekpunt als tekst en komt meestal vier tot zes keer boven binair uit. OBJ slaat elk gedeeld vertex één keer op en verwijst er via een index naar, dus voor een typische gesloten mesh is het kleiner dan ASCII-STL en ongeveer in de buurt van binaire STL, groter als er ook UV's en normalen in zitten. 3MF slaat geïndexeerde XML op en comprimeert die in de ZIP, waardoor het voor dezelfde geometrie meestal de kleinste van de drie is.

De cijfers hieronder gelden voor een typische gesloten mesh van ongeveer 500.000 driehoeken, zoals een gedetailleerd beeldje. Echte bestanden variëren met de precisie van coördinaten en de exporter, dus zie ze als ordes van grootte, handig als een printdienst uploads begrenst of een STL uit een 3MF meerdere keren groter uitvalt.

Binaire STL (500.000 driehoeken × 50 bytes)
≈ 25 MB
ASCII-STL, dezelfde mesh, typisch
≈ 100–150 MB
OBJ zonder UV's, typisch
≈ 15–30 MB
3MF na ZIP-compressie, typisch
≈ 5–12 MB

Wat converteren oplost en wat het nooit zal oplossen

Een conversie leest de driehoeken uit de ene container en schrijft ze in een andere. Alles wat het doelformaat kan uitdrukken gaat mee; wat niet kan, valt weg. Daarom is STL naar OBJ verliesvrij voor geometrie, verliest 3MF naar STL kleuren, eenheden en plaatindeling, en verliest OBJ naar STL texturen en onderdeelnamen. In de 3D-tools van UltKit zijn de extra keuzes expliciet: Eenheden van het model vertelt de converter welke schaal de bron gebruikt, Verticale as regelt het verschil tussen Y-omhoog en Z-omhoog tussen game-engines en slicers, en Samenvoegen tot één mesh bepaalt of losse onderdelen gescheiden blijven.

Wat geen enkele conversie doet, is een mesh repareren. Heeft een STL een gat, dan heeft de OBJ die je ervan maakt hetzelfde gat, en een 3MF-exporter weigert hem of schrijft hem toch weg. Reparatie is een aparte stap in een meshtool of de ingebouwde reparatiefunctie van de slicer, en doe je het best één keer, in je hoofdbestand, voordat je iets anders exporteert. Hetzelfde geldt voor schaal: converteren kan niet weten dat een onderdeel in inches bedoeld was, tenzij je het zegt. Detail werkt net zo: een STL met weinig polygonen wordt een OBJ of 3MF met weinig polygonen, dus exporteer opnieuw vanuit het bronmodel als kwaliteit telt.

Wat een formaatwijziging doet

  • Verplaatst dezelfde driehoeken naar een container die een ander programma accepteert
  • Past de eenheid toe die je kiest onder Eenheden van het model, en herstelt een schaalfout van 25,4× of 10×
  • Draait het model tussen Y-omhoog en Z-omhoog met Verticale as
  • Verkleint een ASCII-STL door in plaats daarvan binair te schrijven
  • Houdt losse onderdelen gescheiden of voegt ze samen, afhankelijk van Samenvoegen tot één mesh

Wat precies hetzelfde blijft

  • Gaten, open randen en non-manifold geometrie
  • Omgekeerde of inconsistente normalen
  • Zichzelf snijdende onderdelen en wanden zonder dikte
  • Detail dat verloren ging toen de mesh voor het eerst werd geëxporteerd
  • Kleuren en texturen als het doelformaat er geen plek voor heeft

Keuzetabel: STL, OBJ of 3MF

Twee andere formaten komen steeds ter sprake bij deze vraag. STEP (ISO 10303) slaat exacte lichamen en oppervlakken op in plaats van driehoeken, en is dus het formaat voor als een onderdeel terug moet naar Fusion 360, SolidWorks of FreeCAD om te bewerken. GLB, de binaire vorm van glTF 2.0 van de Khronos Group, verpakt een mesh met materialen en texturen in één bestand in meters en is het formaat om een model op het web of in Android-AR te tonen.

Voor de drie formaten die dit artikel behandelt, vat de tabel hieronder de keuze per bestemming samen. Passen twee rijen, kies dan het formaat met meer informatie en exporteer het eenvoudigere later; van 3MF naar STL gaan is makkelijk, verloren kleuren of eenheden herstellen is handwerk.

Kies op basis van waar het bestand heen gaat
SituatieBeste formaatWaarom
Eenkleurig onderdeel voor elke slicerSTL (binair)Universele ondersteuning; de slicer heeft niets anders nodig
Uploaden naar een modelbibliotheek of printdienstSTL, plus 3MF als dat wordt aangebodenSTL wordt altijd geaccepteerd; 3MF behoudt eenheden en kleuren
Meerkleurige of multimaterial-print3MFEnige formaat hier dat kleuren en materialen per onderdeel voor slicers opslaat
Plaat met meerdere onderdelen en printinstellingen3MFSlaat objectplaatsing en slicerinstellingen op in één bestand
Onderdeel ontworpen in inches3MFGeeft de eenheid aan, dus er wordt niets met 25,4 geschaald
Model met textuur voor Blender, Unity of UnrealOBJ (+ .mtl en afbeeldingen)Behoudt UV's, normalen en materiaaltoewijzingen
Snelle controle in een teksteditorOBJ of ASCII-STLPlatte tekst die je regel voor regel kunt lezen
Oude firmware of software die alleen STL toontSTLHaal de extra's weg en stuur de mesh

Belangrijkste punten

  • STL slaat alleen driehoeken op: geen eenheden, geen kleur, en 50 bytes per driehoek in binaire vorm.
  • OBJ voegt UV's, normalen en benoemde groepen toe, maar kleuren en texturen hangen af van een apart .mtl-bestand en afbeeldingsbestanden.
  • 3MF is een ZIP met XML die eenheden, kleuren, meerdere objecten en printinstellingen vastlegt en gesloten meshes eist.
  • Gebruik STL voor eenvoudige eenkleurige prints, OBJ voor modellen met textuur in kunst- en gamepipelines, en 3MF zodra je slicer het ondersteunt.
  • Converteren verandert de container, niet de mesh: repareer gaten en normalen in een meshtool en stel de eenheid zelf in.
DelenXFacebookWhatsAppTelegram

Veelgestelde vragen

Wordt STL vervangen door 3MF?

Langzaam, althans voor printworkflows. PrusaSlicer en Bambu Studio slaan projecten al op als 3MF, maar STL blijft het formaat dat elke tool en elke modelbibliotheek accepteert, dus de twee bestaan nog jaren naast elkaar.

Kan een binaire STL kleur opslaan?

Niet op een standaardmanier. Sommige programma's schrijven kleur in het attribuutveld van 2 bytes bij elke driehoek, maar de meeste slicers negeren dat. Gebruik dus 3MF of OBJ als kleur belangrijk is.

Waarom is mijn OBJ grijs nadat ik hem heb gedownload?

Het .mtl-bestand of de textuurafbeeldingen zijn niet meegekomen, of de paden in het .mtl-bestand verwijzen naar mappen die op uw computer niet bestaan. Zet het .obj-bestand, het .mtl-bestand en de afbeeldingen in één map en laad het model opnieuw.

Geeft een ASCII- of binaire STL een nauwkeurigere print?

In de praktijk print geen van beide nauwkeuriger. Beide beschrijven dezelfde driehoeken. Binair slaat coördinaten op als 32-bit floats en ASCII als tekst, en binaire bestanden zijn meestal enkele malen kleiner.

Kan ik een OBJ weer omzetten naar STL om te printen?

Ja. De driehoeken blijven ongewijzigd, terwijl UV's, materialen en texturen verdwijnen omdat STL daar geen plek voor heeft. Controleer daarna de schaal, want OBJ-bestanden uit modelleerprogramma's staan vaak in meters of centimeters.

Welk formaat gebruik ik om een model te delen zodat anderen het kunnen printen?

Bied een STL aan voor de breedste compatibiliteit. Heeft het model meerdere onderdelen of kleuren, of is het ontworpen in inches, voeg dan een 3MF toe, zodat mensen met een moderne slicer de volledige opzet krijgen.

Lees verder