UltKit

STL vs OBJ vs 3MF: quale formato di file 3D usare?

Conviene usare STL per una stampa a un solo colore da passare allo slicer, OBJ quando il modello ha texture per il rendering o un motore di gioco, e 3MF quando lo slicer lo supporta e si vuole che unità, colori e più parti arrivino intatti a destinazione. Il formato stabilisce quali metadati accompagnano la mesh, ma non stabilisce mai se la mesh in sé è corretta.

Jonas WeberJonas WeberEditor di prestazioni web
Aggiornato 12 min di lettura
Una stampante 3D desktop in un box trasparente su una scrivania bianca, con un portatile che mostra un modello 3D e pezzi stampati colorati, tra cui una mappa del terreno e un ingranaggio rosso

STL: un elenco di triangoli e nient'altro

L'STL nasce nel 1987 per le prime macchine a stereolitografia di 3D Systems, e il suo design lo mostra. Un file è un semplice elenco di triangoli, ciascuno descritto da una normale della faccia e da tre vertici. Non esiste una tabella di vertici condivisa, quindi un vertice che tocca sei triangoli viene scritto sei volte. Non c'è nemmeno un campo per l'unità: una coordinata di 25 può significare millimetri, pollici o metri, e quasi tutti gli slicer assumono i millimetri. Colore, texture e nomi delle parti non trovano posto nel formato di base, ed è proprio per questo che ogni slicer, programma CAD e servizio di stampa lo legge ancora.

L'STL esiste in due codifiche. L'STL ASCII scrive tutto in testo, con righe come facet normal, outer loop e vertex 12.5 0 3.2, quindi si può aprire in un editor di testo e leggere i numeri. L'STL binario inizia con un'intestazione di 80 byte e un conteggio dei triangoli di 4 byte, poi memorizza ogni triangolo come dodici float da 4 byte più un campo attributi da 2 byte: esattamente 50 byte per triangolo. Questa regola rende facile prevedere le dimensioni. Un modello da un milione di triangoli pesa circa 50 MB in binario, mentre la versione ASCII della stessa mesh è in genere da quattro a sei volte più grande, perché ogni cifra diventa un carattere.

La semplicità è insieme punto di forza e trappola. Un STL non dice se doveva essere una parte o tre, se è stato esportato in pollici o se i suoi triangoli racchiudono davvero un solido. Lo slicer lo deduce dalle coordinate grezze e, quando sbaglia, si ottiene un pezzo 25,4 volte più piccolo o una parete mancante. Per un pezzo monocolore progettato da voi ed esportato in millimetri nulla di tutto ciò conta, e l'STL resta il formato meno soggetto a rifiuti.

OBJ: poligoni, UV e un file separato per i materiali

L'OBJ viene da Wavefront Technologies, il cui software Advanced Visualizer lo usava alla fine degli anni Ottanta, e si è diffuso negli anni Novanta come formato di testo che quasi ogni programma 3D sapeva scambiare. A differenza dell'STL, mantiene un elenco di vertici e costruisce le facce con gli indici, quindi un vertice condiviso è memorizzato una sola volta, e le facce possono essere triangoli, quadrilateri o poligoni più grandi. Le righe che iniziano con v contengono le posizioni, vt le coordinate di texture (UV), vn le normali e f le facce. Gruppi (g) e oggetti (o) danno un nome alle parti, perciò l'OBJ sopravvive a un passaggio da Blender, Maya o ZBrush con la struttura intatta.

L'aspetto sta fuori dal file .obj. Una riga mtllib indica un file .mtl associato, e le righe usemtl assegnano i materiali alle facce. Il file .mtl memorizza colori come Kd (diffuso) e rimanda alle immagini di texture con voci come map_Kd wood.png. Un OBJ con texture è quindi composto da almeno tre file: la geometria, la libreria dei materiali e una o più immagini, tutti richiamati con percorso relativo. Se si invia solo l'.obj, chi lo riceve vede un modello grigio. Questa separazione è utile nelle pipeline di giochi e VFX, dove gli artisti sostituiscono le texture senza toccare la geometria, ed è anche il motivo più frequente per cui un modello scaricato appare sbagliato.

