glTF全解析——materials
glTF的材質部分,使用的是一組參數來定義材質。這些參數為
PBR
的各種參數,包括金屬性和粗糙性等參數。
結構圖
結構圖中展示了
meshs
到
materials
再到
textures
之間的過程。
例子
最簡單的例子
{
"materials": [
{
"name": "gold",
"pbrMetallicRoughness": {
"baseColorFactor": [ 1.000, 0.766, 0.336, 1.0 ],
"metallicFactor": 1.0,
"roughnessFactor": 0.0
}
}
]
}
上述的代碼為最簡單的gltf材質的例子,其中包括了材質的名稱,和PBR的相關參數。
pbrMetallicRoughness
中的
baseColorFactor
為RGBA顔色,
metallicFactor
和
roughnessFactor
為0到1之間的float值。關于這兩個值如何影響材質的就不展開了,可能會寫PBR的相關文章。
加上紋理的例子
{
"materials": [
{
"name": "Material0",
"pbrMetallicRoughness": {
"baseColorFactor": [ 0.5, 0.5, 0.5, 1.0 ],
"baseColorTexture": {
"index": 1,
"texCoord": 1
},
"metallicFactor": 1,
"roughnessFactor": 1,
"metallicRoughnessTexture": {
"index": 2,
"texCoord": 1
}
},
"normalTexture": {
"scale": 2,
"index": 3,
"texCoord": 1
},
"emissiveFactor": [ 0.2, 0.1, 0.0 ]
}
]
}
上述為加上圖檔的
material
的資料結構,可以看到在
pbrMetallicRoughness
中有
metallicRoughnessTexture
和
baseColorTexture
貼圖,但是在一些引擎中分為
metallic
和
metallic
貼圖,這樣直接兩個對應那張
metallicRoughnessTexture
就可以了。對于
baseColorTexture
來說,主要是對應了引擎中的基礎紋理。除了上述貼圖之外,一個
material
中還有
normalTexture
、
occlusionTexture
及
emissiveTexture
這三個結構類似,在texture中會詳細解釋。
其他屬性
{
"materials": [
{
"name": "Material0",
"pbrMetallicRoughness": {
"baseColorFactor": [ 0.5, 0.5, 0.5, 1.0 ],
"metallicFactor": 1,
"roughnessFactor": 1,
},
"doubleSided": true,
"alphaMode": "OPAQUE"
"emissiveFactor": [ 0.2, 0.1, 0.0 ]
}
]
}
其他屬性中主要有
alphaMode
和
doubleSided
,
alphaMode
又有三種模式:
- “OPAQUE”:預設模式,完全不透明,忽略任何的alpha值
- “MASK”:與另一個屬性
,如果小于alphaCutoff
的值則為完全透明,否則為完全不透明。alphaCutoff
值隻有在"MASK"模式中生效,其他模式忽略該值。alphaCutoff
- “BLEND”:混合模式,該模式的顯示效果取決于各個引擎對該屬性的支援。
doubleSided
屬性,是否為雙面貼圖。
雜項——點和線的material
上述的屬性定義的都是三角片面下的各種情況,當物體為一個點或者一條線時。glTF官方沒有給出相關的限制和規範。但是官方也給出了在不同情境的一般處理分為三種情況:
- 有TANRENT和NORMAL的情況下,按照正常的光照模型和法線貼圖進行渲染。
- 沒有TANGENT的情況下,沒有法線貼圖。
- 沒有NORMAL的情況下,隻輸出顔色值,不計算光照。
相關參數
material
類型 | 描述 | 是否必須 | |
---|---|---|---|
name | | 材質名 | No |
extensions | | 材質拓展(draco)用 | No |
extras | | 其他的補充資訊 | No |
pbrMetallicRoughness | | pbr流程的相關參數 | No |
normalTexture | | 法線貼圖 | No |
occlusionTexture | | 遮蔽貼圖對應着AO圖 | No |
emissiveTexture | | 自發光貼圖 | No |
emissiveFactor | | 自發光強度 | No, default: |
alphaMode | | alpha模式 | No, default: |
alphaCutoff | | alpha模式中的"MASK"使用 | No, default: |
doubleSided | | 是否為雙面材質 | No, default: |
pbrMetallicRoughness
類型 | 描述 | 是否必須 | |
---|---|---|---|
baseColorFactor | | 基礎顔色 | No, default: |
baseColorTexture | | 基礎的map的圖檔路徑 | No |
metallicFactor | | 金屬感強度 | No, default: |
roughnessFactor | | 粗糙感強度 | No, default: |
metallicRoughnessTexture | | 金屬或者粗糙度的圖檔 | No |
extensions | | 屬性拓展 | No |
extras | | 附加屬性 | No |
normalTexture
類型 | 描述 | 是否必須 | |
---|---|---|---|
index | | 圖檔的下标 | Yes |
texCoord | | 在primitives.attributes中的位置,如果是0則為TEXCOORD_0 | No, default: |
scale | | 縮放比例,按照 來設定 | No, default: |
extensions | | 拓展的屬性 | No |
extras | | 附加資訊 | No |
occlusionTextureInfo
類型 | 描述 | 是否必須 | |
---|---|---|---|
index | | 圖檔的下标 | Yes |
texCoord | | 在primitives.attributes中的位置,如果是0則為TEXCOORD_0 | No, default: |
strength | | 遮蔽強度 | No, default: |
extensions | | 拓展的屬性 | No |
extras | | 附加資訊 | No |
結束
關于各個的屬性的schema,太多了就不貼上來了,想了解具體的直接去官網看就行。
傳送門:https://github.com/KhronosGroup/glTF/tree/master/specification/2.0