Three.js · Varlık · KTX2 · Basis Universal
Basis Universal: KTX2'nin kalbi ve motoru
Basis Universal, doku sıkıştırmada «evrensel bir dil» kurmayı hedefleyen bir codec ailesidir. Uzun süre her GPU ekosistemi kendi «yerel» blok sıkıştırmasını öne çıkardı: masaüstünde BC7 gibi BC varyantları, mobilde ETC / ETC2, Apple tarafında PVRTC veya ASTC… Sonuç, aynı sanatsal dokunun depoda ve üretim hattında birden fazla kopyasının yaşamasıydı.
Basis, bu dağılmayı «bir kez sıkıştır, her yerde çalıştır» fikriyle toplar: siz tek bir ara temsil üretirsiniz; tarayıcı veya oyun motoru, çalışma anında hedefin anlayacağı blok biçimine transcode eder. KTX2 ise bu yükü taşıyan konteynerdir; yani «dosya uzantısı» ile «içerideki sıkıştırma motoru» aynı şey değildir — ikisini birlikte düşünmek hattı netleştirir.
Bu sayfa Basis katmanına odaklanır. VRAM, PNG / JPEG maliyeti ve KTX2 girişi için KTX2 nedir? ile eşleştirmeniz yeterli; glTF içinde doku kanalının nasıl bağlandığını ise Texture binding sayfasından tamamlayabilirsiniz.
İki ana modül: ETC1S · UASTC
Basis Universal tek bir «sihirli düğme» değil; iki ana modül sunar. Seçim, sahneyi değil teslimat önceliklerinizi konuşur: indirme ve depo mu kritik, yoksa ince çizgi ve düzgün geçişler mi? Çoğu gerçek üretimde cevap «ikisi de» olduğu için haritaları türüne göre ayırmak en sağlıklısıdır.
ETC1S (low bitrate / yüksek sıkıştırma)
ETC1S tarafı veriyi agresif sıkıştırır; boyut olarak JPEG ile yarışır, bazen onu geçer. Bu, özellikle çok sayıda doku içeren web sahnesinde ilk bayt ve toplam paket ağırlığını hissedilir biçimde düşürür.
Gürültülü yüzeyler, kaba metal, taş, arka plan gökyüzü gibi «yüksek frekanslı detayın zaten maskelendiği» içeriklerde genelde göze batmaz. Öte yandan geniş renk geçişlerinde (gradient), ince yazı veya keskin kenarlarda bloklama ve bant artifact riski artar; bu yüzden «her şeyi ETC1S» demek, kalite algısını sessizce eritir.
UASTC (high quality / orta sıkıştırma)
UASTC görsel sadakati öne alır: renk doğruluğu, keskinlik ve ince desenlerde ETC1S'e göre çok daha temiz bir tablo sunar; pratikte masaüstünde BC7 kalitesine yaklaşan sonuçlar beklenir. Bedeli, dosyanın büyümesidir — yine de klasik sıkıştırılmamış PNG zincirine kıyasla genelde üstün kalır.
Hero nesneler, yüz yakın çekimleri, normal map ve roughness gibi «küçük hatayı bile gösteren» kanallar burada mantıklıdır. Aynı modelde diffuse için ETC1S, detay haritaları için UASTC gibi hibrit hatlar sık görülür; önemli olan, her kanalı aynı terazide tartmaktır.
İnteraktif lab: tek atlas, iki encode yolu (öğretici)
Aşağıdaki sahnede aynı geometri ve aynı UV üzerinde, tarayıcıda üretilen tek bir «çok yüzeyli» atlas kullanılır: gradient, dama deseni, gürültü ve keskin çizgiler aynı dokuda bir aradadır. ETC1S benzeri yol için blok ortalaması ve renk düşürme uygulanır; UASTC benzeri yol için tam çözünürlük atlas korunur — böylece tek modelde fark okunur.
- Mod özeti
- —
- GPU formatı (sim. transcode hedefi)
- —
- Transcode süresi (sim.)
- —
- Atlas üretimi (CPU)
- —
- Paket / teslimat (öğretici)
- —
Nasıl okunur: Önce split modunda solun daha «bloklu», sağın daha temiz kaldığını izleyin; sonra yalnız ETC1S / UASTC modlarına geçerek tüm yüzeyde farkı tarayın. Geometri RoundedBoxGeometry (düz küp değil); doku tamamen tarayıcıda çizilir, dış dosya yoktur. Bu demo gerçek Basis kodlayıcı veya .ktx2 transcode WASM kullanmaz — görsel farkı anlatmak için blok ortalaması + renk düşürme ile öğretici bir yaklaştırma yapılır. «GPU formatı» satırı sıkıştırma uzantılarından okunur; «Transcode» satırı kısa bir animasyon sonrası bu cihazda ölçülen blok işlem süresidir (öğretici).
Sihirli an: runtime transcoding
Basis'in sahneye en güçlü katkısı runtime transcodingdir: ağdan gelen temsil, hedef GPU'nun doğrudan örnekleme yapabileceği yerel blok biçimine dönüştürülür. Bu, klasik «önce tam çöz, sonra GPU'ya ham piksel gönder» yolunun tersine, bellek ve bant düzeninde daha sürdürülebilir bir profil çizer.
Bir KTX2 yükü tarayıcıya indiğinde tipik akış kabaca şöyledir:
- İndirme: Ağdan gelen paket, Basis temelli temsil sayesinde tek hedef için birden fazla yerel varyant üretmeye göre genelde hafiftir.
- Sorgulama: Yükleyici veya motor, cihazın WebGL / WebGPU yeteneklerine ve sürücü desteğine bakarak hangi hedef biçimlerin güvenilir olduğuna karar verir (ör. mobilde ASTC / ETC2, masaüstünde BC ailesi).
- Transcoding: Ara temsil, çoğu uygulamada ana iş parçacığında veya Web Worker içinde CPU ile milisaniyeler düzeyinde hedef blok formatına dönüştürülür; bu adım «bedava» değildir, ölçüm tablosuna yazılması gerekir.
- Aktarım: Elde edilen blok dokusu VRAM'e bağlanır; örnekleme artık donanımın anladığı yoldan ilerler.
Dikkat: çıktı yine sıkıştırılmış blok dokudur; yani «tam çözülmüş RGBA8 yüzey» ile karıştırılmamalıdır. Metafor olarak bu işlem, aynı hikâyeyi farklı alfabelere çevirmeye benzer: anlam (görsel niyet) korunur, sunum dili (GPU biçimi) değişir.
Üst bölümdeki lab, hedef biçim ailesini WebGL uzantılarından okur; süre satırı ise bu sayfada yapılan prosedürel blok işinin ölçümüdür — gerçek projede aynı satırları üretimdeki transcode ölçümleriyle değiştirin. Adım adım hat için Transcoding süreci sayfasına geçin.
Farklı cihazlara uyum
Dağıtım gerçeği şudur: aynı URL'yi açan iki kullanıcı, aynı sahneyi aynı maliyetle görmez. Biri yüksek ücretli bir oyun bilgisayarında, diğeri birkaç yıllık giriş seviyesi bir Android telefonda olabilir. KTX2 + Basis hattı, bu dağılımı tek varlık setiyle yönetmenize yardım eder.
Bu katman olmasaydı ekipler genelde şu tabloyla yaşar:
- Masaüstü: BC7 (veya benzeri) için ayrı doku üretimi ve sürümleme.
- iOS: ASTC ve geçmiş nesil PVRTC yolları için ayrı varlıklar veya dallanmış paketler.
- Android: ETC2 için ayrı paketleme; cihaz karmaşası arttıkça bakım yükü büyür.
Basis ile tek bir .ktx2 teslimatı, hedefin yeteneklerine göre uygun blok biçimine yönlenir. Düşük uçta daha mütevazı hedefler seçilir; güçlü donanımda ise içeriğinizi UASTC ile ürettiyseniz transcode sonrası görsel tavan yükselir. Son karar her zaman «hangi modda encode ettim?» ve «hangi mipmap / çözünürlük politikası seçtim?» sorularının birleşimidir.
HoloDepth notu: neden bu kritik?
Altın kural (pratik)
KTX2 dosyası üretmek tek başına strateji değildir; Basis mod seçimi ürün hissini doğrudan etkiler. Her kanalı UASTC yapmak, mobilde şişkin paketler demektir; her şeyi ETC1S'ye itmek ise yakın plandaki yüzeylerde «ucuz» bir his bırakabilir. İyi haber: doğru ayrım genelde birkaç kritik kanalda yapılır.
Özet kural: Diffuse (renk) haritalarında çoğu zaman ETC1S; normal, roughness veya metalik gibi «hatayı büyüten» kanallarda kaliteyi korumak için UASTC düşünün. Kararı sahneye göre doğrulamak için indirme boyutu, transcode süresi ve kare süresini aynı tabloda tutmanız yeterlidir.