holodepth

3D Model Formatları · glTF / GLB · Materyal Sistemi

Extension Sistemi glTF Materyal Uzantıları Nasıl Çalışır?

Model DCC'de clearcoat / cam / kumaş doğru, web'de «düz PBR» kalıyorsa sorun çoğu zaman shader eksikliği değil; dosyada extension'ın extensionsUsed / nesne gövdesinde olup loader'ın onu bilmemesidir. Material Slots core bağı kapattı; bu sayfa dördüncü soruya geçer: core PBR kartı nasıl genişletilir?

glTF 2.0 core, metalik-pürüzlülük PBR ile bilinçli olarak dar tutulur. Gerçek üretim ihtiyacı (clearcoat, sheen, transmission, unlit, variants, eski specular-glossiness) uzantı sözleşmesi ile eklenir. Holodepth'te bu sayfa «mekanizma + materyal uzantı haritası»dır; Draco, Basis veya GPU instancing gibi geometri / doku sıkıştırma uzantılarının derin sayfaları ayrı Uzantılar grubundadır.

Sayfayı bitirdiğinizde şu cümleyi kurabilmelisiniz: «Uzantı adı kökte extensionsUsed (ve gerekirse extensionsRequired) listesine yazılır; veri materials[i].extensions["KHR_…"] nesnesinde durur. Used «var», Required «yoksa dosya anlamsız». Loader bilmediği Used uzantıyı sessizce yok sayabilir; Required bilmiyorsa yüklemeyi reddetmelidir.»

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

Bu sayfa glTF extension mekanizmasını ve materyal odaklı KHR uzantılarının haritasını anlatır:

  • extensionsUsed / extensionsRequired
  • Nesne gövdesinde extensions yerleşimi
  • Core MR ile ek katman ilişkisi
  • Materyal uzantı kataloğu (özet sözleşme, derin değil)
  • Loader uyumu, Holodepth perspektifleri

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

Kısa ayrım: Extension Sistemi (bu sayfa) «uzantı nasıl yazılır / materyal ailesi haritası» · Uzantılar grubu «tek bir uzantının derin dosya sözleşmesi» · Physical Material «runtime'da nasıl görünür»

Materyal dalı dördüncü soru

Dal Tablo / nesne Soru Sayfa
Materyal 1–3 PBR · textures · slots Core kart, görüntü, bağ PBR · Texture · Slots
Materyal 4 extensions Core dışı hangi özellikler? Extension Sistemi (bu sayfa)
Ayrı grup Draco · Basis · Instancing · Variants Tek uzantı derinliği Uzantılar (Extensions) menüsü

Uzantı nedir? (Format dilinde)

Zihin modeli: standart menü + eklenti sayfası

  • Core glTF sabit menü: her uyumlu loader bunu okur.
  • Extension eklenti sayfası: adı ve şeması ayrı sözleşmedir.
  • Used «menüde bu eklenti geçiyor» ilanı.
  • Required «eklenti yoksa yemek anlamsız» uyarısı.

Uzantı, core JSON şemasına eklenen isimlendirilmiş veri sözleşmesidir. İsim genelde KHR_, EXT_ veya vendor öneki taşır (KHR_materials_clearcoat gibi). Dosya hem kök listede uzantıyı ilan eder hem ilgili nesnede uzantı gövdesini doldurur. İlan yoksa gövde «gizli eklenti» gibi kalır; gövde yoksa ilan boş vaattir.

Extension Sistemi şunların hiçbiri değildir:

  • Three.js plugin / npm paketi değil dosya sözleşmesidir
  • Core PBR'nin yerine geçen «başka format» değil çoğu materyal uzantısı core'u tamamlar
  • Tek bir KHR sayfasının derin kopyası değil harita + mekanizma
  • Runtime feature flag değil loader desteği ayrı katmandır

Core «herkesin konuştuğu dil»dir. Extension «lehçe»dir: bazı okuyucular anlar, bazıları anlamaz. Used/Required, lehçenin zorunlu olup olmadığını söyler.

extensionsUsed ve extensionsRequired

Kök JSON'da (asset yanındaki) iki dizi uzantı yaşam döngüsünü yönetir:

"extensionsUsed": [
  "KHR_materials_clearcoat",
  "KHR_texture_basisu"
],
"extensionsRequired": [
  "KHR_texture_basisu"
]
Used vs Required
Liste Anlam Loader bilmiyorsa
extensionsUsed Dosyada bu uzantıya ait veri var Genelde yok say; core ile devam et
extensionsRequired Uzantı olmadan içerik doğru yorumlanamaz Yüklemeyi reddet / hata ver

