3D Model Formatları · glTF / GLB · Materyal Sistemi
PBR Yapısı glTF'de pbrMetallicRoughness
Nedir?
Model «metalik değil» veya «fazla parlak» görünüyorsa sorun çoğu zaman
shader'da değil; metallicFactor / roughnessFactor veya MR doku
kanal paketlemesindedir.
UV
Kanalları doku adresini kapattı; Materyal Sistemi'nin ilk sorusu şudur:
yüzey parametreleri dosyada nasıl saklanır?
Holodepth'te geometri hattı (POSITION … TEXCOORD_n) «mesh ne
taşır?» sorusunu yanıtlar. Materyal dalı «bu mesh'e hangi yüzey sözleşmesi uygulanır?»
sorusunu yanıtlar. glTF 2.0 core'da varsayılan cevap
metalik-pürüzlülük PBRdır: materials[i].pbrMetallicRoughness
nesnesi. Bu sayfa o nesnenin alanlarını, factor/doku çarpımını ve alpha/emissive
sınırlarını format dilinde sabitler.
Sayfayı bitirdiğinizde şu cümleyi kurabilmelisiniz:
«glTF PBR, baseColorFactor + isteğe bağlı baseColorTexture
ile renk verir; metallicFactor ve roughnessFactor skaler
veya metallicRoughnessTexture içinde G/B kanallarıyla gelir. Normal ve
occlusion ayrı textureInfo köprüleridir; görüntü dosyası bu sayfada
değil, Texture Referansları dalındadır.»
Bu sayfanın sınırı · komşu konularla ayrım
Bu sayfa yalnızca glTF pbrMetallicRoughness ve
materyal üst alanlarını (alphaMode, doubleSided,
emissive*) anlatır:
- Factor alanları ve varsayılan değerler
- Materyal üzerindeki textureInfo köprüleri (hangi slot, hangi anlam)
- MR doku kanal paketleme (G/B)
- Factor × texture çarpım kuralı
- Holodepth perspektifleri ve sonraki materyal adımları
Bilinçli olarak dışarıda bırakılan konular:
- PBR ışık denklemi, enerji korunumu, IBL → MeshStandardMaterial · PBR zihin modeli
- Albedo / roughness / metalness «ne işe yarar» sanat dili → Albedo, Roughness, Metalness
images/textures/samplerszinciri → Texture Referansları- Primitive ↔ material indeksi → Material Slots
KHR_materials_pbrSpecularGlossiness, clearcoat, sheen → Extension Sistemi- Loader → Three.js material atama → Material mapping
Kısa ayrım: PBR Yapısı (Format) «JSON'da hangi alanlar var?» · MeshStandardMaterial (Runtime) «shader bu alanları nasıl yorumlar?» · Texture Referansları «görüntü binary'si nerede?»
Materyal dalı ilk soru
| Dal | Tablo / nesne | Soru | Sayfa |
|---|---|---|---|
| Geometri (bitti) | TEXCOORD_n |
Texel nereden örneklenir? | UV Kanalları |
| Materyal 1 | pbrMetallicRoughness |
Yüzey hangi PBR parametrelerini taşır? | PBR Yapısı (bu sayfa) |
| Materyal 2 | textures / images |
Görüntü nerede, sampler nasıl? | Texture Referansları |
| Materyal 3 | mesh.primitive.material |
Hangi parça hangi materyali kullanır? | Material Slots |
| Materyal 4 | extensions |
Core dışı hangi özellikler? | Extension Sistemi |
PBR nedir? (Format dilinde)
Zihin modeli: yüzey «parametre kartı»
- Geometri şekil ve adres taşır (vertex attribute'lar).
- Materyal yüzey davranış kartıdır (factor + texture köprüleri).
- pbrMetallicRoughness glTF 2.0'ın varsayılan kart şablonudur.
- Shader kartı okur; kart shader değildir.
PBR (Physically Based Rendering) terimi sanat ve engine dünyasında geniş bir ailedir. glTF dosyasında ise dar ve yazılabilir bir anlama indirgenir: belirli JSON alanları ve bunların texture köprüleri. Dosyayı açtığınızda «fiziksel doğruluk» taahhüdü değil, alan sözleşmesi görürsünüz: base color, metalness, roughness, normal, occlusion, emissive.
PBR Yapısı şunların hiçbiri değildir:
- Shader kaynağı değil GLSL/WGSL burada yok
- Doku dosyası değil PNG/KTX2 Texture Referansları dalında
- Phong/Lambert legacy değil core workflow MR'dır; specular-glossiness extension'dır
- Işık kurulumu değil sahne
lightstablosu ayrı konu
Geometri «nerede ve nasıl örneklenir?» sorusunu kapatır. PBR Yapısı «örneklenen texel bu yüzeyde ne anlama gelir?» sorusunun parametre kısmını yanıtlar; görüntünün kendisi bir sonraki adımdadır.
pbrMetallicRoughness
nesnesi
materials dizisindeki her kayıt bir yüzey tanımıdır. glTF 2.0 core'da ana
gövde pbrMetallicRoughness alt nesnesidir; üst seviyede
normalTexture, occlusionTexture, emissiveTexture,
alphaMode, doubleSided gibi alanlar materyal kökünde durur.
JSON yapı blokları bu tabloyu «organizasyon» katmanında
listeler; bu sayfa alan anlamını doldurur.
"materials": [{
"name": "Body_PBR",
"pbrMetallicRoughness": {
"baseColorFactor": [0.8, 0.8, 0.8, 1.0],
"metallicFactor": 0.0,
"roughnessFactor": 0.6,
"baseColorTexture": { "index": 0, "texCoord": 0 },
"metallicRoughnessTexture": { "index": 1, "texCoord": 0 }
},
"normalTexture": { "index": 2, "texCoord": 0, "scale": 1.0 },
"occlusionTexture": { "index": 3, "texCoord": 0, "strength": 1.0 },
"emissiveFactor": [0, 0, 0],
"alphaMode": "OPAQUE",
"doubleSided": false
}]
Dikkat: index burada texture tablosuna işaret eder; görüntü URI'si veya
buffer chunk'ı bu örnekte görünmez. Holodepth kuralı: PBR Yapısı «hangi slotlar var»
der; Texture Referansları «o indeksler nereye çözülür» der.
Core MR vs extension workflow
Eski veya DCC export'ları bazen KHR_materials_pbrSpecularGlossiness
kullanır (diffuse + specular + glossiness). glTF 2.0 varsayılanı
metalik-pürüzlülüktür. Dosyada hangi workflow'un aktif olduğunu extension listesinden
okursunuz; iki workflow'u aynı materyalde «karışık» sanmayın. Modern hedef MR + yeni
KHR_materials_* ailesidir; ayrıntı
Extension
Sistemi · core vs katman bölümündedir. Burada yalnızca «core okuyucu MR
bekler» notu yeterlidir.
Factor alanları: skaler sözleşme
Factor alanları doku olmadan da materyali tanımlayabilir: düz renkli plastik, tam metal, mat yüzey. Her factor'ın spec'te varsayılanı vardır; eksik alan «sıfır» değil, varsayılan demektir.
| Alan | Tip | Varsayılan | Anlam (format) |
|---|---|---|---|
baseColorFactor |
RGBA [r,g,b,a] |
[1,1,1,1] |
Albedo çarpanı + alpha kaynağı (alphaMode ile) |
metallicFactor |
sayı | 1 |
Metaliklik skaleri (0 dielektrik … 1 metal) |
roughnessFactor |
sayı | 1 |
Pürüzlülük skaleri (0 ayna … 1 mat) |
emissiveFactor |
RGB | [0,0,0] |
Emissive çarpanı (materyal kökünde) |
Holodepth uyarısı: metallicFactor ve roughnessFactor
varsayılanı 1'dir. Doku yokken «gri plastik» bekleyip dosyada factor
yazmamak, export'ta tam metal + tam mat sözleşmesine düşmenize neden
olabilir. Factor-only materyallerde her alanı bilinçli yazmak iyi pratiktir.
baseColorFactor dördüncü bileşeni (a) alpha için kaynaktır;
alphaMode bunu nasıl kullanacağını §6'da sabitler. Vertex rengi
(COLOR_0) ile çarpım loader/engine tarafında olabilir; glTF core'da
ayrı alan değildir, fakat «factor yeterli» sanığını bozar.
Materyal texture köprüleri
PBR Yapısı'nda texture alanları textureInfo nesnesidir: index
(hangi texture kaydı), isteğe bağlı texCoord (hangi UV seti). Bu köprü
UV Kanalları bölümünde geometri tarafından
tanıtılmıştı; burada materyal slot anlamı ön plandadır.
| Alan | Konum | Rol |
|---|---|---|
baseColorTexture |
pbrMetallicRoughness |
Albedo + alpha (RGBA) |
metallicRoughnessTexture |
pbrMetallicRoughness |
Metaliklik (B) + pürüzlülük (G) |
normalTexture |
materyal kökü | Tangent-space normal; scale isteğe bağlı |
occlusionTexture |
materyal kökü | AO (R kanalı); strength isteğe bağlı |
emissiveTexture |
materyal kökü | Emissive RGB |
Normal map «ne işe yarar» ve TBN gereksinimi
Tangent Data ile
Normal Map sayfalarındadır. Format sorusu: materyalde
normalTexture var mı, texCoord kaç, geometride
TANGENT var mı?
metallicRoughnessTexture
kanal paketleme
glTF, metaliklik ve pürüzlülüğü tek RGBA görüntüde paketler. Spec kuralı (core):
- Yeşil (G) → roughness
- Mavi (B) → metallic
- Kırmızı (R) → kullanılmaz (çoğu bake'te 0 veya atıl)
- Alpha (A) → kullanılmaz
Bu paketleme Unity/Unreal ayrı grayscale metal/rough dosyalarından farklıdır. DCC export «yanlış kanala yazdı»ysa model web'de «metalik ama mat» veya «plastik ama ayna» görünür; shader bozuk değil, kanal sözleşmesi bozuktur.
// Kavramsal örnekleme (fragment)
roughness = roughnessFactor * mrSample.g;
metallic = metallicFactor * mrSample.b;
baseColor = baseColorFactor * baseColorSample.rgb;
Holodepth içgörüsü: MR dokusunu Photoshop'ta «RGB aynı» diye kontrol etmek yeterli değildir; G ve B kanallarını ayrı inceleyin. Tek kanallı metal map'i doğrudan baseColor gibi bağlamak sık hata desenidir.
alphaMode, şeffaflık ve
emissive
Materyal kökündeki alphaMode üç değer alır:
OPAQUE(varsayılan) alpha yok sayılırMASKalphaCutoffile ikili maskelemeBLENDalpha karışımı (sıralama runtime sorunu)
Alpha kaynağı baseColorFactor.a ve/veya baseColorTexture
alpha kanalıdır. Format dosyası «blend kullan» der; doğru çizim sırası
glTF'de tanımlı değildir bu engine/runtime konusudur. MASK modunda cutoff eksikse
varsayılan 0.5 kullanılır.
doubleSided tek bitlik sözleşmedir: true ise arka yüz culling
kapatılır (veya iki taraf render edilir). PBR parametreleri ön/arka için ayrılmaz; çift
taraflı cam ile çift taraflı opak plastik aynı JSON alanıyla ifade edilir, görünüm
shader'a kalır.
emissiveFactor ve emissiveTexture ışık yansıtması
değil, yüzeyin kendi yaydığı renktir (HDR değerler olabilir). IBL veya
lights tablosu ile karıştırılmamalıdır.
Factor × texture çarpımı
glTF PBR'da factor ve texture çarpılır; biri diğerinin yerine geçmez.
Doku tam beyaz (1) ise factor tek başına belirleyicidir. Factor
[1,1,1,1] iken doku devrededir. İkisi de varsayılanda «export hiç dokuya
bakmadım» anlamına gelmez: metallic/roughness varsayılanı 1'dir.
Normal ve occlusion için ek skalerler vardır: normalTexture.scale,
occlusionTexture.strength. Bunlar örneklenen değeri modüle eder; format
okuyucusu «texture var + scale kaç» diye okur.
Eksik texture tuzakları
- Sadece MR texture, factor 1: tam metal + tam mat riski
- Sadece baseColorTexture, metallic 1: renkli «metal» beklentisi
- normalTexture var, TANGENT yok: format uyumsuzluğu (geometri)
- occlusion R kanalı boş: AO etkisiz kalır
Holodepth perspektifleri çoğu dokümanda olmayan açılar
Standart anlatım «baseColor, metallic, roughness vardır» ile biter. Aşağıdaki başlıklar üretim ve validator/debug'da sık görülür.
Varsayılan metallic = 1 tuzağı
Factor yazılmayan materyal «nötr plastik» değildir; spec varsayılanı metalik uçtadır. Özellikle factor-only test küplerinde bu, «her şey metal» algısı yaratır. Export şablonlarında metallic/roughness'ı açıkça sıfırlamak format okuryazarlığıdır.
MR dokusu albedo değildir
Gri tonlu metal/rough paketini baseColorTexture slotuna koymak yaygın
hatadır. Renk doğru görünür, metaliklik yanlış kalır. Slot anlamı JSON alan adıyla
sabitlenir; görsel benzerlik güvenilmez.
AO'yu roughness sanma
occlusionTexture yalnızca R kanalındadır ve ayrı strength
taşır. Bake'te AO ile roughness birleştirilip tek grayscale verilirse, format'ta hangi
slota yazıldığına bakmadan düzeltmek zordur. Holodepth: bake çıktısını slot adına göre
adlandırın, kanala göre değil.
Dosya ortam ışığı taşımaz (core)
PBR parametreleri dosyada tamdır; fakat metalik yüzeylerin «gerçekçi» görünmesi runtime IBL/PMREM'e bağlıdır. Bu, format eksikliği değildir: glTF core materyal kartıdır, sahne aydınlatması Environment & HDRI kanalındadır. Aynı GLB, farklı ortamda farklı «metaliklik» hissi verebilir; JSON değişmemiştir.
Tek material kaydı, çok primitive
materials[2] on primitive tarafından referanslanabilir. PBR alanları
paylaşılır; UV adresi geometri tarafındadır. «Aynı materyal, farklı UV» kombinasyonu
mümkündür; görünüm farkı adres kaynaklıdır, materyal kopyası gerekmeyebilir.
Validator perspektifi
Tutarlı PBR JSON'u şu sorularla hızlı taranır: texture index geçerli mi,
texCoord geometride var mı, alphaMode blend iken sıralama
planlandı mı, MR kanalları gerçekten G/B mi? Bu sayfa insan okuyucusu içindir; otomasyon
aynı alan adlarını kullanır.
Holodepth içgörüsü
PBR debug'unda önce shader'a değil JSON kartına bakın: factor
varsayılanları, MR G/B kanalları, baseColor alpha, normal/occlusion slotları,
texCoord eşleşmesi. Bu beş kontrol, «yanlış materyal» vakalarının
çoğunu dosya aşamasında kapatır.
PBR'den sonra: texture zinciri ve slotlar
pbrMetallicRoughness «hangi parametreler ve hangi texture köprüleri» sorusunu
yanıtlar. Sıradaki Materyal Sistemi adımları:
- Texture Referansları
images,textures,samplersve URI/chunk çözümü (Texture Referansları) - Material Slots
mesh.primitive.materialindeks dili (Material Slots) - Extension Sistemi clearcoat, sheen, specular, variants (Extension Sistemi)
- Runtime köprüsü Texture binding ve material mapping
Format okuyucusu özeti: geometri attribute'ları → PBR kartı → texture tabloları → primitive material indeksi → extension. PBR Yapısı, kartın şemasıdır; görüntü byte'ları henüz devreye girmez.