Krótka historia
STL oznacza stereolithography. Format został stworzony dla 3D Systems w 1987 roku, we wczesnym okresie komercyjnego druku SLA, jako prosty sposób przenoszenia geometrii z programów CAD do workflow druku 3D.
Ta prostota jest tu kluczowa: plik STL przechowuje wyłącznie zewnętrzną powierzchnię obiektu jako listę trójkątów. Nie ma tu krzywych, historii modelowania, materiałów, złożeń ani gwarantowanych jednostek. Właśnie dlatego STL stał się uniwersalnym formatem awaryjnym dla druku 3D, ale też dlatego dziś wypada skromnie na tle nowszych formatów, takich jak 3MF.
ASCII vs. binary
STL występuje w dwóch odmianach kodowania.
ASCII STL to zwykły tekst. Każdy trójkąt zapisuje się przy użyciu słów kluczowych takich jak facet normal, outer loop i vertex. Taki plik łatwo podejrzeć, debugować albo wygenerować prostym skryptem, ale przy bardziej szczegółowych siatkach szybko robi się bardzo duży.
Binary STL to wariant, który większość narzędzi zapisuje domyślnie. Zaczyna się od:
- 80-bajtowego nagłówka
- 32-bitowej liczby trójkątów
- jednego 50-bajtowego rekordu dla każdego trójkąta
Każdy rekord trójkąta w wersji binary zawiera:
- 12 bajtów na wektor normalny
- 36 bajtów na trzy wierzchołki
- 2 bajty na liczbę bajtów atrybutów
Te ostatnie dwa bajty nigdy nie doczekały się sensownej standaryzacji. Część programów używa ich albo nagłówka do własnych danych o kolorze, ale obsługa jest niespójna. W praktyce STL nadal najlepiej traktować jako format przechowujący wyłącznie geometrię.
Jest też jeden drobny haczyk: pliki binary STL bywają mylone z ASCII, jeśli nagłówek zaczyna się od słowa solid. Dlatego solidne parsery analizują całą strukturę pliku, a nie tylko jego pierwsze bajty.
Jak przechowywana jest geometria
Model STL składa się z faset. Każda faseta to jeden trójkąt opisany przez:
- jeden wektor normalny
- trzy pozycje wierzchołków 3D
Normalna powinna być skierowana na zewnątrz. Od wierzchołków oczekuje się też zgodności z regułą prawej dłoni: patrząc z zewnątrz obiektu, powinny być zapisane przeciwnie do ruchu wskazówek zegara. Wiele przeglądarek i tak przelicza normalne z pozycji wierzchołków, ale rozbieżność między normalną zapisaną w pliku a kolejnością wierzchołków nadal bywa dobrym sygnałem, że siatka jest uszkodzona.
W przeciwieństwie do formatów z indeksowaną siatką, STL nie współdzieli wierzchołków między trójkątami. Każdy trójkąt przechowuje własne trzy współrzędne nawet wtedy, gdy sąsiednie trójkąty stykają się w tym samym narożniku. To zwiększa rozmiar pliku i usuwa z niego jawną topologię. Oprogramowanie musi później odtwarzać sąsiedztwo przez porównywanie współrzędnych zmiennoprzecinkowych.
STL nie zapisuje też jednostek. Wartość 10 może oznaczać 10 mm, 10 cali albo 10 cm, zależnie od eksportera i programu, który plik otwiera. Historycznie wczesna dokumentacja STL zakładała również dodatnie współrzędne, ale współczesne narzędzia zwykle bez problemu obsługują także wartości ujemne.
Co sprawia, że siatka STL jest poprawna
Dla druku 3D sama „zupa trójkątów” musi jeszcze tworzyć jedną spójną granicę obiektu. W praktyce oznacza to, że:
- sąsiednie trójkąty powinny stykać się krawędź do krawędzi
- powierzchnia powinna być szczelna
- normalne i kierunek nawijania powinny być spójnie skierowane na zewnątrz
- trójkąty nie powinny przecinać się same ze sobą
Starsza dokumentacja STL opisywała to jako regułę vertex-to-vertex: krawędź jednego trójkąta powinna łączyć się czysto z krawędzią sąsiada, a nie kończyć się w połowie innego trójkąta.
Gdy te warunki nie są spełnione, slicer nie potrafi już niezawodnie ustalić, co jest wnętrzem modelu, a co jego zewnętrzem. To prowadzi do klasycznych problemów naprawy STL: dziur, odwróconych normalnych, krawędzi non-manifold, zduplikowanych faset i innych błędów geometrii.
Kiedy używać STL
STL nadal jest najbezpieczniejszym wyborem, gdy najważniejsza jest kompatybilność. Jeśli chcesz mieć siatkę, którą otworzy prawie każdy slicer, program CAD i serwis druku 3D, STL pozostaje najniższym wspólnym mianownikiem.
To słabszy wybór, gdy potrzebujesz:
- jawnych jednostek
- wielu obiektów w jednym uporządkowanym pakiecie
- kolorów, tekstur lub materiałów
- metadanych albo ustawień druku
- oszczędniejszego zapisu złożonych siatek
W takich przypadkach 3MF jest zwykle lepszym współczesnym domyślnym wyborem. Jawnie przechowuje jednostki, wspiera bogatsze metadane, unika modelu „każdy trójkąt jest osobny” charakterystycznego dla STL i lepiej nadaje się do workflow typu ready-to-print.
Wyświetlanie STL w przeglądarce
STLViewer parsuje zarówno ASCII STL, jak i binary STL bezpośrednio w przeglądarce przy użyciu Three.js. Do szybkiego podglądu nie trzeba nic wysyłać, więc plik pozostaje na Twoim urządzeniu, dopóki sam nie zdecydujesz się go udostępnić.
Do udostępniania przesyłamy plik do Cloudflare R2 za pomocą krótkotrwałego presigned URL i zwracamy unikalny link. Linki udostępniania są prywatne: nie są indeksowane przez wyszukiwarki i nie są publicznie nigdzie listowane na stronie.