Holodepth kuralı: clearcoat çoğu zaman Used yeterlidir (yok sayılırsa düz metal-pürüzlülük kalır). Basis/KTX2 görüntü kaynağı ise sıkça Required'dır (core PNG yolu yoktur). Yanlış Required, eski loader'ları kırar; eksik Required, sessiz yanlış görünüme yol açar.

Required ⊆ Used

Required'taki her ad Used'da da olmalıdır. Used'da olup Required'da olmayan uzantı «isteğe bağlı zenginleştirme»dir. Bu alt küme ilişkisi validator'ların ilk kontrolüdür.

Gövde nereye yazılır?

Uzantı verisi ilgili glTF nesnesinin extensions haritasına, uzantı adı anahtar olacak şekilde konur. Materyal uzantıları tipik olarak materials[i].extensions altındadır:

"materials": [{
  "name": "CarPaint",
  "pbrMetallicRoughness": {
    "baseColorFactor": [0.1, 0.2, 0.6, 1],
    "metallicFactor": 0.9,
    "roughnessFactor": 0.3
  },
  "extensions": {
    "KHR_materials_clearcoat": {
      "clearcoatFactor": 1.0,
      "clearcoatRoughnessFactor": 0.05
    }
  }
}]

Core PBR alanları durur; clearcoat üstüne eklenir. Loader clearcoat bilmiyorsa yalnızca MR'ı okur. Bu, «extension core'u siler» yanılgısını kırar: çoğu KHR_materials_* katman ekler, kartı değiştirmez.

Materyal dışı ev sahipleri (kısa)

Aynı mekanizma mesh, texture, node, root üzerinde de işler. Örnek: Basis texture uzantısı image/texture kaydında; Draco mesh primitive'inde. Bu sayfa materyal ev sahibine odaklanır; diğer ev sahipleri Uzantılar grubu sayfalarında derinleşir.

Core MR + katman modeli

Holodepth materyal okuması iki katmanda ilerler:

  1. Core katman PBR Yapısı: her uyumlu istemci
  2. Extension katmanı isteğe bağlı / zorunlu zenginleştirme

İstisna: KHR_materials_pbrSpecularGlossiness alternatif workflow'tur (diffuse/specular/glossiness). Bazı dosyalarda MR ile birlikte veya yerine görünür; modern hedef MR + yeni KHR_materials_* ailesidir. Specular-glossiness'i «ek clearcoat» sanmayın; farklı parametre dilidir.

Diğer istisna eğilimi: KHR_materials_unlit aydınlatmasız gölgeleme ister; PBR ışık denklemini baypas eder. Kart hâlâ material kaydıdır ama davranış core PBR varsayımından sapar.

Materyal uzantı haritası (özet katalog)

Aşağısı «ne işe yarar / dosyada ne ararsınız» haritasıdır; her satırın formül derinliği runtime veya ayrı uzantı sayfalarındadır. Amaç: export log'unda isim görünce doğru çekmeceyi açmak.

Sık materyal KHR / ilgili uzantılar
Uzantı Kısa rol Not
KHR_materials_clearcoat Şeffaf üst katman (oto boya) Core MR üstüne factor/texture
KHR_materials_sheen Kumaş / kadife yansıması Physical material ailesi
KHR_materials_transmission Işık geçirgenliği (cam) Sıkça volume ile birlikte
KHR_materials_volume Hacim zayıflatma / kalınlık Transmission tamamlayıcısı
KHR_materials_ior Kırılma indisi Dielektrik / cam
KHR_materials_specular Specular renk / güç (MR üstü) Modern specular kontrolü
KHR_materials_iridescence İridisans İnce film etkisi
KHR_materials_anisotropy Yönlü yansıma Tangent ile ilişki (Tangent)
KHR_materials_emissive_strength Emissive güç çarpanı HDR emissive
KHR_materials_unlit Işıksız gölgeleme UI / stylized
KHR_materials_pbrSpecularGlossiness Eski SG workflow Legacy; MR'ye migrate tercih
KHR_materials_variants Primitive ↔ alternatif material Slot'u çoğaltır; derin sayfa Uzantılar'da

Bu liste exhaustif spec kopyası değildir; ekosistemde sık görülen çekmecelerdir. Yeni KHR çıktıkça harita genişler; mekanizma (§2–3) aynı kalır.

Variants: slot'un çoğaltılmış hali

Material Slots core'da her primitive için tek material indeksi verir. KHR_materials_variants aynı primitive için isimli alternatif eşlemeler tanımlar (ör. «Kırmızı boya», «Mavi boya»). Runtime hangi varyantın aktif olduğunu seçer; dosya tüm kartları taşır.

