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
extensionsyerleş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:
- Core
pbrMetallicRoughnessalanları → PBR Yapısı - Texture / image zinciri → Texture Referansları
- Primitive material indeksi → Material Slots
KHR_draco_mesh_compressionderinliği → Draco Mesh CompressionKHR_texture_basisu/ KTX2 derinliği → KHR_texture_basisu ve KTX2 (Runtime)EXT_mesh_gpu_instancing→ Uzantılar grubu- Clearcoat/transmission shader davranışı → MeshPhysicalMaterial
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"
]
| 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:
- Core katman PBR Yapısı: her uyumlu istemci
- 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.
| 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
| 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 hedefiEXT_ç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ı:
- Uzantılar grubu Draco, Basis, GPU instancing, materials variants (tek uzantı derin sayfalar)
- Animasyon Sistemi Keyframe Mantığı, channels, skinning, morph
- Web İçin Kullanım boyut, GLB vs glTF, runtime performans
- Runtime MeshPhysicalMaterial
Format okuyucusu özeti: core PBR herkese; extension isteyen zenginleştirme veya alternatif workflow. İlan (Used/Required) + gövde (
extensions) olmadan uzantı yoktur.