L'OBJ condivide con l'STL il punto cieco della scala: memorizza numeri nudi senza unità. La maggior parte degli strumenti di modellazione scrive in metri o centimetri, mentre gli slicer leggono i millimetri, quindi un OBJ preso da uno store di asset per giochi può arrivare con un errore di 10 o 1.000 volte. Per la stampa l'OBJ non aggiunge nulla che lo slicer usi, tranne il colore per vertice in pochi strumenti: se dovete stampare un asset artistico, di solito è più semplice tenere le texture per il rendering e dare allo slicer una mesh pulita. Nel senso opposto, convertire un STL in OBJ è la via più breve da un modello di stampa a un flusso di rendering o gaming.

3MF: un pacchetto ZIP pensato per la stampa

Il 3MF è stato pubblicato nel 2015 dal 3MF Consortium, un gruppo avviato da Microsoft con aziende del settore stampa e CAD. Un file .3mf è un archivio ZIP, lo stesso contenitore trattato in ZIP vs RAR vs 7z. Rinominandolo in .zip si trova un file XML 3D/3dmodel.model con la mesh, un file dei tipi di contenuto, file di relazioni e spesso miniature e configurazione dello slicer. Ogni modello dichiara la propria unità (micron, millimetro, centimetro, pollice, piede o metro), quindi il problema di scala che affligge STL e OBJ semplicemente non si presenta. Colori, materiali di base, più oggetti e la loro posizione sul piano di stampa fanno parte della specifica.

La specifica richiede inoltre che le mesh siano manifold e con orientamento coerente: ogni spigolo condiviso da esattamente due triangoli, tutti rivolti verso l'esterno. Gli esportatori che rispettano le regole non possono scrivere la geometria aperta e con autointersezioni che un STL accetta senza problemi. Il supporto è ampio tra gli strumenti attuali. PrusaSlicer, Bambu Studio, OrcaSlicer e UltiMaker Cura leggono il 3MF, PrusaSlicer e Bambu Studio salvano l'intero progetto come .3mf con impostazioni di stampa e colori dipinti, e l'app 3D Builder di Microsoft su Windows lo apre direttamente. Il punto debole sono firmware più vecchi, portali di print farm e importatori CAD che si aspettano ancora l'STL; per questi, convertire il 3MF in STL e accettare che gli extra restino indietro.

from ↓ · to →UnitsColorTexturesPiù partiImpostazioni di stampaRegola manifold
STL– STL to Units: no– STL to Color: no– STL to Textures: no– STL to Più parti: no– STL to Impostazioni di stampa: no– STL to Regola manifold: no
OBJ– OBJ to Units: noOBJ to Color: yesOBJ to Textures: yesOBJ to Più parti: yes– OBJ to Impostazioni di stampa: no– OBJ to Regola manifold: no
3MF3MF to Units: yes3MF to Color: yes3MF to Textures: yes3MF to Più parti: yes3MF to Impostazioni di stampa: yes3MF to Regola manifold: yes
supported not offeredLe righe sono i formati, le colonne ciò che il file può contenere da solo. Colore e texture dell'OBJ richiedono il file .mtl separato e le immagini; le texture del 3MF provengono dalla sua estensione dei materiali. Alcuni strumenti scrivono il colore nei byte inutilizzati dell'STL binario, ma nessuno standard lo prevede.
Una fila di stampanti 3D a telaio aperto su banchi di legno, la più vicina con diversi pezzi cilindrici blu sul piano di stampa
Foto: Unsplash

Scegliere il formato in base al lavoro

