holodepth

3D Model Formatları · glTF / GLB · Web İçin Kullanım

Dosya Boyutu Analizi: glTF Paketinde Byte Bütçesi ve Envanter

«Draco açtık, GLB hâlâ 40 MB» çoğu zaman sıkıştırma başarısızlığı değil; yanlış envanterdir: doku payı ayrı sayılmamıştır. GLB vs glTF konteyneri kilitlendi; bu sayfa Web İçin Kullanım hattının üçüncü sorusuna geçer: paketteki byte'lar hangi kalemlere gider ve bütçe nasıl ölçülür?

Holodepth'te dosya boyutu analizi «tek MB rakamı» değildir. Bu sayfa transfer envanteri katmanıdır: geometri, doku, animasyon, JSON metadata ve sıkıştırma katmanlarının ayrı ayrı toplanması; CDN'de indirilen toplam ile kritik yol byte'ının ayrılması; Draco/BasisU'nun hangi dilimi düşürdüğünün görünür kılınması. Decode süresi, GPU belleği ve frame time Runtime Performansı'nda kalır; burada «ne kadar veri indirdik?» sorusu yanıtlanır.

Sayfayı bitirdiğinizde şu cümleyi kurabilmelisiniz: «glTF paket boyutu kalemlere ayrılarak okunur: mesh binary, texture binary, animasyon accessor'ları, JSON chunk ve padding. Transfer boyutu (gzip/KTX2/Draco sonrası) ile decode sonrası bellek aynı değildir. Üç satırlık rapor (geometri / doku / animasyon) teşhisin temelidir; toplam MB yalnızca özet satırıdır. Sıkıştırma uzantılarının mekanizması Uzantılar grubunda; bu sayfa ölçüm ve bütçe disiplinini kilitler.»

Bu sayfanın sınırı · komşu konularla ayrım

Bu sayfa glTF dağıtım paketinin byte envanteri ve bütçe metodolojisini anlatır:

  • Transfer vs depolama vs decode bellek ayrımı (kavramsal)
  • Kalem tablosu: mesh, doku, animasyon, JSON, padding
  • Geometri boyut düşüncesi (köşe, index, morph, skin payı)
  • Doku boyutu: çözünürlük, slot sayısı, format seçimi (dağıtım)
  • Animasyonun sıkıştırılmayan maliyeti
  • HTTP gzip/brotli + uzantı sıkıştırması katmanları
  • Ölçüm araçları ve CI envanteri (üst seviye)
  • Holodepth teşhis ve bütçe açıları

Bilinçli olarak dışarıda bırakılan konular:

Kısa ayrım: Dosya Boyutu (Ölçüm) «kaç byte indirdik?» · Runtime Performans (Zaman) «o byte'ları işlemek ne kadar sürdü?» · Draco/BasisU (Uzantı) «sıkıştırma nasıl kodlanır?»

Web İçin Kullanım hattı üçüncü soru

Katman Odak Soru Sayfa
1 · Strateji Format seçimi Web'de neden glTF ailesi? Neden glTF
2 · Konteyner GLB / .gltf Tek dosya mı modüler paket mi? GLB vs glTF
3 · Boyut Byte bütçesi Ne kadar veri indiriliyor? Dosya Boyutu Analizi (bu sayfa)
4 · Performans Runtime maliyeti Parse ve GPU yolu ne kadar? Runtime Performansı

Üç farklı «boyut»: transfer, disk, decode bellek

Zihin modeli: sıkıştırılmış kargo, açılmış parça, montaj alanı

  • Transfer boyutu = CDN'den inen byte (gzip, Draco, KTX2 dahil).
  • Disk / repo boyutu = build artefaktı; modüler pakette çok dosya toplamı.
  • Decode bellek = GPU/CPU'da açılmış geometri + decode edilmiş doku (Runtime Performans).

