Rehberler

3D Model Sıkıştırma Rehberi: Draco ve Meshopt Codec Karşılaştırması

E

Ertuğrul Çetrefli

04 Mar 2026

12 dk okuma 301 goruntulenme
3D Model Sıkıştırma Rehberi: Draco ve Meshopt Codec Karşılaştırması

3D Model Sıkıştırma Neden Önemli?

Web üzerinde 3D içerik sunmanın en büyük zorluklarından biri dosya boyutudur. Detaylı bir mobilya modeli optimize edilmediğinde 50 MB'ı aşabilir. Bir e-ticaret sitesinde düzinelerce ürün sayfasında bu modelleri yüklemek, hem bant genişliği maliyetlerini artırır hem de kullanıcı deneyimini olumsuz etkiler. İşte bu noktada 3D model sıkıştırma devreye girer.

GLTF/GLB formatı, web üzerinde 3D içerik dağıtımı için fiili standart haline gelmiştir. Bu format içerisinde kullanılabilecek iki önemli sıkıştırma codec'i bulunur: Google'ın geliştirdiği Draco ve Arseny Kapoulkine tarafından geliştirilen Meshopt. Her ikisi de model dosya boyutunu önemli ölçüde küçültür, ancak bunu farklı yöntemlerle ve farklı ödünleşmelerle yapar.

Sıkıştırma Öncesi: Temel Optimizasyonlar

Codec uygulamadan önce yapılması gereken temel optimizasyonlar vardır. Bunları atlamak, en iyi codec'i kullanmanızın bile etkisini sınırlar:

  • Gereksiz vertex'leri temizleyin: Kullanılmayan vertex, edge ve face'leri kaldırın
  • Poligon sayısını düşürün: Decimation araçlarıyla görsel kaliteyi koruyarak poligon sayısını azaltın
  • Texture boyutlarını optimize edin: 4K texture'lar çoğu web kullanımı için gereksizdir; 1K veya 2K yeterlidir
  • Texture formatını değiştirin: PNG yerine KTX2 (Basis Universal) formatı kullanarak GPU sıkıştırması uygulayın
  • Birden fazla materyali birleştirin: Texture atlas kullanarak draw call sayısını düşürün

Draco Codec: Derin Bir Bakış

Nasıl Çalışır?

Draco, Google tarafından geliştirilen açık kaynaklı bir geometri sıkıştırma kütüphanesidir. Mesh verilerini (vertex pozisyonları, normaller, UV koordinatları, renk verileri) quantization ve entropi kodlama teknikleriyle sıkıştırır.

Draco'nun sıkıştırma süreci şu adımları içerir:

  1. Quantization: Kayan nokta değerleri belirli bir bit derinliğine yuvarlanır. Örneğin 32-bit float pozisyonlar 11-bit tam sayılara dönüştürülür.
  2. Prediction coding: Vertex pozisyonları, komşu vertex'lerden tahmin edilerek fark değerleri saklanır. Bu, veri tekrarını azaltır.
  3. Entropy coding: Sonuç veriler, Huffman veya aritmetik kodlama ile sıkıştırılır.

Draco Ayarları ve Parametreleri

Draco'nun sıkıştırma agresifliğini kontrol eden temel parametre quantization bit değerleridir:

  • Position quantization (varsayılan 11 bit): Vertex pozisyonlarının hassasiyeti. Düşük değerler daha küçük dosya üretir ama geometri bozulması riski artar.
  • Normal quantization (varsayılan 8 bit): Normal vektörlerin hassasiyeti. Aydınlatma kalitesini etkiler.
  • UV quantization (varsayılan 10 bit): Texture koordinat hassasiyeti. Düşük değerlerde texture kayması görülebilir.
  • Compression level (0-10): Sıkıştırma düzeyi. Yüksek değerler daha küçük dosya üretir ama kodlama süresi artar.

Draco'nun Avantajları

  • Çok yüksek sıkıştırma oranları — dosya boyutunda yüzde 80-95 azalma mümkün
  • Google desteğiyle geniş ekosistem ve araç desteği
  • Three.js, Babylon.js ve diğer büyük kütüphanelerde yerleşik destek

Draco'nun Dezavantajları

  • Açma (decompress) işlemi hesaplama yoğundur ve ek süre gerektirir
  • WASM decoder dosyası yaklaşık 300 KB ek yükleme gerektirir
  • Sıkıştırılmış veri, ek bir geçiş olmadan doğrudan GPU'ya gönderilemez
  • Yüksek quantization ayarlarında belirgin görsel bozulma oluşabilir
  • Animasyonlu modellerde morph target ve skinning verileriyle uyumluluk sorunları yaşanabilir

Meshopt Codec: Derin Bir Bakış

Nasıl Çalışır?

Meshopt (meshoptimizer), GPU dostu veri düzeni optimizasyonu ve sıkıştırma sunan bir kütüphanedir. Draco'dan farklı olarak, Meshopt verilerin GPU'ya gönderilme biçimine odaklanır ve sıkıştırılmış verilerin açılması çok daha hızlıdır.