Holodepth ayrımı: variants materyal içeriği değil, eşleme tablosu uzantısıdır. Clearcoat «kartı zenginleştirir»; variants «hangi kartın takılacağını çoğaltır». Bu yüzden Material Slots sayfasında teaser olarak geçti; derin JSON şeması KHR_materials_variants sayfasındadır. Bu sayfada yalnızca aile içi yeri sabitlenir.

Loader uyumu: sessiz düşüş vs sert hata

Uyum senaryoları
Durum Beklenen davranış Semptom
Used, destek var Uzantı uygulanır Clearcoat / cam görünür
Used, destek yok Yok say, core devam «Düz PBR»; hata yok
Required, destek yok Hata / reddet Model yüklenmez
Gövde var, Used yok Geçersiz / belirsiz Validator uyarısı
Used var, gövde yok Boş vaat Destek olsa bile etki yok

Three.js GLTFLoader birçok KHR_materials_*MeshPhysicalMaterial alanlarına map eder; desteklenen küme sürüme göre değişir. Bu sayfa dosya sözleşmesini sabitler; hangi sürümün neyi okuduğu MeshPhysicalMaterial / loader dokümantasyonu işidir.

İsimlendirme ve vendor önekleri

  • KHR_ Khronos onaylı, geniş ekosistem hedefi
  • EXT_ çok satıcılı / ortak ama KHR dışı süreç
  • Vendor (ADOBE_, MSFT_…) tek ekosistem; web loader desteği dar olabilir

Export «çalışıyor» diye vendor uzantısını Required yazmak, hedef platformu kilitleyebilir. Holodepth web dağıtımında: mümkünse KHR materyal ailesi; vendor'ı Used tutup fallback planlayın.

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

Standart anlatım «extensionsUsed listesine yaz» ile biter. Aşağıdakiler üretim gerçekleridir.

Feature parity tuzağı

DCC viewport tüm uzantıları çizer; web viewer yarısını yok sayar. «Export bozuk» sanılır; aslında Used + sessiz düşüş çalışıyordur. Parite tablosu (hangi uzantı hangi loader) pipeline'ın parçası olmalıdır.

Aşırı Required

Clearcoat'u Required yapmak, clearcoat bilmeyen ama MR okuyan istemcileri öldürür. Required'ı «elzem kaynak yolu» (Basis-only image) için saklayın; görsel zenginleştirmeyi Used'da bırakın.

Uzantı yığılması

Aynı material'de clearcoat + transmission + volume + ior birikebilir. Her biri ayrı anahtar; çakışma spec'e göre çözülür. Debug'da tek tek kapatarak (Used'dan çıkarma / gövde silme) hangi katmanın semptom ürettiğini ayırın.

SG zombi dosyaları

Eski asset'ler yalnızca specular-glossiness taşır. Modern loader MR bekler; dönüştürücü (SG→MR) pipeline adımı gerekir. Dosyayı «PBR var» diye açıp SG gövdesini MR sanmak yaygın hatadır: anahtar adına bakın.

İki menü, iki derinlik

Holodepth yan menüsünde Materyal Sistemi → Extension Sistemi (bu sayfa) ile Uzantılar grubu bilinçli ayrılmıştır. İlki «nasıl uzatılır + materyal ailesi»; ikincisi «tek uzantının binary/JSON derinliği». Aynı KHR adını iki yerde görmek çakışma değil, farklı mercektir.

Envanter soruları

Dosya tararken: Used listesi nedir? Required nedir? Hangi materials[i] hangi extension anahtarını taşıyor? Desteklenmeyen Used var mı? Bu dört soru «neden düz görünüyor?» vakasını dakikalar içinde sınıflandırır.

Holodepth içgörüsü

Uzantı debug'unda önce shader'a değil ilan + gövde + zorunluluk üçlüsüne bakın: Used'da mı, material.extensions altında mı, Required mu? Üçü tutarlıysa sorun loader desteğindedir; tutarsızsa dosya sözleşmesi bozuktur.

Materyal Sistemi kapanır; sıradaki dallar

Core Materyal Sistemi dört soruyla tamamlandı: PBR kartı → texture zinciri → primitive slot → extension mekanizması. Sıradaki Holodepth dalları:

  1. Uzantılar grubu Draco, Basis, GPU instancing, materials variants (tek uzantı derin sayfalar)
  2. Animasyon Sistemi Keyframe Mantığı, channels, skinning, morph
  3. Web İçin Kullanım boyut, GLB vs glTF, runtime performans
  4. Runtime MeshPhysicalMaterial

Format okuyucusu özeti: core PBR herkese; extension isteyen zenginleştirme veya alternatif workflow. İlan (Used/Required) + gövde (extensions) olmadan uzantı yoktur.