IT
OmnvertGörsel • Belge • Ağ

STL, 3MF ve OBJ: hangi format hangi iş için

6 dakika okuma
Kareli kâğıda kurşun kalemle çizilmiş, eğri yüzeyli bir oturak tasarımı; üzerinden geçen soluk yardımcı çizgiler.

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.

Üç format, üç ayrı problem

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.

Dosyaların içinde ne var

STL: üçgen çorbası

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: indeksli ve metin

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: zip içinde XML

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.

Aynı mesh, üç dosya: kaba hesap

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.

  • Binary STL: 84 + 50 × 300.000 = 15.000.084 bayt, yani 14,3 MiB. Sabit, tahmin edilebilir, sıkıştırmasız.
  • ASCII STL: aynı geometri üçgen başına 250-300 bayt metin, yani 75-90 MB. Tek kazancı gözle okunabilmesi.
  • OBJ: 150.000 köşe satırı × yaklaşık 30 bayt = 4,5 MB, artı 300.000 yüz satırı × yaklaşık 22 bayt = 6,6 MB. Toplam 11 MB civarı. Doku ve normal indeksleri de yazılırsa yüz satırları üçe katlanır.
  • 3MF: XML metni OBJ'den uzundur ama zip içinde deflate ile sıkışır. Aynı mesh için binary STL'nin beşte biri ile onda biri arasına, yani 1,5-3 MB bandına oturması olağandır.

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.

Asıl fark: birim

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.

Nerede beklenmedik şekilde bozulur

3MF: proje dosyası ile model dosyası aynı şey değil

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.

  • Production uzantısı modeli birden çok dosyaya böler ve nesneleri UUID ile bağlar; her okuyucu bu bağları takip etmez, bazı yazılımda sahne boş gelir.
  • Beam lattice uzantısıyla yazılmış bir dosyada geometri üçgen olarak değil, kiriş olarak durur; desteklemeyen yazılım yalnızca kalan meshi görür.
  • Eski çevrim içi baskı servislerinin bir kısmı hâlâ sadece STL kabul eder; sipariş vereceğiniz yerin kabul listesine dosyayı hazırlamadan bakın.

OBJ: yanında gitmesi gereken dosyalar

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: tutarlılık garantisi olmaması

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.

Hangisini ne zaman

AmaçFormatSebep
Dilimleyiciye vermek, arkadaşa göndermek3MFBirim, renk ve çoklu parça tek dosyada; boyut da küçük
Baskı servisine yüklemekBinary STLHer yerde okunur, sürpriz yok
Render, doku boyama, DCC aktarımıOBJUV ve malzeme taşır, her yazılım okur
Web ve gerçek zamanlı görüntülemeglTFSahne, malzeme ve animasyonu birlikte taşır
ArşivKaynak CAD + 3MFParametrik 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.

Sık sorulanlar

3MF her durumda STL'nin yerini alabilir mi?

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.

Dilimleyicimin kaydettiği 3MF ile dışa aktardığım 3MF neden farklı?

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 dosyam gri geliyor, dokular nerede?

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.

Model dilimleyicide 25 kat büyük açıldı, sebebi ne?

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.

Render için hangisi doğru?

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.

Yazıda kullanılan araçlar

Kaynaklar

YöntemGörsel kaynakları