【译】glTF教程:简单材质(十一)

【译】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所示。、


图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资产中定义纹理。纹理的使用将允许定义更复杂和现实的材料。