STL

Che cos’è un file STL?

Lo standard della stampa 3D. Solo triangoli: né colore, né materiale, né texture.

Che cos’è STL

STL è un formato binario, che ha senso solo per un programma che lo conosce. Conserva forme e coordinate invece che pixel, quindi resta nitido a qualsiasi dimensione: un logo portato alla misura di un cartellone non perde nulla. Si usa per la stampa 3D.

L’estensione è .stl e il nome per esteso è Stereolithography. Contano entrambi meno di ciò che il file può contenere, ed è di questo che parla il resto della pagina.

Da dove viene STL

3D Systems lo ha pubblicato nel 1987.

A un formato rimasto leggibile così a lungo si può affidare qualcosa che vuoi ritrovare fra dieci anni.

La specifica è pubblica

È pubblicata per intero, quindi la si può implementare partendo dal documento invece che per osservazione: è per questo che il formato compare in così tanti programmi, ed è per questo che file scritti vent’anni fa si aprono ancora. Una specifica pubblicata però non è la stessa cosa di una esente da royalty: dove un formato incapsula un codec, le licenze sui brevetti restano una questione a parte che lo standard non risolve.

Non si butta via niente

STL conserva il suo contenuto esattamente. Risalvarlo non cambia nulla, quindi puoi aprirlo, modificarlo e risalvarlo quante volte vuoi senza accumulare danni: è questo che ne fa un formato di lavoro e non di consegna.

Che cosa apre STL

Blender, PrusaSlicer e Cura lo leggono, e così fanno quasi tutti i programmi dello stesso tipo.

Quando un file non si apre, il formato è raramente il problema: più spesso è il programma a essere più vecchio di lui. Convertire in qualcosa di più vecchio è la via d’uscita affidabile, ed è a questo che serve il resto di questo sito.

Aprirlo nel browser

Nessun browser lo legge.

È di gran lunga il motivo più comune per convertirlo: non che il formato sia scadente, ma che il posto in cui vuoi mostrare il file non sappia leggerlo.

È un formato di lavoro

STL è pensato per essere aperto e modificato. Tieni il file in questo formato per tutto il tempo in cui il lavoro va avanti, ed esporta da lì ogni volta che serve una copia finita.

Un elenco di triangoli e, di proposito, nient’altro

Un file STL è un elenco di triangoli. Ciascuno ha tre vertici e una direzione che indica quale lato è esterno. Non c’è colore, né materiale, né texture, né unità di misura, né struttura: il modello di un motore è un sacco di triangoli senza componenti, esattamente come il modello di un cubo.

Il formato è stato scritto nel 1987 per la stereolitografia, e tutto in esso riflette una macchina a cui bastava dire dove c’era del solido. Quasi quarant’anni dopo resta ciò che si aspetta qualsiasi stampante 3D da scrivania, perché quella resta l’unica domanda che pone uno slicer.

Le curve non esistono: la risoluzione si decide all’esportazione

Una sfera in un programma di modellazione è una sfera matematica. Uno STL di quella sfera sono migliaia di triangoli piatti che fingono di esserlo, e quanti sono lo decide chi ha esportato il file. Pochi e il pezzo esce sfaccettato; troppi e il file è enorme e lo slicer è lento.

È l’unica decisione che dopo non si può annullare. Uno STL grossolano non si può ammorbidire per recuperare la curva, perché la curva non c’è più: resta solo l’approssimazione. Esportate dal modello originale con la tolleranza richiesta dal pezzo e conservate quell’originale. Lo STL è un formato di consegna, non il file master.

A tenuta stagna, e perché lo slicer rifiuta un file

Un modello stampabile deve descrivere un solido senza ambiguità. Significa che ogni spigolo è condiviso da esattamente due triangoli, che non ci sono buchi e che tutte le normali puntano verso l’esterno. Una mesh così si chiama a tenuta stagna o a varietà, ed è la proprietà che permette allo slicer di decidere cosa resta dentro.

I modelli la violano costantemente, quasi sempre perché nati per il rendering. Una superficie senza spessore appare perfetta a schermo e non è stampabile. Due corpi che si sovrappongono e non sono mai stati fusi lasciano facce interne. Un buco nella mesh costringe lo slicer a indovinare, e o rifiuta il file o riempie qualcosa che non volevate. Gli strumenti di riparazione sistemano quasi tutti i casi da soli, e conviene usarne uno prima della stampa e non dopo.

Il problema delle unità, proprio dove fa più male

