holodepth

Three.js · Varlık · KTX2

KTX2 nedir? — The container for the future

KTX2 (Khronos Texture Container version 2), GPU tarafından doğrudan okunabilen dokuları (textures) depolamak için tasarlanmış bir dosya formatıdır. Khronos Group tarafından geliştirilen bu format, özellikle WebGL, WebGPU ve Vulkan gibi modern grafik API’leri için bir standarttır.

Bu sayfa KTX2 omurgasına giriş yapar: formatın ne olduğunu, neden klasik görsel dosyalarının yetmediğini ve GPU sıkıştırmanın neden kritik olduğunu tek yerde toplar. Three.js ile dosya yükleme, glTF uzantıları ve üretim hattı ayrıntıları ilerideki konularda derinleşecektir. Geometri tarafı için Mesh compression ile aynı «hafif teslimat» hedefini paylaştığını unutmayın; burada ağırlık doku belleği ve bant genişliği üzerindedir.

Sıradan bir görsel formatının aksine KTX2, bir konteyner görevi görür. İçerisinde Basis Universal (Basisu) teknolojisini barındırarak, dokuların hem diskte çok küçük yer kaplamasını hem de GPU belleğinde (VRAM) sıkıştırılmış halde kalmasını sağlar. glTF ekosisteminde çoğu zaman KHR_texture_basisu uzantısı ile birlikte anılır; yani «dosya biçimi» ile «sahneye nasıl bağlandığı» ayrı katmanlardır.

Önce okuyun: Texture binding, Doku optimizasyonu (GPU).

PNG ve JPG neden 3D dünyasında yetersiz kalıyor?

Web geliştiricileri için PNG ve JPG «altın standart» gibi görünse de, 3D grafikler söz konusu olduğunda bu formatlar ciddi birer performans darboğazıdır.

Statik sayfada tek bir görseli göstermek ile WebGL döngüsünde onlarca dokuyu sürekli adreslemek aynı iş değildir: ikincisinde hem bellek hem yük transferi hem de kare süresi bütçesi aynı anda ölçülür.

  • 2D UI: genelde birkaç büyük görsel; tek seferlik açma ve önbellek yeterli olabilir.
  • 3D sahne: materyal başına çoklu slot (albedo, normal, ORM vb.); çözünürlük ve sayı arttıkça maliyet üstel (superlinear) büyür.

Bellek şişmesi (VRAM bloating)

Bir JPG dosyası diskte 500 KB olabilir; ancak tarayıcı bu resmi ekrana basmak için önce açma (uncompress) işlemini yapar ve ham veri (RAW) haline getirir.

Tek bir RGBA doku tamponu için kabaca bellek ihtiyacı şu çarpanla büyür:

2048 × 2048 × 4 byte = 16 MB (VRAM)
  • Disk küçükVRAM şişer
  • KTX2VRAM’de de sıkıştırılmış kalır

On benzeri doku kullandığınızda yalnızca görseller için yüzlerce megabayt VRAM harcanabilir; bu yüzden «dosya küçük» ile «bellek ucuz» aynı şey değildir.

CPU ve ana bellek yükü

JPG / PNG verileri GPU tarafından doğrudan anlaşılamaz. Tarayıcı önce CPU kullanarak bu veriyi çözer, RAM’e alır ve oradan VRAM’e transfer eder. Bu süreç, özellikle mobil cihazlarda takılmalara (jank) ve uzun yükleme sürelerine neden olur.

İnteraktif kanıt: aynı küp, farklı RGBA tamponu

KTX2 lab · DataTexture · Three.js r170 Yükleniyor…
Tampon modu
VRAM (yaklaşık RGBA)
Tampon üretimi (bu cihaz, CPU)
Tampon çözünürlüğü
CPU / GPU yolu (öğretici)
CPU decode GPU direct

