glTF全解析——materials

it2022-05-09  27

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的值则为完全透明,否则为完全不透明。alphaCutoff值只有在"MASK"模式中生效,其他模式忽略该值。“BLEND”:混合模式,该模式的显示效果取决于各个引擎对该属性的支持。

doubleSided属性,是否为双面贴图。

杂项——点和线的material

上述的属性定义的都是三角片面下的各种情况,当物体为一个点或者一条线时。glTF官方没有给出相关的约束和规范。但是官方也给出了在不同情境的一般处理分为三种情况:

有TANRENT和NORMAL的情况下,按照正常的光照模型和法线贴图进行渲染。没有TANGENT的情况下,没有法线贴图。没有NORMAL的情况下,只输出颜色值,不计算光照。

相关参数

material

类型描述是否必须namestring材质名Noextensionsobject材质拓展(draco)用Noextrasany其他的补充信息NopbrMetallicRoughnessobjectpbr流程的相关参数NonormalTextureobject法线贴图NoocclusionTextureobject遮蔽贴图对应着AO图NoemissiveTextureobject自发光贴图NoemissiveFactornumber [3]自发光强度No, default: [0,0,0]alphaModestringalpha模式No, default: "OPAQUE"alphaCutoffnumberalpha模式中的"MASK"使用No, default: 0.5doubleSidedboolean是否为双面材质No, default: false

pbrMetallicRoughness

类型描述是否必须baseColorFactornumber [4]基础颜色No, default: [1,1,1,1]baseColorTextureobject基础的map的图片路径NometallicFactornumber金属感强度No, default: 1roughnessFactornumber粗糙感强度No, default: 1metallicRoughnessTextureobject金属或者粗糙度的图片Noextensionsobject属性拓展Noextrasany附加属性No

normalTexture

类型描述是否必须indexinteger图片的下标YestexCoordinteger在primitives.attributes中的位置,如果是0则为TEXCOORD_0No, default: 0scalenumber缩放比例,按照scaledNormal = normalize((<sampled normal texture value> * 2.0 - 1.0) * vec3(<normal scale>, <normal scale>, 1.0))来设置No, default: 1extensionsobject拓展的属性Noextrasany附加信息No

occlusionTextureInfo

类型描述是否必须indexinteger图片的下标YestexCoordinteger在primitives.attributes中的位置,如果是0则为TEXCOORD_0No, default: 0strengthnumber遮蔽强度No, default: 1extensionsobject拓展的属性Noextrasany附加信息No

结束

关于各个的属性的schema,太多了就不贴上来了,想了解具体的直接去官网看就行。 传送门:https://github.com/KhronosGroup/glTF/tree/master/specification/2.0


最新回复(0)