
STL dosya boyutunu küçültme: hangi yöntem ne kadar kazandırır
STL dosyası neden büyür, üçgen sayısı boyuttan nasıl hesaplanır ve binary, yeniden dışa aktarma, seyreltme ile 3MF arasında hangisi ne kadar kazandırır.

STL yüzeyden başka bir şey saklamaz, OBJ bir dosya kümesidir, 3MF ise zip içinde birimi de taşır. Seçim kalite değil, dosyayı kime verdiğiniz meselesi.
STL, OBJ ve 3MF aynı işin üç versiyonu değil. Her biri farklı bir on yılda, farklı bir soruyu cevaplamak için tasarlandı. STL 1980'lerde stereolitografi makinesine "şu yüzeyi katmanlara böl" demek için çıktı; içinde yüzeyden başka hiçbir şey yok. OBJ, Wavefront'un render yazılımından geldi: köşe, doku koordinatı, normal ve malzeme. 3MF ise 2015'te, üretim zincirinin STL'nin eksiklerinden bıkmasıyla doğdu: birim, renk, malzeme, çoklu parça ve yerleşim bilgisi tek dosyada.
Pratikte seçim "hangisi daha iyi" değil, "bu dosyayı kime veriyorum" sorusudur. Aşağıda her birinin içinde gerçekten ne olduğunu, aynı meshin üçünde kaç bayt tuttuğunu ve hangi durumda beklenmedik şekilde bozulduğunu anlatıyorum.
Binary STL'nin tamamı şudur: 80 baytlık serbest başlık, 4 baytlık üçgen sayısı, sonra her üçgen için sabit 50 bayt. O 50 baytın 48'i on iki adet 32 bit float (bir normal artı üç köşe), kalan 2 bayt ise "attribute byte count" adlı, spesifikasyonda sıfır olması beklenen bir alan. Dosya boyutu tam olarak 84 + 50 × üçgen sayısı bayttır.
Formatın içinde olmayan şeyler daha önemli: köşe paylaşımı yok (aynı nokta ona değen her üçgende yeniden yazılır), birim yok, renk yok, hiyerarşi yok, tutarlılık garantisi yok. Bazı yazılımlar o 2 baytlık alanı renk saklamak için kullanır ama bunun iki farklı ve birbiriyle uyumsuz geleneği vardır; okuyucuların çoğu alanı yok sayar. Normal alanı da güvenilir değildir: birçok yazıcı oraya sıfır yazar, okuyucular da normali köşelerin sarım yönünden yeniden hesaplar.
OBJ düz metindir. v satırları köşeleri, vt doku koordinatlarını, vn normalleri, f ise yüzleri tanımlar. Yüzler köşelere indeksle atıfta bulunur ve indeksler 1'den başlar; negatif indeks de geçerlidir ve o satıra kadar okunmuş son köşeye göre geriye sayar. Bu yüzden iki OBJ dosyasını birleştirmek göründüğü kadar basit değildir.
OBJ üçgenle sınırlı değildir: dörtgen ve n-gen yazabilirsiniz. Malzemeler ayrı bir .mtl dosyasındadır, mtllib satırıyla çağrılır ve doku görselleri de ayrı dosyalardır. Yani bir OBJ genelde tek dosya değil, bir dosya kümesidir. Birim tanımı yoktur, eksen geleneği de yoktur.
3MF, OPC (Open Packaging Conventions) yani bir zip kabıdır. İçinde [Content_Types].xml, ilişkiler klasörü ve asıl model olan 3D/3dmodel.model bulunur. Model XML'inde köşeler bir kez indekslenir, yüzler yalnızca üçgendir ve kök eleman birimi açıkça taşır: micron, millimeter, centimeter, inch, foot ya da meter. Ayrı bir build bölümü, hangi nesnenin tablaya hangi dönüşümle konacağını söyler.
Çekirdek spesifikasyonun üzerine uzantılar gelir: malzeme ve özellikler, üretim (production), kafes kiriş (beam lattice), dilim (slice) ve güvenli içerik. Bu yüzden "3MF okuyabiliyorum" cümlesi tek başına bir şey söylemez; hangi uzantıları okuduğu ayrı bir sorudur.
300.000 üçgenlik kapalı bir yüzey alalım. Kapalı bir üçgen meshte yüz sayısı köşe sayısının yaklaşık iki katıdır, yani burada 150.000 civarı köşe var. Şimdi üç formatı da elle hesaplayalım.
Buradaki asıl ders şu: 3MF'in kazancı sihirli bir geometri sıkıştırmasından değil, iki sıradan şeyden gelir. Köşeleri bir kez yazar ve sonucu deflate'ten geçirir. Bir OBJ dosyasını zip'lerseniz boyut olarak 3MF'e yaklaşırsınız; kazanamayacağınız şey birim, yerleşim ve malzeme bilgisidir. Dosyanızın gerçekte kaç üçgen taşıdığını görmek için 3D görüntüleyiciyi kullanın, sayı genelde tahminden büyük çıkar.
Boyut tek başına karar verdirmemeli. 14 MB'lık bir STL ile 2 MB'lık bir 3MF, dilimlendikten sonra aynı G-code'u üretir. Fark diskte, e-postada ve dilimleme süresindedir. Üçgen sayısını gerçekten düşürmek isterseniz konuyu ayrıca ele aldık: STL dosya boyutunu küçültme.
STL ve OBJ içinde birim bilgisi yoktur. Dosyada yalnızca sayılar vardır; 25 değerinin milimetre mi inç mi olduğunu format söylemez, okuyan program varsayar. Bu yüzden aynı dosya bir dilimleyicide doğru boyutta, başkasında 25,4 kat büyük ya da küçük açılır. Hata sessizdir: model ekranda normal görünür, tabla ölçeğiyle karşılaştırana kadar fark edilmez.
3MF bu belirsizliği ortadan kaldırır, çünkü birim modelin kök elemanında yazılıdır. Elinizde STL ya da OBJ varsa tek güvenli yöntem sınırlayıcı kutuyu ölçmektir: parçanın en uzun kenarını bildiğiniz bir ölçüyle karşılaştırın. Bu kontrolü 3D görüntüleyicide baskıdan önce yapmak, tabla üzerinde otuz dakika kaybetmekten ucuzdur.
En sık rastlanan karışıklık bu. Dilimleyicilerin kaydettiği 3MF genelde bir proje dosyasıdır: zip'in içine geometrinin yanında kendi ayar dosyalarını, plaka düzenini, destek boyalarını ve malzeme profillerini de koyar. Başka bir dilimleyici o dosyayı açtığında geometriyi alır, ayarları görmezden gelir. Kimse hata vermez, ama parça sizin ayarlarınızla basılmaz. Paylaşırken "model olarak dışa aktar" ile "projeyi kaydet" arasındaki farkı bilerek seçin.
OBJ'yi tek başına gönderirseniz karşı taraf gri bir model görür, çünkü malzemeler .mtl dosyasındadır ve dokular ayrı görsellerdir. Bazı dışa aktarıcılar map_Kd satırına kendi diskindeki mutlak yolu yazar; o yol başka bilgisayarda çözülmez. İkinci tuzak üçgenlemedir: düzlemsel olmayan bir dörtgen, hangi köşegenden bölündüğüne göre iki farklı yüzey üretir ve iki program aynı dörtgeni farklı bölebilir. Üçüncüsü eksen geleneğidir; CAD dünyası genelde Z yukarı, DCC dünyası Y yukarı çalışır, bu yüzden model yan yatmış gelir.
STL bir yüzeyin kapalı olduğunu iddia etmez, sadece üçgenleri sıralar. Açık kenar, ters normal ve kendi kendini kesen yüzey dosyada rahatça durur. Üstelik aynı köşe komşu üçgenlerde ayrı ayrı yazıldığı için float yuvarlaması o noktaları mikron seviyesinde ayırabilir ve kapalı olması gereken bir kabuk açık kenarlı hale gelir. Dosya küçültmeden önce onarım yapmanın sebebi budur; seyreltme algoritmaları kapalı yüzey varsayar. Kademeli küçültme için STL küçültme aracı hedef oranı verip sonucu karşılaştırmanıza izin verir.
| Amaç | Format | Sebep |
|---|---|---|
| Dilimleyiciye vermek, arkadaşa göndermek | 3MF | Birim, renk ve çoklu parça tek dosyada; boyut da küçük |
| Baskı servisine yüklemek | Binary STL | Her yerde okunur, sürpriz yok |
| Render, doku boyama, DCC aktarımı | OBJ | UV ve malzeme taşır, her yazılım okur |
| Web ve gerçek zamanlı görüntüleme | glTF | Sahne, malzeme ve animasyonu birlikte taşır |
| Arşiv | Kaynak CAD + 3MF | Parametrik kaynak yeniden üretilebilir, 3MF okunabilir kalır |
Formatlar arasında geçiş yaparken sırayı bozmayın: önce kontrol, sonra gerekiyorsa küçültme, en son dönüştürme. STL, OBJ ve 3MF arasında geçiş için 3D model dönüştürücü yeterli; dönüşümden sonra sınırlayıcı kutuyu bir kez daha doğrulayın.
Modeli düz bir görselden ya da koddan üretiyorsanız format tartışması baştan biter: çıktı çözünürlüğünü baskı ölçünüze göre seçmek, sonradan dönüştürüp seyreltmekten temiz sonuç verir. PNG/SVG'den STL ve QR kodundan STL araçlarında bu ayarı üretimden önce yapabilirsiniz.
Dilimleyiciye vermek, paylaşmak ve arşivlemek için evet. Birimi, rengi ve çoklu parçayı taşır, aynı mesh için binary STL'nin beşte biri ile onda biri arasında yer kaplar. Sadece STL kabul eden baskı servisleri ve eski yazılımlar için STL üretmeye devam etmeniz gerekir.
Dilimleyicinin kaydettiği dosya bir proje dosyasıdır: zip'in içinde geometrinin yanında ayarlar, plaka düzeni ve malzeme profilleri de vardır. Başka bir dilimleyici bunu açtığında geometriyi alır, ayarları yok sayar. Paylaşacaksanız model olarak dışa aktarın.
OBJ malzemeleri ayrı bir .mtl dosyasında tutar ve dokular da ayrı görsellerdir. Üçünü birlikte göndermeniz gerekir. Bazı dışa aktarıcılar mtl içine kendi diskindeki mutlak yolu yazar; bu durumda yolu göreli hale getirmek gerekir.
STL ve OBJ içinde birim bilgisi yoktur, program varsayım yapar. Milimetre yerine inç varsayılırsa ölçek 25,4 kat kayar. 3MF birimi modelin kök elemanında yazdığı için bu hatayı ortadan kaldırır.
UV ve malzeme taşıdığı için OBJ hâlâ en geniş kabul gören seçenek, ama web ve gerçek zamanlı görüntüleme söz konusuysa glTF daha iyi uyar: sahneyi, malzemeleri ve animasyonu tek pakette tutar. STL bu iş için uygun değildir, çünkü doku koordinatı bile yoktur.

STL dosyası neden büyür, üçgen sayısı boyuttan nasıl hesaplanır ve binary, yeniden dışa aktarma, seyreltme ile 3MF arasında hangisi ne kadar kazandırır.