【译】glTF教程:简单材质(十一)
2019-02-17
一个简单的材料
前面小节中给出的glTF资产示例包含基本场景结构和简单的几何对象。但是它们不包含关于物体外观的信息。如果没有提供此类信息,则鼓励查看器使用“默认”材料呈现对象。正如示例:最小的glTF文件的屏幕截图所示,根据场景中的光照条件,这个默认材质会使对象呈现为均匀的白色或浅灰色。
本节将从一个非常简单的材料示例开始,并解释不同材料属性的影响
这是一个最小的glTF资产与一个简单的材料:
{
"scenes" : [
{
"nodes" : [ 0 ]
}
],
"nodes" : [
{
"mesh" : 0
}
],
"meshes" : [
{
"primitives" : [ {
"attributes" : {
"POSITION" : 1
},
"indices" : 0,
"material" : 0
} ]
}
],
"buffers" : [
{
"uri" : "data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAA=",
"byteLength" : 44
}
],
"bufferViews" : [
{
"buffer" : 0,
"byteOffset" : 0,
"byteLength" : 6,
"target" : 34963
},
{
"buffer" : 0,
"byteOffset" : 8,
"byteLength" : 36,
"target" : 34962
}
],
"accessors" : [
{
"bufferView" : 0,
"byteOffset" : 0,
"componentType" : 5123,
"count" : 3,
"type" : "SCALAR",
"max" : [ 2 ],
"min" : [ 0 ]
},
{
"bufferView" : 1,
"byteOffset" : 0,
"componentType" : 5126,
"count" : 3,
"type" : "VEC3",
"max" : [ 1.0, 1.0, 0.0 ],
"min" : [ 0.0, 0.0, 0.0 ]
}
],
"materials" : [
{
"pbrMetallicRoughness": {
"baseColorFactor": [ 1.000, 0.766, 0.336, 1.0 ],
"metallicFactor": 0.5,
"roughnessFactor": 0.1
}
}
],
"asset" : {
"version" : "2.0"
}
}
渲染时,该资产将显示带有新材质的三角形,如图11a所示。、
材质定义
在glTF JSON中添加了一个新的顶级数组来定义这个材质:materials
数组包含一个元素,该元素定义了材质及其属性:
"materials" : [
{
"pbrMetallicRoughness": {
"baseColorFactor": [ 1.000, 0.766, 0.336, 1.0 ],
"metallicFactor": 0.5,
"roughnessFactor": 0.1
}
}
],
material
的实际定义仅包含pbrMetallicRoughness
对象,该对象在metallic-roughness-model中定义了材料的基本属性。(因此,所有其他材质属性都将具有默认值,稍后将对此进行解释)。metallicFactor
包含材料主色的红、绿、蓝和alpha成分——这里是亮橙色。“金属因子”0.5表示该材料应具有介于金属和非金属材料之间的反射特性。roughnessFactor
使材料不完全像镜面,而是将反射光散射一点。
将材质分配给对象
材料被分配到三角形,即网格。原语,指的是使用其索引的材料:
"meshes" : [
{
"primitives" : [ {
"attributes" : {
"POSITION" : 1
},
"indices" : 0,
"material" : 0
} ]
}
下一节将简要介绍如何在glTF资产中定义纹理。纹理的使用将允许定义更复杂和现实的材料。