Three.js · Varlık · KTX2 · Encode
KTX2 encode süreci: Doku hazırlama rehberi
Doku sıkıştırma süreci, yalnızca bir dosya biçimini değiştirmek değildir. Bu, 3D modelin web üzerindeki yüklenme hızını ve GPU performansını belirleyen bir optimizasyon hattıdır. Geometri verisini paketlemek için kullandığımız Draco gibi, KTX2 de dokular için benzer bir «paketleme» işlemi yapar: hedef, ağda küçük paket, çalışma zamanında ise blok tabanlı verimli örneklemedir.
Bu sayfa, ham görselden KTX2 üretimine kadar olan üretim hattını pratik adımlarla özetler: hangi kanalda hangi Basis modu, hangi araçlar ve neden mipmap zorunlu sayılır. Encode, «dosyayı küçültmek»ten öte; hangi verinin hangi hatayla sıkıştırılabileceğine dair bir karar tablosudur — yanlış mod, sahneye indiğinde telafisi pahalıdır.
Çalışma zamanında paketin cihazda nasıl «yerel dile» çevrildiğini görmek için Transcoding süreci sayfasına; içerideki kodlama fikrini ve iki modun maliyet–kalite dengesini derinleştirmek için Basis Universal ile KTX2 nedir? içeriklerine dönebilirsiniz. Okuma sırası olarak: önce konteyner zemini, sonra Basis, ardından bu sayfa (üretim), en sonda transcoding (teslimat sonrası) akışı mantıklı bir zincir kurar.
glTF tarafında doku bağlama zemini için
Texture binding sayfasını da yanınıza
alın; encode çıktısı, bağlama ve yükleme katmanıyla birlikte düşünüldüğünde anlam kazanır.
Üretim çıktınız genelde ya bağımsız .ktx2 dosyaları ya da KHR_texture_basisu ile gömülü .glb olur; ikisinde de
aynı sorular (kanal, mipmap, renk uzayı) geçerlidir.
Doku nasıl KTX2 olur? (Adım adım)
Bir görseli KTX2'ye dönüştürürken tipik süreç şu sırayı izler. Buradaki sıra, araçların çoğunda «gizli varsayılanlar» olsa bile zihinsel modelinizin aynı kalmasını sağlar: önce ne sıkıştırıyorsunuz, sonra nasıl bloklanıyor, ardından hangi Basis yolu ve en sonda hangi ölçek seviyeleri pakete giriyor.
- Analiz: Görselin türü belirlenir. Renk bilgisi mi (diffuse / albedo) yoksa matematiksel veri mi (normal, roughness, metallic vb.) içeriyor? Bu ayrım, sıradaki mod ve kalite seçimini doğrudan etkiler. Pratikte aynı «görsel dosyası» etiketi altında sRGB renk haritası ile doğrusal (linear) veri kanalları birbirine karıştığında en pahalı hatalar çıkar; üretim hattında kanal başına etiketlemek (veya glTF'teki renk uzayı metadata'sına güvenmek) encode öncesi zorunluluk sayılmalıdır.
- Bloklama: Görsel, GPU'nun verimli okuyabileceği 4×4 piksellik bloklara ayrılır; hedef formatlar bu blok düzenine göre tanımlıdır. Bu adım sizin için çoğu zaman soyuttur, fakat «neden kenarlar titriyor?» sorusunun cevabı çoğu kez blok sınırları ve sıkıştırma artefaktlarıyla ilişkilidir — özellikle ince çizgi ve yüksek frekanslı normal haritalarında.
- Basis Universal seçimi: Önceki derslerde işlenen ETC1S (maksimum sıkıştırma) veya UASTC (maksimum kalite) modlarından biri seçilir. Kural pratikte şuna yaklaşır: gözün «hatayı affetmediği» kanallar (normal, ORM paketli yüzey verisi) için UASTC; geniş alanlı renk için ETC1S — yine de sahneye göre doğrulama şart. Ayrımın özeti için ETC1S / UASTC bölümüne bakın.
- Mipmap üretimi: KTX2 dosyası içine «mipmap» adı verilen, görselin daha düşük çözünürlüklü kopyaları gömülür. Model uzaktayken GPU, daha küçük bir doku seviyesi kullanarak hem bellek bant genişliği baskısını azaltır hem de örnekleme hatalarını yumuşatır. Bu adımı atlamak, aşağıdaki HoloDepth notunda ayrıntılandığı gibi, yalnızca «bulanık görüntü» değil — gereksiz yüksek çözünürlük örneklemesi ve aliasing riski demektir.
Bu dörtlü, tek bir doku dosyası için yeterlidir. glTF materyalinde onlarca kanal varsa iş, aynı dörtlünün kanal listesine uygulanması ve çıktıların isimlendirme / sürümleme kurallarıyla paketlenmesine döner — otomasyon (ör. CI betiği veya dışa aktarma şablonu) burada değer kazanır.
İnteraktif lab: mipmap ve Basis hissi (öğretici)
Bu sayfa için harici GLB model şart değildir;
metin akışı tek başına yeterlidir. Aşağıdaki sahnede yalnızca dokulu bir
düzlem vardır — amaç, uzaklaştıkça gözlemlenen mipmap
etkisini ve iki Basis modunun öğretici ayrımını parmak
basmadan hissettirmektir; düzlem ayrıca çok hafif salınır ki mipmap
farkı çoğu zaman dokunmadan da seçilebilsin. Gerçek .ktx2 encoder /
Basis WASM kullanılmaz; tam pipeline
simülasyonu
transcoding labnda anlatılır. İşletim
sistemi «hareketi azalt»
tercihini açtıysanız salın ve yavaş dönüş kapanır; farkı yine fare ile uzaklaştırarak
görebilirsiniz.
İpucu: birkaç saniye bekleyin (hafif hareket + dönüş) veya fare ile uzaklaşın — fark özellikle mipmap kapalıyken «parlama / shimmer» olarak belirir.
Nasıl okunur: Demoda düzlem çok hafif salınır ve yavaşça döner — çoğu kullanıcıda mipmap kapalıyken «parlama» kendiliğinden seçilir. Düzlemde UV tekrarı kasıtlı olarak yüksektir (ince örüntü → shimmer). İsterseniz mipmap'i kapatıp uzaklaşarak da pekiştirin; sonra açın. ETC1S hissinde (öğretici) 8×8 blok ortalaması ve hafif renk kuantizasyonu birlikte «blok artefaktı» ve bantlanma ipucu verir — gerçek codec 4×4 tabanlıdır; burada farkın gözle okunması için kasıtlı olarak sertleştirilmiştir. UASTC hissinde ince kareler daha keskin kalır. Kaynak dokuda (öğretici) hafif sinüs tonu vardır; düz siyah-beyaz damada ETC1S / UASTC ayrımı doğal olarak zayıf kalır — bu normaldir; ton geçişi bantları ve blokları okunur kılar. Bu, gerçek dosya boyutu veya toktx bayrakları yerine neden düşük bitrate küçük ama göze pahalı? sorusuna görsel tercüme sunar.
Kullanılan araçlar (tools)
Dönüştürme için sektörde yaygınlaşmış birkaç temel araç bulunur; hepsi aynı fikri paylaşır: üretimde tekrarlanabilir komutlar ve kontrol edilebilen parametreler. Seçim genelde «tek doku mu, tüm glTF paketi mi?» ve «bu makinede hangi sürüm kurulu?» sorularına göre yapılır — aşağıdaki başlıklar rol ayrımı içindir, birbirini dışlamaz.
toktx (Khronos
Group)
Khronos Group'un resmi CLI aracıdır; en
düşük seviyede tam kontrol sağlar. Avantajı: kalite, mipmap seviyesi ve hedef tür gibi parametreleri elle yönetebilirsiniz.
Tek dokuyu veya toplu işlem betiğini aynı arayüzle beslemek, CI için
uygundur. Tam bayrak seti kurulumunuza ve KTX-Software sürümünüze
göre
değişebilir; üretim öncesi toktx --help çıktısı ile proje dokümantasyonunuzu
eşleştirmeniz iyi pratik sayılır.
toktx --genmipmap --target_type etc1s output.ktx2 input.png
Örnek, ETC1S hedefi ve mipmap üretimini vurgular; farklı giriş biçimleri veya şeffaflık kanalı için ek bayraklar gerekebilir.
KTX-Software (GUI & CLI)
Khronos'un sağladığı geniş kapsamlı yazılım paketidir; hem
görsel arayüz hem terminal araçlarını içerir. toktx gibi bileşenler genelde bu
paketin parçasıdır. «Tek seferlik deneme» ile «her build'de aynı komut» arasında köprü
kurmak isteyen ekipler için iyi bir başlangıç noktasıdır: önce GUI
ile
parametreleri keşfedip, sonra aynı ayarları betiğe taşırsınız.
glTF-Transform (geliştirici dostu)
Özellikle glTF modelleriyle çalışanlar için güçlü bir seçenektir;
modeli ve içindeki dokuları tek komutla KTX2'ye gömebilirsiniz.
Ağaç düzeyinde optimizasyon (resize, gereksiz dokuları düşürme, dedup) ile birlikte kullanıldığında encode adımı, sahne genelinde
öngörülebilir kazanımlar verir. Yerelde genelde npx @gltf-transform/cli ön eki
ile çağrıldığını göreceksiniz; aşağıdaki satır, fikir vermesi için sadeleştirilmiştir.
gltf-transform uastc input.glb output.glb --level 4
Bu örnek, modeldeki dokuları UASTC formatında KTX2 ile paketlemeye yöneliktir; proje politikasına göre ETC1S veya kanal bazlı komutlar da tercih edilebilir. Tüm kanalları aynı moda zorlamak yerine, yukarıdaki analiz adımıyla eşleştirmek genelde daha sağlıklıdır.
PlayCanvas / Gestaltor
Web tabanlı veya görsel arayüzlü araçları tercih edenler için, sürükle-bırak ile KTX2 dönüşümü yapılabilen editörlerdir; hızlı iterasyon ve ekip içi görsel geri bildirim için uygundurlar. Üretim hattının «nihai» adımı olarak değil, tasarım ve onay aşamasında hız kazanmak için düşünün; sürüm ve bayrakların tekrarlanabilir olduğu ortamda CLI hâlâ altın standarttır.
Optimizasyon pipeline'ı (akış)
Sağlıklı bir 3D geliştirme hattında KTX2 dönüşümü çoğu zaman dışa aktarma (export) aşamasında otomatize edilir. Amaç, tasarımcının ürettiği «yüksek doğruluklu kaynak» ile oyuncunun indirdiği «küçük teslimat» arasındaki boşluğu, her build'de aynı kurallarla kapatmaktır. İdeal akış kabaca şöyledir:
- Design: Doku, Photoshop veya Substance Painter gibi araçlarda 2K / 4K PNG (veya ekip standardınız ne ise) olarak hazırlanır. Bu aşamada çözünürlük ve dosya adlandırma kurallarını netleştirmek, sonraki otomasyonun ön koşuludur.
- Sıkıştırma kararı: Renk dokuları (albedo) için çoğu senaryoda ETC1S (boyutu küçültmek için); yüzey dokuları (normal / metallic vb.) için veri kaybını sınırlamak adına UASTC düşünülür. Karar tek satırlık bir tabloya dökülebilir; önemli olan, kararın kodda veya betikte tekrarlanabilir olmasıdır.
- Encoding: Seçilen araç (örneğin
toktx) ile KTX2 dosyası üretilir; mipmap zinciri bu adımda dosyaya gömülür. Çıktıların sürüm kontrolünde izlenebilir olması (hash veya yapılandırma dosyası) regresyonları erken yakalar. - Entegrasyon: Oluşan
.ktx2veya dokuları gömülü.glbdosyası Three.js / Babylon.js projelerine dahil edilir. Buradan sonra sahne tarafında doku boyutu, filtreleme ve bellek profili devreye girer; özet için GPU doku optimizasyonu sayfasına geçmek doğal devamdır.
Bu hattı «sadece sanatçı çıktısı» olarak bırakmak yerine, mühendislik tarafında küçük bir doğrulama adımı eklemek (ör. referans sahne yükleme süresi, paket boyutu üst sınırı) encode kalitesini sübjektif yorumlardan çıkarır.
HoloDepth notu: Mipmap unsuru
En çok atlanan adım
KTX2 encode sürecinde en sık unutulan konu mipmap üretimidir. Örneğin toktx
kullanırken --genmipmap bayrağını eklemezseniz, GPU
uzak nesneler için bile en yüksek çözünürlüklü doku seviyesini örneklemek zorunda
kalabilir; bu da aliasing (tırtıklanma) riskini artırır,
örnekleme
filtresi ile birlikte düşünüldüğünde ise kare süresine ve bellek trafiğine zarar verir.
KTX2 dosyanızı oluştururken mipmap
zincirini
pakete mutlaka dahil edin.
İyi haber: zincir eklendikten sonra motor tarafında «doğru filtre modu» (minification için mipmap kullanan modlar) seçimi ayrı bir ince ayar konusudur; fakat zincirin hiç olmaması, bu ayarları devreden çıkarır. Üretimde kısa bir kontrol listesi yeterlidir: kaynak kareler 2'nin kuvveti mi, tüm seviyeler yazıldı mı, referans sahne uzak çekimde temiz mi?