Il formato giusto dipende da dove andrà il file, non da quale sia il più recente. Se la prossima tappa è uno slicer e il pezzo è monocolore, l'STL va bene, ed è ancora il formato che ogni forum, libreria di modelli e servizio di stampa comprende. Se la tappa successiva è un renderer, un motore di gioco o lo strumento di modellazione di un altro artista, l'OBJ conserva UV, normali e gruppi con nome che l'STL scarta, e la sua forma testuale rende facile ispezionare i problemi.

Il 3MF si giustifica quando il file contiene più della sola geometria. Una stampa multicolore dipinta in Bambu Studio, un piano con dodici pezzi disposti per un unico lavoro, un pezzo progettato in pollici o un progetto da riaprire con la stessa altezza layer e lo stesso riempimento richiedono il 3MF, perché nessun altro formato qui può contenere queste informazioni. Con più destinazioni, conservate la versione più ricca come copia master ed esportate da questa quelle più semplici con un convertitore di modelli 3D invece di concatenare le conversioni.

STL per stampe semplici

Un pezzo, un colore, esportato in millimetri. Si apre in ogni slicer, finestra di importazione CAD e modulo di caricamento dei servizi di stampa.

OBJ per modelli con texture

UV, normali e gruppi con nome per Blender, Maya, Unity o Unreal. Inviate insieme il file .mtl e le immagini delle texture.

3MF per gli slicer moderni

Unità reali, colori, più oggetti e impostazioni di stampa in un unico ZIP. Formato di progetto nativo di PrusaSlicer e Bambu Studio.

Cinque modi in cui un file 3D si rovina

La maggior parte delle stampe fallite e delle importazioni difettose attribuite al formato dipende in realtà dalla mesh, o da ciò che il programma ricevente ha ipotizzato su di essa. L'STL è il più esposto perché non porta metadati che intercettino gli errori; l'OBJ condivide i problemi di scala e di file mancanti; il 3MF ne evita la maggior parte per progettazione, anche se un esportatore poco accurato può comunque scrivere una mesh difettosa. Aprite le voci qui sotto per vedere come si presenta ogni problema e da dove di solito nasce.

Mesh non manifold

Spigoli condivisi da un solo triangolo o da tre o più, vuoti tra le superfici o pareti di spessore zero. Lo slicer mostra layer mancanti, buchi casuali o un avviso su spigoli aperti. La causa sta nella modellazione o nell'esportazione, spesso dall'unione di parti che si limitano a toccarsi.

Normali invertite

Alcuni triangoli sono rivolti verso l'interno. I renderer mostrano zone nere o trasparenti, e gli slicer possono trattare la regione come spazio vuoto. Si risolve con un comando di ricalcolo delle normali in Blender, Meshmixer o nello strumento di riparazione dello slicer.

Confusione tra millimetri e pollici

Un pezzo disegnato in pollici arriva 25,4 volte più piccolo in uno slicer che assume i millimetri; i centimetri letti come millimetri danno un errore di 10 volte. STL e OBJ non possono registrare l'unità, quindi la si imposta durante l'esportazione o la conversione.

File .mtl o texture mancanti

Un OBJ che si carica grigio o magenta ha perso la libreria dei materiali o le immagini, oppure i percorsi nel .mtl puntano a una cartella sul computer dell'artista originale. Tenete tutti i file in un'unica cartella e comprimeteli insieme in uno ZIP.

File STL ASCII enormi

Una scansione dettagliata salvata come STL ASCII può superare diverse centinaia di megabyte, rallentando gli slicer e superando i limiti di caricamento. Riesportando la stessa mesh come STL binario si riduce a circa un quinto, senza cambiare un solo triangolo.

Quanto pesa di solito ciascun formato