Meshopt'un yaklaşımı şu aşamalardan oluşur:

  1. Vertex ve index buffer optimizasyonu: Veriler GPU cache erişim kalıplarına uygun şekilde yeniden sıralanır
  2. Quantization: Draco'ya benzer şekilde değerler düşük hassasiyete yuvarlanır
  3. Filter kodlama: Vertex attribute'ları için özel filtreler uygulanır (octahedral encoding for normals, exponential encoding for positions)
  4. Byte-level sıkıştırma: Sonuç veriler bayt düzeyinde sıkıştırılır

Meshopt'un Avantajları

  • Çok hızlı decompression — Draco'ya göre belirgin şekilde daha hızlı
  • Açılan veri doğrudan GPU buffer'a yazılabilir, ek dönüşüm gerekmez
  • Decoder boyutu çok küçük — yaklaşık 20 KB
  • Animasyonlarla ve morph target'larla mükemmel uyumluluk
  • Gzip veya Brotli gibi genel sıkıştırmayla birlikte kullanıldığında çok iyi sonuç verir
  • Progressive loading desteği — model kademeli olarak yüklenebilir

Meshopt'un Dezavantajları

  • Tek başına sıkıştırma oranı Draco kadar yüksek değildir
  • En iyi sonuçlar için sunucu tarafında Brotli veya Gzip sıkıştırmasıyla birlikte kullanılması gerekir
  • Draco kadar yaygın araç desteğine sahip değildir

Pratik Karşılaştırma: Gerçek Dünya Senaryoları

Statik Ürün Modelleri

Bir e-ticaret sitesinde sergilenen statik mobilya veya aksesuar modelleri için her iki codec de iyi sonuç verir. Draco genellikle daha küçük dosya boyutu üretir, ancak Meshopt+Brotli kombinasyonu çok yakın boyutlara ulaşır ve çok daha hızlı açılır. Kullanıcının ilk yükleme deneyimini önemsiyorsanız, Meshopt bu senaryoda öne çıkar.

Animasyonlu Modeller

Skeletal animasyonlu veya morph target kullanan modellerde Meshopt belirgin şekilde daha uyumludur. Draco'nun animasyon verileriyle olan uyumluluk sorunları, bu senaryoda Meshopt'u doğal tercih haline getirir.

Büyük Sahneler ve Çoklu Model

Bir mimari görselleştirme sahnesinde onlarca model aynı anda yüklenir. Bu senaryoda Meshopt'un hızlı decompression özelliği büyük avantaj sağlar. Draco ile her modelin açılması toplam yükleme süresini belirgin şekilde uzatabilir.

Uygulama Rehberi: glTF-Transform ile Sıkıştırma

Her iki codec'i de kolayca uygulamak için glTF-Transform CLI aracı kullanılabilir. Bu araç, GLTF/GLB dosyalarını dönüştürmek ve optimize etmek için kapsamlı bir komut seti sunar.

Draco ile Sıkıştırma

Draco sıkıştırması uygulamak için gltf-transform CLI'da draco komutu kullanılır. Position quantization 14 bit, normal quantization 10 bit ve texture coordinate quantization 12 bit gibi değerler iyi bir başlangıç noktasıdır. Yüksek hassasiyet gereken modellerde bit değerlerini artırabilirsiniz.

Meshopt ile Sıkıştırma

Meshopt sıkıştırması için gltf-transform CLI'da meshopt komutu kullanılır. Meshopt uygulandıktan sonra dosyanın Brotli ile sunulması önerilir. Çoğu modern CDN ve web sunucusu Brotli sıkıştırmayı destekler.

Texture Optimizasyonu da Ekleyin

Sıkıştırma yalnızca geometriyle sınırlı kalmamalıdır. Texture'lar genellikle toplam dosya boyutunun yüzde 60-80'ini oluşturur. KTX2 formatına dönüştürme, texture boyutunu büyük ölçüde azaltır ve GPU üzerinde sıkıştırılmış olarak kalır, bu da VRAM kullanımını düşürür.

Hangi Codec'i Seçmeli?

Karar verirken şu soruları sorun:

  • Modellerinizde animasyon var mı? Varsa Meshopt tercih edin.
  • Sunucunuz Brotli sıkıştırmayı destekliyor mu? Destekliyorsa Meshopt+Brotli mükemmel sonuç verir.
  • Mutlak en küçük dosya boyutu mu istiyorsunuz? Draco daha agresif sıkıştırma sunar.
  • Sahnede çok sayıda model aynı anda mı yükleniyor? Meshopt'un hızlı decompression'ı avantaj sağlar.
  • Progressive loading önemli mi? Meshopt bunu destekler, Draco desteklemez.

Genel bir öneride bulunmak gerekirse, modern web projelerinde Meshopt giderek daha fazla tercih ediliyor. Hızlı decompression, küçük decoder boyutu, animasyon uyumluluğu ve progressive loading desteği, onu çoğu senaryo için güçlü bir seçenek haline getiriyor.

Paylas:

Yeni yazilardan haberdar olun

3D modelleme, web teknolojileri ve daha fazlası hakkında haftalık güncellemeler alın.

Spam göndermiyoruz. İstediğiniz zaman aboneliğinizi iptal edebilirsiniz.

E

Ertuğrul Çetrefli

3DCloud ekibinden. 3D modelleme ve web teknolojileri konusunda icerikler uretiyorum.

Merhaba! 3DCloud'a hoş geldiniz. Size nasıl yardımcı olabiliriz? 👋