I numeri di uno STL non hanno dimensione. Il file dice 25,4 e non dice se sono millimetri o pollici, quindi un modello progettato in pollici aperto in uno slicer che lavora in millimetri stampa a un venticinquesimo della sua dimensione, o venticinque volte più grande nel senso contrario.

Quasi tutto il mondo della stampa 3D presume millimetri e quasi tutti gli slicer sono impostati così. Controllate le dimensioni del riquadro di ingombro mostrato dallo slicer contro quanto il pezzo dovrebbe davvero misurare prima di iniziare. Sono cinque secondi ed è la differenza fra un pezzo che si adatta e una lezione lenta e costosa.

ASCII e binario sono lo stesso formato

La specifica ammette due codifiche. Quella ASCII scrive ogni coordinata come testo leggibile, moltiplicando la dimensione per cinque o sei e permettendo di aprire il file in un editor. Quella binaria scrive cinquanta byte per triangolo ed è ciò che produce e si aspetta praticamente tutto.

Usate il binario salvo che qualcosa richieda espressamente il contrario. L’unico vantaggio reale dell’ASCII è che una persona può ispezionarlo, cosa utile ogni tanto per diagnosticare un’esportazione rotta e mai utile per stampare. Passare da una codifica all’altra non cambia nulla della geometria.

Il colore vive in altri formati

Lo STL non ne ha nessuno. Esistono estensioni non ufficiali che infilano il colore in byte inutilizzati, e il supporto è abbastanza disomogeneo da non convenire farci affidamento.

Questo pesa sempre di più, man mano che la stampa multimateriale e a colori diventa comune. Se un pezzo richiede più di un colore, il file deve essere 3MF o OBJ, che portano davvero assegnazioni di materiale. Il 3MF è oggi la risposta moderna in generale — è una specifica vera, con unità, materiali e parametri di stampa — e se non ha sostituito lo STL è per inerzia, non per merito.

Dallo STL all’oggetto: comanda lo slicer

Lo STL non va direttamente alla stampante. Entra in uno slicer, che lo orienta, aggiunge supporti dove uno sbalzo stamperebbe nel vuoto e lo taglia in strati per produrre il G-code, le istruzioni reali della macchina. Tutte le decisioni che determinano se il pezzo riesce bene si prendono nello slicer, non nel file.

Ecco perché ciò che deve essere corretto nello STL è poco e preciso: la scala giusta, la mesh a tenuta stagna e triangoli sufficienti a descrivere le curve alla dimensione di stampa prevista. Riempimento, perimetri, temperatura e supporti vengono dopo, e nessuno di loro salva una mesh con buchi.

Che cosa conserva questa conversione e che cosa resta indietro

Ciò che viene convertito qui è geometria: dove stanno i triangoli. Non c’è posto nel modello intermedio per materiali, texture, coordinate UV, normali, colori per vertice, telecamere, luci, animazioni né per il grafo di scena stesso, quindi nulla di tutto ciò arriva. Le trasformazioni dei nodi sì, perché vengono applicate direttamente ai vertici, e le unità di un 3MF vengono portate a millimetri in entrata.

Verso lo STL ci sono due conseguenze da aspettarsi. Viene scritto sempre in binario, mai in ASCII. E tutte le mesh dell’origine vengono fuse in una sola, con perdita dei nomi dei pezzi: un assemblaggio con venti componenti esce come un unico corpo. I poligoni con più di tre lati vengono triangolati a ventaglio, corretto sulle facce convesse e non su quelle concave.

I file che il convertitore rifiuta invece di rovinare

Un glTF che punta a un .bin esterno viene rifiutato con una frase che suggerisce di convertire il GLB al suo posto, perché il file di geometria è esterno e qui arriva solo ciò che trascinate. Anche la compressione Draco viene rifiutata, e da un glTF si leggono solo le primitive di triangoli: strisce, ventagli, linee e punti vengono saltati.

Anche una nuvola di punti in PLY viene rifiutata, per un motivo di fondo: convertire punti in superficie è ricostruire, non convertire, e il risultato sarebbe un’invenzione con l’aspetto di una conversione. Nell’altra direzione, se uno STL binario porta la parola solid nella sua intestazione a 80 byte — cosa che la specifica permette e che diversi programmi fanno — qui viene rilevato aritmeticamente dalla dimensione del file e non da quella parola, motivo per cui uno STL binario mal etichettato non viene letto come se fosse testo. Tutto questo avviene nel browser, con un limite di 100 MB per file.

I dati, in un posto solo

Identificativi e provenienza del formato STL.
Estensione.stl
Tipo di mediamodel/stl
Pubblicato da3D Systems
Prima pubblicazione1987