Le dimensioni derivano dalla struttura. L'STL binario è fissato a 50 byte per triangolo, quindi si può calcolare prima dell'esportazione. L'STL ASCII ripete ogni vertice come testo e di solito arriva da quattro a sei volte sopra il binario. L'OBJ memorizza ogni vertice condiviso una volta e vi fa riferimento con un indice, quindi per una tipica mesh chiusa risulta più piccolo dell'STL ASCII e all'incirca in linea con l'STL binario, più grande se contiene anche UV e normali. Il 3MF memorizza XML indicizzato e poi lo comprime nello ZIP, il che di solito lo rende il più piccolo dei tre a parità di geometria.

Le cifre qui sotto sono tipiche per una mesh chiusa di circa 500.000 triangoli, come una statuetta dettagliata. I file reali variano con la precisione delle coordinate e l'esportatore, quindi vanno intese come ordini di grandezza, utili quando un servizio di stampa limita i caricamenti o un STL esportato da un 3MF risulta parecchie volte più grande.

STL binario (500.000 triangoli × 50 byte)
≈ 25 MB
STL ASCII, stessa mesh, valore tipico
≈ 100–150 MB
OBJ senza UV, valore tipico
≈ 15–30 MB
3MF dopo la compressione ZIP, valore tipico
≈ 5–12 MB

Cosa risolve la conversione e cosa non risolverà mai

Una conversione legge i triangoli da un contenitore e li scrive in un altro. Tutto ciò che il formato di destinazione può esprimere viene trasferito; il resto va perso. Per questo da STL a OBJ non c'è perdita per la geometria, da 3MF a STL si perdono colori, unità e disposizione del piano, e da OBJ a STL si perdono texture e nomi delle parti. Negli strumenti 3D di UltKit le decisioni aggiuntive sono esplicite: Unità del modello indica al convertitore la scala della sorgente, Asse verticale gestisce la differenza tra Y verso l'alto e Z verso l'alto fra motori di gioco e slicer, e Unisci in un'unica mesh decide se le parti separate restano separate.

Ciò che nessuna conversione fa è riparare una mesh. Se un STL ha un buco, l'OBJ ottenuto ha lo stesso buco, e un esportatore 3MF lo rifiuterà oppure lo scriverà comunque. La riparazione è un passaggio separato in uno strumento per mesh o nel riparatore integrato dello slicer, e conviene farla una volta sola, nel file master, prima di esportare qualsiasi altra versione. Lo stesso vale per la scala: la conversione non può sapere che un pezzo era in pollici se non glielo si dice. Anche il dettaglio funziona così: un STL a basso numero di poligoni diventa un OBJ o 3MF a basso numero di poligoni, quindi se la qualità conta esportate di nuovo dal modello sorgente.

Cosa fa un cambio di formato

  • Sposta gli stessi triangoli in un contenitore accettato da un altro programma
  • Applica l'unità scelta in Unità del modello, correggendo un errore di scala di 25,4× o 10×
  • Ruota il modello tra Y verso l'alto e Z verso l'alto con Asse verticale
  • Riduce un STL ASCII scrivendolo in binario
  • Mantiene o unisce le parti separate, a seconda di Unisci in un'unica mesh

Cosa lascia esattamente com'era

  • Buchi, spigoli aperti e geometria non manifold
  • Normali invertite o incoerenti
  • Parti con autointersezioni e pareti di spessore zero
  • Il dettaglio perso alla prima esportazione della mesh
  • Colori e texture quando il formato di destinazione non ha un posto per essi

Tabella di scelta: STL, OBJ o 3MF

Altri due formati saltano fuori ogni volta che si pone questa domanda. STEP (ISO 10303) memorizza solidi e superfici esatti invece di triangoli, quindi è il formato da usare quando un pezzo deve tornare in Fusion 360, SolidWorks o FreeCAD per essere modificato. GLB, la forma binaria del glTF 2.0 del Khronos Group, riunisce in un unico file una mesh con materiali e texture, in metri, ed è il formato per mostrare un modello sul web o nella AR di Android.