Yeni ekipler «40 MB GLB» dediğinde çoğu zaman yalnızca transfer boyutunu kasteder. Holodepth envanterinde bu rakam tek başına yeterli değildir. Draco'lu geometri transferde küçük görünür; decode sonrası float POSITION dizisi yine tam boyuttadır. KTX2 transferde verimlidir; GPU'da seçilen mip seviyesi bellek tüketimini belirler. Bu sayfa birinci metriği (transfer) derinleştirir; üçüncü metrik için Runtime Performansı'na köprü kurar.

Boyut metrikleri karşılaştırması
Metrik Ne ölçer? Tipik araç Bu sayfa
Transfer (Content-Length) Ağdan inen byte DevTools Network, CDN log Ana odak
Disk paketi Tüm dosyalar toplamı du, build raporu Modüler paket
JSON chunk ham Organizasyon metni GLB parser, metin editör Overhead kalemi
Decode bellek Runtime footprint Performance monitor Dışarıda (Runtime)

«Küçük dosya = hızlı site» yarım doğrudur. Küçük transfer iyi başlangıçtır; ağır decode veya dev texture bellek yine kullanıcıyı yavaşlatır. Boyut ve zaman ayrı sayfalarda ölçülür, birlikte yorumlanır.

Envanter metodolojisi: üç satırlık rapor

BasisU sayfası ve Draco sayfası aynı Holodepth kuralını tekrarlar: dosya boyutu raporunda kalemler ayrı satır olmalıdır. Toplam MB yönetime sunulur; teşhis satır satır yapılır.