Nasıl okunur: Modları sırayla seçin — küp aynı kalır; PNG yolunda dama deseni daha keskin (nearest örnekleme), KTX2 yolunda ise hafif yumuşak (mipmap + linear, küçük tampon). GPU’ya giden tek katmanlı RGBA tamponunun çözünürlüğü değişir. Bu demo gerçek .png / .ktx2 dosyası yüklemez; tarayıcıda oluşturulan DataTexture ile VRAM maliyetini somutlaştırır. KTX2 + Basis gerçek yolunda hedef genelde sıkıştırılmış GPU biçimidir; bu sayfada mesele «aynı sahne fikriyle tampon boyutunu hissetmek».

GPU compression neden kritik?

KTX2’nin kalbinde yatan GPU compression, dokunun ekran kartı belleğinde bile sıkıştırılmış formda kalabilmesi demektir. WebGL tarafında doku, çoğu zaman GPU’nun doğrudan örnekleme (sampling) yaptığı sıkıştırılmış bloklar olarak yaşar; bu yüzden «önce aç, sonra yükle» yerine «hedef biçimde tut» modeli mümkün olur.

Aynı başlık altında iki pratik yol sık geçer: ETC1S (daha küçük bellek / daha agresif) ile UASTC (daha yüksek kalite esnekliği). İkisi de aynı fikrin varyantıdır: VRAM ve kalite arasında farklı takas eğrileri sunarlar; seçim, sahnenin doku kalitesi ve hedef cihaz profiline bağlıdır.

VRAM tasarrufu

KTX2 (özellikle ETC1S veya UASTC yolları sayesinde), VRAM kullanımını içerik ve hedefe bağlı olarak ciddi oranda düşürebilir. Yukarıdaki 16 MB’lık örnek, uygun transcode ile VRAM’de çok daha az yer kaplayabilir.

Doğrudan erişim (random access)

Geleneksel sıkıştırmaların (ZIP, JPG) aksine, GPU sıkıştırma biçimleri rastgele erişime izin verir. Ekran kartı, dokunun tamamını açmadan yalnızca o an ihtiyaç duyduğu piksel bloğunu (ör. 4×4) okuyabilir; bu, işleme hızını (FPS) destekler.

Evrensel uyumluluk (Basis Universal)

KTX2 öncesinde, donanım ve sürücü tarafında BC7, ASTC, ETC2 gibi farklı sıkıştırma formatları beklenirdi. KTX2, Basisu sayesinde tek bir dosya ile hedef platforma uygun biçime transcode (anlık dönüştürme) yolunu sunar.

Gerçek dünya karşılığı

  • PC (çoğu masaüstü GPU) → BC7
  • iPhone / tipik iOS yolu → ASTC
  • Android geniş kesit → ETC2

KTX2 = tek dosya → hepsine uyum: aynı varlığı her hedef için ayrı doku üretmeden, çalışma anında doğru GPU biçimine çevirirsiniz.

Neden şimdi KTX2?

Mobil tarayıcılar, yüksek çözünürlüklü ekranlar ve kısa oturum süreleri bir araya gelince «indirme küçük olsun» tek başına yeterli olmaz: kullanıcı sahneye girdikten sonra da VRAM baskısı ve kare düşüşleri devam eder. KTX2, bu üçlüyü aynı anda hedefleyebilecek bir doku taşıma stratejisidir.

Aşağıdaki tablo iddiaları kanıtlamaz; fakat ekipler arasında hızlı ortak dil kurar: aynı satırda neyi iyileştirdiğinizi (VRAM, yükleme, GPU yolu, mobil) birlikte tartışırsınız.

Özet karşılaştırma

Ölçü PNG / JPG KTX2
VRAM Çok yüksek Çok düşük
Yükleme (load) Yavaş Hızlı
GPU Direkt değil Direkt
Mobil Sorunlu Optimize

HoloDepth checkpoint’i

Özet

HoloDepth gibi yüksek performanslı 3D projelerde, kullanıcı deneyimini zorlayan uzun yükleme süreleri ve bellek baskısını yönetmenin pratik yolu, doku hattında KTX2 mimarisini benimsemek ve bunu glTF / Three.js yüküyle birlikte ölçmektir (indirme, transcode süresi, VRAM, kare süresi aynı tabloda).