Per i tre formati trattati in questo articolo, la tabella qui sotto riassume la scelta in base alla destinazione. Se due righe vanno bene, scegliete il formato che contiene più informazioni ed esportate dopo quello più semplice; passare da 3MF a STL è facile, mentre ricostruire colori o unità perduti è un lavoro manuale.

Scegliere in base alla destinazione del file
SituazioneFormato migliorePerché
Pezzo monocolore destinato a qualsiasi slicerSTL (binario)Supporto universale; lo slicer non ha bisogno di altro
Caricamento su una libreria di modelli o un servizio di stampaSTL, più 3MF se disponibileL'STL è sempre accettato; il 3MF conserva unità e colori
Stampa multicolore o multimateriale3MFL'unico formato qui che memorizza colori e materiali per parte per gli slicer
Piano con più parti e impostazioni di stampa3MFMemorizza posizione degli oggetti e impostazioni dello slicer in un unico file
Pezzo progettato in pollici3MFDichiara l'unità, quindi nulla viene scalato di 25,4
Modello con texture per Blender, Unity o UnrealOBJ (+ .mtl e immagini)Conserva UV, normali e assegnazioni dei materiali
Controllo rapido in un editor di testoOBJ o STL ASCIITesto semplice leggibile riga per riga
Vecchio firmware o software che elenca solo STLSTLEliminare gli extra e inviare la mesh

Punti chiave

  • L'STL memorizza solo triangoli: niente unità, niente colore, e 50 byte per triangolo nella forma binaria.
  • L'OBJ aggiunge UV, normali e gruppi con nome, ma colori e texture dipendono da un file .mtl separato e dai file immagine.
  • Il 3MF è uno ZIP di XML che registra unità, colori, più oggetti e impostazioni di stampa, e richiede mesh chiuse.
  • Usate STL per stampe semplici monocolore, OBJ per modelli con texture nelle pipeline artistiche e di gioco, e 3MF ogni volta che il vostro slicer lo supporta.
  • Convertire cambia il contenitore, non la mesh: riparate buchi e normali in uno strumento per mesh e impostate voi l'unità.
CondividiXFacebookWhatsAppTelegram

Domande frequenti

Il 3MF sta sostituendo l'STL?

Lentamente, almeno per i flussi di stampa. PrusaSlicer e Bambu Studio salvano già i progetti in 3MF, ma l'STL resta il formato accettato da tutti gli strumenti e le librerie di modelli, quindi i due formati conviveranno ancora per anni.

Un STL binario può memorizzare il colore?

Non in modo standard. Alcuni programmi scrivono il colore nel campo attributi di 2 byte di ogni triangolo, ma la maggior parte degli slicer lo ignora: quando il colore conta, meglio usare 3MF o OBJ.

Perché il mio OBJ appare grigio dopo averlo scaricato?

Il file .mtl o le immagini delle texture non sono stati copiati, oppure i percorsi indicati nel .mtl puntano a cartelle che non esistono sul computer. Basta mettere .obj, .mtl e immagini nella stessa cartella e caricare di nuovo il modello.

Per una stampa più precisa è meglio l'STL ASCII o binario?

In pratica nessuno dei due stampa con maggiore precisione. Entrambi descrivono gli stessi triangoli: il binario memorizza le coordinate come float a 32 bit, l'ASCII come testo, e i file binari sono in genere diverse volte più piccoli.

Si può riconvertire un OBJ in STL per stamparlo?

Sì. I triangoli vengono mantenuti invariati, mentre UV, materiali e texture vengono scartati perché l'STL non prevede dove salvarli. Dopo la conversione conviene controllare la scala, perché gli OBJ dei programmi di modellazione sono spesso in metri o centimetri.

Quale formato usare per condividere un modello da far stampare ad altri?

Conviene offrire un STL per la massima compatibilità e, se il modello ha più parti, colori o è stato progettato in pollici, affiancare un 3MF, così chi usa uno slicer moderno ottiene la configurazione completa.

Continua a leggere