// Holodepth envanter şablonu (kavramsal)
1. Geometri + skin binary     ?? MB  (Draco / ham / sparse morph)
2. Texture binary             ?? MB  (PNG / JPEG / KTX2)
3. Animasyon + metadata       ?? MB  (accessor'lar + JSON chunk)
─────────────────────────────────
   Transfer toplamı           ?? MB
   (+ HTTP Content-Encoding: gzip/br ayrı not)

GLB tek dosyada bu kalemler iç içe geçmiştir; ayırmak için glTF Inspector, gltf-transform inspect, veya kendi script'inizle buffers, bufferViews, images tablolarını dolaşın. Modüler pakette model.bin ve textures/* dosya sistemi seviyesinde ayrılmıştır; toplam paket boyutu dosya boyutlarının toplamıdır ( GLB vs glTF · modüler paket).

Kritik yol byte'ı vs paket toplamı

Modüler .gltf + paralel doku indirmede «ilk render» için gerekli minimum byte, paket toplamından küçük olabilir: düşük LOD mesh + düşük çözünürlük albedo. Envanter iki sütun taşımalıdır: Minimum LCP seti ve Tam kalite seti. Ürün kodu progressive load yapıyorsa bütçe minimum set üzerinden onaylanır; tam set arka planda gelir.

Geometri payı: köşe, index, morph, skin

Ham geometri boyutu (Draco öncesi düşünce) kabaca şu terimlerle tahmin edilir; kesin byte accessor ve bufferView hattında hesaplanır ( Binary Bufferlar). Dağıtım planlaması için yeterlidir:

  • POSITION: vertexCount × 3 × 4 byte (float32)
  • NORMAL: aynı sıra, çoğu mesh'te tam set
  • TEXCOORD_0: vertexCount × 2 × 4 byte
  • Indices: triangleCount × 3 × indexComponentSize (uint16/32)
  • JOINTS + WEIGHTS: skinned mesh'te ekstra attribute katmanı
  • Morph targets: targetCount × (POSITION + NORMAL delta)

Holodepth teşhis sırası: «geometri payı yüksek» ise önce triangle / vertex budget (LOD, decimate), sonra Draco ( Draco). Draco'yu yüksek poly üzerinde açmak transferi düşürür ama decode maliyeti ve kalite riski artar; boyut sayfası «önce poly budget» der, Runtime sayfası decode süresini ölçer.

Sparse morph ve boyut

Yüz morph'larında sparse accessor yalnızca değişen köşeleri yazar ( Morph Targets · sparse). Envanterde morph'u «tam vertex × target» ile çarpmak sparse dosyada yanlış alarm üretir; sparse count ve indices boyutunu ayrı satır yazın.

Çoklu primitive ve tekrar

Aynı bufferView paylaşımı transferi düşürür; her primitive için ayrı Draco blob üretmek şişirir. Validator «duplicate buffer» uyarıları envanter ipucudur: birleştirme veya mesh merge export politikası boyutu doğrudan etkiler.

Doku payı: çözünürlük, slot, format

Çoğu «şişkin GLB» vakasında suçlu geometri değil, dokudur. PBR metallic-roughness seti tipik olarak baseColor, normal, metallicRoughness (veya ayrı metal/rough), occlusion; clearcoat/transmission ile slot sayısı artar ( PBR Yapısı). Boyut planlamasında her images[] kaydı ayrı satırdır.

Doku formatı ve transfer karakteri (özet)
Format Transfer Boyut planlama notu
PNG/JPEG harici Ham görüntü byte'ı 4K albedo tek başına MB'lar; modüler cache ile yönet
PNG gömülü (GLB) BIN içinde GLB toplamını şişirir; dedup yok
KTX2 / BasisU Sıkıştırılmış GPU texture Transfer düşer; transcoder gerekir ( BasisU)
data URI (base64) ~%33 şişme + JSON içi Üretimde kaçının ( GLB vs glTF · data URI)

Çözünürlük bütçesi ürün kararıdır: e-ticaret mobili 1K, hero desktop 2K gibi profiller dokümantasyonla sabitlenir. Boyut analizi «4096 her slot» varsayımını kırmalıdır. Normal map genelde baseColor ile aynı çözünürlükte olmak zorunda değildir; düşük normal çoğu vitrinde kabul edilebilir kazançtır.

Paylaşılan doku ve envanter çift sayımı

Modüler pakette aynı PNG iki materyalde URI ile paylaşılırsa transfer bir kez sayılır (cache hit). GLB'de aynı görüntü iki kez gömülmüşse byte iki kez sayılır. Envanter «unique image byte» ve «toplam gömülü image byte» diye ikiye ayrılmalıdır.

Animasyon ve skin payı: sık genelde sıkıştırılmaz

glTF animasyon verisi animations[] içinde accessor'larla taşınır; keyframe sayısı × channel sayısı × bileşen boyutu ( Keyframe Mantığı). Draco geometriyi sıkıştırır; animasyon accessor'ları çoğu web pipeline'ında ham float kalır. Uzun kemik animasyonlu karakterlerde «mesh küçük, GLB büyük» teşhisinin üçüncü satırı animasyondur.

  • Translation / rotation / scale kanalları: joint sayısı × süre × örnekleme sıklığı
  • Weights (morph): target sayısı × keyframe ( Channels · weights)
  • Inverse bind matrices: skin başına sabit IBM bloğu ( Skinning)
  • CUBICSPLINE: output boyutu 3× ( Channels · CUBICSPLINE)

Holodepth üretim notu: kullanılmayan clip'leri export'tan çıkarın; aynı hareketin LINEAR dense sample'ı gereksiz byte biriktirir. Boyut optimizasyonu burada «clip envanteri» ve örnekleme seyreltmedir; Draco değil.

JSON, extras ve GLB padding

Organizasyon JSON'u çoğu büyük pakette toplamın %1-5'i civarındadır; küçük prop modellerinde oran yükselir. Yine de «görünmez şişme» kaynakları vardır:

  • extras / vendor metadata: debug isimleri, DCC notları; binlerce string birikebilir
  • Gereksiz name alanları: her node/mesh'te uzun isimler
  • GLB chunk padding: 4-byte hizalama; çok chunk'ta birleşik overhead
  • Indent'li JSON export: insan okunur .gltf üretimde sorun değil; gömülü JSON chunk'ta whitespace strip edilir

JSON şeması ve GLB chunk yapısı JSON Yapısı'nda; bu sayfa «metadata diyeti» önerir: üretim GLB'de extras temizliği CI kapısı. Boyut kazancı küçük ama diff ve gizlilik (DCC path sızıntısı) açısından değerli.

GLB padding pratik etkisi

Tek bir 3 byte görüntü gömüsü bile chunk hizalamasıyla birkaç byte padding ekler; çok sayıda küçük gömülü image'de toplam padding hissedilir. Bu, «tam GLB» profilinde çok küçük dokuları birleştirmenin veya harici URI kullanmanın gerekçelerinden biridir; sayısal örnekler build'inize göre değişir, mutlak kural değil trenddir.

Sıkıştırma katmanları: HTTP, Draco, BasisU

Transfer boyutu üç bağımsız katmanın ürünüdür; birbirinin yerine geçmez:

  1. HTTP Content-Encoding (gzip / brotli): JSON chunk ve bazen tüm GLB üzerinde; CDN ayarı
  2. KHR_draco_mesh_compression: geometri semantic sıkıştırması; mekanizma Draco sayfasında
  3. KHR_texture_basisu: doku GPU sıkıştırması; BasisU sayfasında

Holodepth rapor formatı: her katman için «önce / sonra» byte. Örnek kavramsal tablo:

Katman bazlı boyut raporu (örnek yapı)
Kalem Ham export Draco/Basis sonrası + gzip transfer
Geometri 12 MB 1.2 MB ~1.0 MB
Dokular 28 MB 4 MB (KTX2) ~3.8 MB
Animasyon 2 MB 2 MB ~0.5 MB
JSON + padding 0.3 MB 0.3 MB ~0.05 MB

Tablodaki rakamlar illüstratiftir; sizin build'inizde mutlaka ölçün. «Yalnızca Draco açtık» ile «dokular hâlâ PNG 4K» kombinasyonu BasisU · Draco ile birlikte uyarısını doğrular: iki uzantı farklı kalemleri hedefler.

EXT_meshopt_compression (kısa not)

Bazı pipeline'larda meshopt geometri ve bufferView düzeyinde ek kazanç verir; Draco ile birlikte veya alternatif olarak değerlendirilir. Holodepth envanterinde ayrı satır: «meshopt binary». Derin uzantı sayfası planlandığında mekanizma orada; boyut sayfası yalnızca «üçüncü geometri sıkıştırıcı adayı» olarak not eder.

Konteyner ve toplam paket hesabı

Aynı sahne GLB veya modüler paketlendiğinde ham içerik byte'ı aynı kalabilir; fark JSON tekrarı, padding ve HTTP başlıklarındadır. Modüler pakette toplam paket boyutu:

size(model.gltf) + size(model.bin) + Σ size(each images[].uri target)

GLB'de:

size(model.glb)  // tek Content-Length; iç envanter kalem ayrımı parser ile

CDN faturalandırması ve kullanıcı kotası «toplam indirilen byte» üzerinden işler; modüler pakette cache hit ile ikinci ziyarette toplam düşer. İlk ziyaret envanteri ile tekrar ziyaret envanteri ayrı raporlanmalıdır ( GLB vs glTF · önbellek).

Bütçe kademeleri (Holodepth öneri çerçevesi)

Mutlak MB limiti ürüne göre değişir; çerçeve hedef koymak içindir:

  • Mobil vitrin (LCP seti): transfer toplamı düşük tutulur; tam set ayrı lazy
  • Desktop hero: tam set daha yüksek; yine kalem raporu zorunlu
  • Configurator SKU: variants tek dosyada; boyut SKU sayısıyla çarpılmaz ( Variants)

Bu kademeler politika belgesidir; ölçüm olmadan onaylanmaz. Her release'de aynı envanter şablonu doldurulur; regresyon «geometri +2 MB» gibi satır satır görünür.

Holodepth perspektifleri: çoğu dokümanda olmayan açılar

«gltf-pipeline optimize edin» genellemesi yerine aşağıdaki üretim gerçekleri boyut teşhisini hızlandırır.

Yalnızca toplam MB raporu

Yönetime «38 MB» sunup kalemleri gizlemek yanlış öncelik üretir: ekip Draco ile uğraşırken asıl sorun 32 MB PNG'dir. Holodepth CI çıktısı minimum üç satır + toplam şarttır.

Disk boyutu = transfer sanmak

Repo'daki GLB dosya boyutu ile gzip'li CDN cevabı farklıdır. Bütçe onayı Network sekmesindeki Content-Length (ve encoding) ile yapılmalıdır.

IBM + morph + animasyon üçlüsü

Karakter paketinde Draco sonrası mesh küçük görünür; IBM, morph delta ve weights animasyonu toplamı «gizli üçüncü ayak» olabilir. Tam karakter envanterinde dört satır: Draco mesh, KTX2 doku, morph/sparse, animasyon ( BasisU · morph notu).

Ağır normal + ORM, hafif albedo

Sanatçı albedo'yu 1K tutup normal ve ORM'yi 4K export ederse kalem tablosu dengesiz görünür. Slot bazlı çözünürlük politikası boyut sayfasının ürün uzantısıdır.

Variants ≠ boyut tasarrufu otomatik

Variants tek dosyada çok materyal taşır; her materyal kartı kendi texture set'ine sahipse GLB yine büyür. Boyut kazancı «mesh kopyası yok»tur; doku seti çoğaltması hâlâ envanterde sayılır.

Ölçüm araçları (üst seviye)

  • Tarayıcı Network: transfer gerçeği, encoding header
  • glTF Inspector / viewer: buffer ve image listesi
  • gltf-transform inspect / optimize: kalem ayrımı ve rapor
  • CI script: build sonrası otomatik üç satır + eşik alarmı

Dokuz soruluk boyut teşhisi

Byte bütçesi kontrol listesi
Soru Yeşil ise Kırmızı ise bak
Üç kalem ayrı raporlandı mı? Teşhis mümkün Toplam MB yanıltıcı
Texture > geometry payı biliniyor mu? Doğru optimizasyon sırası Gereksiz Draco odaklı iş
KTX2 / Draco ikisi de değerlendirildi mi? Dengeli uzantı profili Tek uzantı yarım çözüm
Kullanılmayan animasyon clip var mı? Animasyon payı minimal Gizli MB
data URI veya base64 var mı? Temiz paket JSON şişmesi
Gömülü duplicate image var mı? GLB dedup veya harici URI İki kez sayılan byte
Transfer gzip/br ölçüldü mü? Gerçek CDN maliyeti Disk boyutu yanlış bütçe
LCP minimum set tanımlı mı? Mobil bütçe anlamlı Tam paket ile LCP karışık
Release diff satır satır mı? Regresyon yakalanır «Biraz büyüdü» belirsiz

Holodepth içgörüsü

«GLB hâlâ büyük» ticket'ında önce Network'te en büyük tek istek hangisi bakın; modüler pakette en büyük dosya genelde *.png veya *.ktx2'dir. Draco'yu ikinci aşamaya bırakın. Boyut sayfası optimizasyon sırasını değiştirir: doku bütçesi → poly budget → Draco → animasyon diyeti → JSON extras temizliği.

Byte envanteri tamam; sıradaki zaman metrikleri

«Ne kadar indirdik?» sorusu yanıtlandı. Web İçin Kullanım hattının son adımı bu byte'ları işlemenin zaman maliyetine iner:

  1. Runtime performans Runtime Performansı: JSON parse, Draco/KTX2 decode, GPU upload, waterfall süresi, frame time

Küçük transfer + ağır decode mümkündür; büyük transfer + hafif decode da. İki sayfa birlikte «mobilde neden takıldı?» sorusunu tamamlar. Format omurgası File Structure, Materyal, Animasyon ve Uzantılar dallarında kalır.

Format okuyucusu özeti: Dosya boyutu üç kalem + toplam olarak okunur; transfer, disk ve decode bellek karıştırılmaz. Draco ve BasisU farklı dilimleri küçültür; animasyon ve extras sık gözden kaçan paylardır. Ölçüm satır satır; optimizasyon önce doku ve poly, sonra uzantı profili.