holodepth

Three.js · Varlık · Draco

Encode süreci: model nasıl Draco’ya çevrilir?

Bir 3B modelin Draco ile encode edilmesi, verinin geleneksel lineer yapısından çıkarılıp daha önce işlediğimiz matematiksel ızgaralara (quantization) ve bağlantı kurallarına göre yeniden yazılmasıdır. Draco Encoder bir «kara kutu» gibi dursa da içerideki iş, aşağıda §1’de özetlenen matematiksel adımların birleşimidir.

Tam veri akışı: DCC’den GPU’ya

Üretimde parçalar ayrıştırılsa da zihinsel model tek bir banttır. Kaba sıra:

  1. DCC (ör. Blender): sahne hazırlığı ve glTF dışa aktarımı.
  2. glTF üretimi: geometri, materyal ve buffer / bufferView yapısı.
  3. Draco encode (offline, CPU): ağ verisinin sıkı bitstream’e dönmesi.
  4. GLB / paket: sıkıştırılmış gövde + uzantı metaverisi.
  5. CDN / barındırma: kullanıcıya baytların iletilmesi.
  6. Tarayıcı: indirme + decode (runtime, CPU / WASM).
  7. GPU: açılmış buffer’lara çizim.

Bu hattın decode halkası için Öznitelik sıkıştırma · zincir ve Mesh compression · takaslar sayfalarıyla hizayı koruyun.

Kodlayıcının içi: ne oluyor?

Encoder, ham köşe dizilerini tek ham metin gibi yazmak yerine tipik olarak şu aileleri uygular (ayrıntı sürüme göre değişir; sezgi aynıdır):

Export iş akışı

Sağlıklı bir dışa aktarım genelde şu sırayı izler:

  1. Mesh cleanup (temizlik): Gereksiz köşeler, kullanılmayan katmanlar ve ngonlar (dörtgenden fazla kenarlı yüzeyler) mümkün olduğunca giderilir. Draco üçgen (triangle) ağlarında en tutarlı sonuç verir.
  2. Attribute alignment: position, normal ve uv kanalları kodlama için ayrıştırılır / doğrulanır (Öznitelik sıkıştırma).
  3. Encoding: Seçilen parametrelere (bitler, compression level vb.) göre veri paketlenir.
  4. Packaging: Çıktı çoğu zaman .glb veya .gltf konteynerinde bir buffer olarak gömülür (KHR_draco_mesh_compression bağlamında).

KHR_draco_mesh_compression ve paket

Uzantı etkin olduğunda, ilgili primitive üzerinde ham accessor + bufferView yerine Draco bitstream’i işaret edilir; yükleyici önce bu gövdeyi çözüp sonra GPU’nun beklediği vertex / index tamponlarına yazar. Yani paketleme yalnız «dosyayı küçültmek» değil — çalışma anında hangi baytın ne anlama geldiği sözleşmesidir.

Uzantı taşması ve yükleyici davranışı için temel çerçeve: Mesh compression · glTF köprüsü.

Araçlar: Blender · CLI

İki ana yol vardır: biri görsel, diğeri otomasyona uygun teknik yoldur.

A. Blender: görsel kontrol

Blender, yerleşik glTF 2.0 dışa aktarıcısı ile Draco seçeneği sunar. File → Export → glTF 2.0 (.glb / .gltf) yolunu izleyin; sağ panelde Compression sekmesinden Draco kutusunu işaretleyin.

Avantaj: Son görünümü görerek hızlı deneme. Dezavantaj: Binlerce varlıkta tek tek elle sürdürmek zordur.

B. CLI: gltf-pipeline ve otomasyon

Profesyonel hatlarda sık tercih, Google kütüphanesini saran gltf-pipeline gibi araçlardır: toplu iş, sunucu tarafında yükleme sonrası kodlama ve öznitelik başına bit atama mümkündür.

gltf-pipeline -i model.gltf -o model_compressed.glb -d --draco.compressionLevel 7

Compression level yanında, CesiumGS/gltf-pipeline ailesinde öznitelik başına bitleri çoğu zaman şu bayraklarla verirsiniz (sürümünüze göre doğrulayın):

  • --draco.quantizePositionBits
  • --draco.quantizeNormalBits
  • --draco.quantizeTexcoordBits
  • (İsteğe bağlı) --draco.quantizeColorBits, --draco.quantizeGenericBits
gltf-pipeline -i model.gltf -o out.glb -d ^
  --draco.compressionLevel 7 ^
  --draco.quantizePositionBits 14 ^
  --draco.quantizeNormalBits 10 ^
  --draco.quantizeTexcoordBits 12

Örnek çok satırlı komutta ^ satır devamıdır (Windows kabuğu); bash’te ters eğik çizgi kullanın. Resmi README ve sürüm notlarını projenize sabitleyin.

Kritik karar: sıkıştırma nerede yapılmalı?

Encode = offline: stüdyo veya CI makinesinde bir kez (veya sürüm başına) çalışır; CPU yükü burada yoğunlaşır. Decode = runtime: her kullanıcı oturumunda, tarayıcıda ağdan gelen paketi açma maliyetidir — kare bütçesiyle yarışan genelde budur (Decode maliyeti).

Encode CPU ağırlıklıdır; bu yüzden:

  • Tarayıcıda son kullanıcıya encode yaptırmayın — hem süre hem de cihaz ısısı kötü deneyim üretir.
  • Modelleri yayın öncesi (build time veya upload / CI aşaması) kodlayın.
  • Ana dosyayı (master) her zaman saklayın: Draco kayıplı olabilir; sıkıştırılmış çıktıdan orijinal kaliteye dönüş genelde mümkün değildir.

Asset hattı ve CI / CD

Büyük projelerde varlık derleme adımı (asset build) şarttır: depodaki master glTF / FBX girdisi, CI işinde gltf-pipeline + aynı Draco bayraklarıyla her derlemede tekrarlanır; çıkan GLB artefakt olarak paketlenir. Böylece «hangi sürüm hangi bitlerle çıktı?» sorusu yeniden üretilebilir olur; el ile dışa aktarılan tek seferlik dosyalar üretimle karışmaz.

Performans: kodlama ve çözüm

Encode: toplu işlerde süre doğrusal büyür; compression level yükseldikçe kodlayıcı CPU süresi genelde artar (parametreler · seviye). Decode: kullanıcı tarafında tel küçüldükçe indirme kazanır; fakat açma maliyeti büyük ağlarda belirginleşir — ikisini birlikte ölçün.

Özetle: encode, 3B varlığınıza web için pasaport basmaktır — Blender ile deneyip, CLI + CI ile tüm kütüphaneyi aynı kurallara oturtabilirsiniz.

HoloDepth teknik notu

Animasyon ve titreme

Modelde animation varsa, agresif Draco kodlaması bazen keyframe tabanlı hareketlerde hafif titreme gösterebilir. Bu durumda animasyon verisini ayırıp yalnızca geometriyi kodlamayı veya quantization bitlerini artırmayı deneyin (parametre rehberi).