Three.js · Varlık · Draco
3D dünyasının hafiflik sanatı: Mesh compression (temel)
Dijital dünyada derinlik ve detay arttıkça, bu veriyi kullanıcıya ulaştırmak tam bir lojistik problemine dönüşür. Modern bir 3D model, milyonlarca çokgen (polygon) ve bu çokgenlerin uzaydaki konumunu belirleyen koordinat verilerinden oluşur. Mesh compression (ağ sıkıştırma), bu devasa veri yığınını görsel kaliteden ödün vermeden dijital bir «zip» dosyasına dönüştürme sanatıdır.
Bu sayfa Draco omurgasına giriş yapar; ayrıntılı yükleme ve Three.js entegrasyonu ilerideki konularda derinleşecektir. glTF hattının tamamı için Scene graph ve Skinning sayfalarıyla bağlamı koruyun.
Önce okuyun: Doku optimizasyonu, Texture unit & bütçe.
Neden gerekli? Dijital darboğazı aşmak
Web tabanlı 3D projelerde en büyük düşman gecikme (latency)dır. Bir kullanıcının tarayıcısında 50 MB’lık ham bir 3D modelin yüklenmesini beklemesi, modern kullanıcı deneyimi ölçütlerinde zorlanır. Mesh compression şu üç temel sorunu hedefler:
- Bant genişliği tasarrufu: Mobil veri veya düşük hızlı bağlantılarda erişilebilirliği artırır.
- Hızlı sahne açılışı: GPU’ya gidecek veri küçüldükçe ilk kareye ulaşmak kolaylaşır.
- Depolama ve önbellek: Sunucu ve CDN maliyetini düşürür; tarayıcı önbelleğini verimli kullanmayı destekler.
Ağ gerçekte nedir? Öznitelik kırılımı
Sıkıştırılabilen «şey» soyut bir «mesh» kelimesi değil; GPU’nun okuyacağı arabellek akışlarıdır. Three.js / glTF tarafında bunlar çoğu zaman geometri öznitelikleri ve bağlantı listesi olarak gelir; dokular ayrı kanaldır — doku boyutu için texture binding sayfasına bakın.
position
Köşe başına üç bileşenli uzay konumu (float vektörler). Sıkıştırma burada en çok kazanım sağlar çünkü tepe sayısı arttıkça bayt doğrusal değil, çoğu zaman daha hızlı büyür.
normal
Yüzey yönü; aydınlatma ve shading için gereklidir. Draco aynı semantik ile bu kanalı da kodlayıp açar; ham dosyada ayrı dizi olarak duran her şey, sıkı pakette aynı rolü korur.
uv · uv2
Doku adresleri. Sıkıştırılmış teslimatta doku dosyası küçülmez; küçülen çoğu zaman geometri
telidir. İkinci UV seti (uv2) varsa o da aynı mantıkla
ayrı bir öznitelik akışıdır.
index (üçgen bağlantısı)
Hangi köşelerin bir üçgen oluşturduğunu söyleyen dizinler. Bağlantılı (indexed) ağlarda tekrar eden köşe paylaşımı bu tabloyla gelir; sıkıştırıcı genelde tekrarları ve komşuluk yapısını topoloji + tahmin tarafında da ucuz temsil etmeye çalışır.
Bu kavramların bellek ve buffer düzenini bilmek, ham boyutu neden gördüğünüzü açıklar: Attributes & buffers.
Draco nedir ve Draco nasıl sıkıştırır?
Google tarafından geliştirilen Draco, 3D geometrik ağları ve nokta bulutlarını sıkıştırmak / açmak için açık kaynaklı bir koddur. «JPEG benzeri» söylemi yalnızca statik dosya boyutu düşüncesi içindir; işleyiş olarak görüntü sıkıştırmasından farklıdır — aşağıdaki üç adım, jenerik «bit düzeyi» cümlesinden daha somut tutar.
Quantization (niceleme)
Sürekli float koordinatları, daha az bitle temsil edilen sınırlı bir ızgaraya yuvarlar. Bu adım kayıplı olabilir; ayar ne kadar agresifse oyun alanı o kadar küçülür, dosya o kadar ince kalır. Dışa aktarımda bu eşiği modelin mesafesine göre seçmek kritiktir.
Prediction (komşuya göre tahmin)
Üçgen mesh’lerde bir köşenin konumu, komşu köşelerden tahmin edilebilir olunca aradaki fark küçük kalır. Kodlayıcı bu residual’ları saklar; böylece tekrar eden geometri «aynı sayıyı tekrar yazmak» yerine daha kısa farklarla taşınır.
Entropy coding
Tahmin + niceleme sonrası kalan sembol dizisi, tekrar eden desenleri arithmetic coding / entropy coding ailesi ile tekrar sıkıştırılır. Yani önce geometriyi matematiksel olarak sadeleştirip, kalan bitleri de olasılık dağılımına göre inceltmek; saf «metin dosyasını ziple» benzetmesinin ötesine geçer.
Takas: dosya boyutu, CPU ve zaman çizgisi
Decode maliyeti (CPU)
Küçük dosya ✔️ mutlaka ucuz kare demek değildir: açma işi ana iş parçacığında veya WebAssembly işçisinde CPU harcar. Çok büyük tek mesh + agresif ayar, indirme süresini kısaltıp ilk çizilebilir kareye giden yolu uzatabilir.
Streaming · decode latency
Parça parça gelen baytlar hızlı bir «indiriliyor» hissi verse de, buffer’ı doldurmak için decode zinciri yetişmeyebilir. Özellikle mobilde ağ hızlı ama CPU sınırlıysa, oynatma döngüsü ile decode sırasını planlamamak takılma üretir.
GPU yolu: tel hacmi değişmez
Tel üzerinde taşınan paket küçülür; fakat açılan geometri yine aynı üçgen sayısına yakınsa VRAM’e yazılacak vertex/index hacmi kabaca aynıdır. Kazanç çoğu zaman transfer + önbellek tarafındadır, «aynı anda daha az çokgen sığdırma» anlamına gelmez.
glTF köprüsü: KHR_draco_mesh_compression
Web’de Draco pratiği çoğu zaman glTF ile kesişir: geometri öznitelikleri KHR_draco_mesh_compression uzantısı altında kodlanır; dosyanın geri kalanında ise accessor / bufferView düzenine uygun meta veri taşınır. Yükleyici uzantıyı tanımazsa model ya düşer ya da yedek ham tampona döner — bu yüzden hem dosya hem çalışma zamanı sözleşmesini birlikte düşünmek gerekir.
Her projede zorunlu mu?
Hayır. Örnekler: korektif CAD ölçümü, tıbbi mikroskobik ölçek, yoğun morph hedefleri olan sahne, çok sık dinamik güncellenen geometri — küçük farka bile tahammül yoksa ham veya daha hafif niceleme yolu tercih edilebilir. Mobil vitrin, AR hızlı açılış ve uzak plan ürün görüntüleyici gibi senaryolarda ise sıkıştırma çoğu zaman net kazançtır.
Karşılaştırma: Raw (ham) · compressed (sıkıştırılmış)
Ham ağ ile Draco / glTF tabanlı sıkıştırılmış teslimat arasındaki farkı tek bakışta görmek için aşağıdaki tabloyu kullanabilirsiniz; takas ve glTF uzantısı bölümleriyle birlikte okuyun.
İnteraktiv laboratuvar: aynı geometri, iki tel hattı (temsil)
Aşağıdaki sahne harici .glb / CDN modeli yüklemez; yüksek segmentli prosedürel küre üzerinde hafif displasman ile yoğun bir mesh üretir (tek parça, UV + normal dahil). Raw ve Draco düğmeleri gerçek encoder yerine aynı geometri üzerinde ölçülen temsil indirme / decode sürelerini ve sabit oranlı tel boyutu etiketlerini gösterir; üretimdeki rakamlar dışa aktarım ayarınıza göre değişir. Üçgen sayısı her iki modda aynıdır — GPU tarafında topoloji yükü eşdeğer kalır; fark tel hacmi ve CPU decode aşamasındadır.
Amaç: aynı model → farklı tel hattı → farklı zaman çizelgesi; görünür kalite hedefi aynı kalır. Sahne RoomEnvironment IBL (harici HDRI dosyası yok) + ana / dolgu / rim ışık ve hafif zemin yansıması ile «stüdyo» sunumuna yaklaştırıldı. Split modunda ortadaki tutamacı sürükleyebilirsiniz; iki yarıda aynı kare üretilir — fark yalnızca üstteki metriklerde (aynı üçgen, farklı tel süresi). Yükle / sıfırla metrikleri sıfırlar ve seçili tel moduna göre süreleri yeniden oynatır. Gerçek Draco .glb için Draco vs. standart sayfasındaki ölçüm önerilerine bakın.
Özet tablo
| Özellik | Ham ağ (ör. OBJ / PLY) | Sıkıştırılmış (Draco / GLB) |
|---|---|---|
| Dosya boyutu | Çok yüksek (çoğu senaryoda belirgin şekilde daha büyük) | Daha düşük (optimize edilmiş teslimat) |
| Veri yapısı | Okunabilir metin veya ham binary | Kodlanmış, sıkı bitstream |
| Yükleme hissi | Yavaş; bant genişliği baskısı | Daha hızlı tepki; özellikle mobilde fark edilir |
| İşleme süreci | Doğrudan GPU yoluna yakın akış | Önce istemci tarafında çözülür, sonra GPU’ya gider |
| Hassasiyet | Maksimum (floating point ayrıntısı) | Ayarlanabilir; quantization ile kontrollü sapma |
| Decode (CPU) | Genelde düşük (doğrudan tampon yükleme) | Ölçülebilir maliyet; büyük ağda ana kareyi geciktirebilir |
| GPU tampon hacmi (açıldıktan sonra) | Köşe / üçgen sayısına bağlı | Aynı topoloji ise kabaca aynı; kazanç çoğunlukla tel üzerinde |
| Streaming hissi | Bayt geldikçe ilerleme | Hızlı indirme + yavaş decode = takılma riski |
Özetle: Holodepth gibi performans odaklı içeriklerde ham dev ağı tek başına taşımak, kamyon dolusu tuğlayı tek tek taşımaya benzer. Draco ve mesh compression ise paketlenmiş bir inşaat kiti gibi adrese daha hızlı ulaştırır; kullanıcı detayda kaybolmaz, hızın konforunu yaşar — tabii decode bütçesini animasyon döngüsü ile birlikte ölçtüğünüz sürece.
HoloDepth notu
İpucu
Quantization’ı yalnızca dosya boyutuna göre değil, ilk kare + CPU profiline göre ayarlayın. Ağ çok büyükse küçük paket + ağır decode bazen ham yolu geçmez.
Her KB telde kazançtır; fakat GPU tampon ve «her zaman mı?» sorularını aynı masada tutun.