GLTF文件注解

accessors

访问器,用于描述二进制数据缓冲区中的数据,包括顶点坐标、法线、纹理坐标等。它们是将二进制数据转换成有意义的顶点属性或其它数据的关键组件。

1.bufferView

指示这个accessor所用的bufferView的索引。bufferView定义了从缓冲区读取数据的规则,包括数据的字节偏移、长度等信息。

2.byteOffset

指示从bufferView的起始位置开始的字节偏移量。定义了在bufferView中的数据从哪里开始。

3.componentType

表示数据的二进制数据类型。它的值是一个整数,对应于不同的数据类型,如:

  • 5120BYTE):表示有符号字节数据。
  • 5121UNSIGNED_BYTE):表示无符号字节数据。
  • 5122SHORT):表示有符号短整型数据。
  • 5123UNSIGNED_SHORT):表示无符号短整型数据。
  • 5124INT):表示有符号整型数据。
  • 5125UNSIGNED_INT):表示无符号整型数据。
  • 5126FLOAT):表示浮点型数据。

4.count

指示accessor中包含的数据元素的数量。

5.type

描述数据的类型,有:

SCALAR(标量,表示单个数值)

VEC2(二维向量)

VEC3(三维向量)

VEC4(四维向量)

它决定了如何解释数据的每个元素。

6.max和min

可选属性,指示accessor中数据的最大值和最小值。这些值可以用于确定数据的范围,对于辅助渲染和计算来说非常有用。

bufferViews

用于描述一个二进制数据缓冲区(buffers)的一个视图。它定义了如何从缓冲区中读取数据,包括字节偏移、字节长度、数据布局等信息。

buffersViews是将二进制数据组织成更有意义的数据块的关键部分,通常用于表示模型的几何数据、纹理图像和其它数据。

1.buffer

指示该bufferView所关联的二进制数据缓冲区的索引。这个索引对应于gltf文件中的buffers数组,用于确定所使用的缓冲区。

2.byteOffset

指示从关联的缓冲区的起始位置开始的字节偏移量。它定义了bufferview中的数据从缓冲区的哪个位置开始。

3.byteLength

表示这个bufferView中数据的字节长度。有多少字节的数据包含在视图中。

4.byteStride

可选的属性,表示每个元素的字节步幅。这在处理包含多个元素的数据结构时非常有用,如顶点属性数组或纹理图像数据。

5.target

可选的属性,指示这个bufferView的预期用途。它通常用于表示数据的用于,例如顶点数据、索引数据等。

值包含:

  • 34962ARRAY_BUFFER,表示这个 bufferView 包含顶点数据,通常用于描述顶点坐标、法线、纹理坐标等。
  • 34963ELEMENT_ARRAY_BUFFER,表示这个 bufferView 包含索引数据,通常用于构建三角形或其他几何体的面。

buffers

用于存储二进制数据的缓冲区,这些数据通常包括模型的几何数据、纹理图像、声音、动画等。

1.byteLength

表示缓冲区的总字节长度。告诉解析器有多少字节的数据存储在这个缓冲区中。

2.uri

可选的属性,表示缓冲区数据的URI,通常是相对或绝对文件路径。这可以用于引用外部的二进制数据文件,也可以是嵌入在GLTF文件中的数据的Base64编码。

3.name

可选的属性,为缓冲区提高一个描述性的名称或标识符。

4.mimeType

可选的属性,表示缓冲区数据的MIME类型,通常用于指示数据的类型

extensionUsed

一个字符串数组,用于指示该文件使用了哪些扩展。

images

表示图像资源,通常是纹理图像,这些图像可以用于贴图、材质、环境贴图等渲染操作。

1.uri

图像资源等URI,通常是相对或绝对文件路径。这个URI可以指向包含图像数据的外部文件,也可以包含数据的Base64编码。

2.bufferView

可选的属性,指示包含图像数据的bufferView的索引,这允许图像数据与gltf文件的其它部分共享相同的二进制缓冲区。

materials

用于描述模型的外观和渲染属性。材质定义了模型表面的颜色、反射、透明度、金属度、粗糙度等属性。决定了模型在渲染时的视觉效果。

1.pbrMetallicRoughness

这是一个常见的材质属性,用于描述金属度(metallic)和粗糙度(roughness)的材质模型。它包括以下子属性:

  • baseColorFactor:基础颜色因子,用于表示材质的颜色。
  • baseColorTexture:基础颜色纹理,用于在模型表面贴图颜色。
  • metallicFactor:金属度因子,指示材质的金属程度。
  • roughnessFactor:粗糙度因子,指示材质的表面粗糙度。
  • metallicRoughnessTexture:金属粗糙度纹理,用于在模型表面贴图金属度和粗糙度。

2.normalTexture

法线纹理,用于模拟表面的凹凸效果,增强模型的细节。

3.occlusionTexture

遮挡纹理,用于指示哪些区域在渲染中应该更暗或更亮,通常用于增加遮挡效果。

4.emissiveFactor

自发光因子,表示材质是否自发光以及自发光的颜色

5.emissiveTexture

自发光纹理,用于模拟自发光效果。

6.alphaMode

alpha模式,指示如何处理材质的透明度。可以是OPAQUE(不透明)、MASK(遮罩)或BLEND(混合)

7.alphaCutoff

用于遮罩模式的alpha阈值,决定像素是完全不透明还是完全透明。

8.doubleSided

一个布尔值,指示材质是否是双面渲染,即是否在模型的两侧都显示。

9.name

可选的属性,为材质提供一个描述性的名称或标识符,以帮助开发人员和用户理解材质的用途或内容。

meshes

用于描述三维模型的几何结构。一个 mesh 对象通常包含一个或多个 primitives(原始体),每个 primitive 表示模型的一个离散部分,如一个三角形网格或一个几何体。meshes 定义了模型的物理形状,以及如何呈现这些形状。

  1. primitives:这是一个包含一个或多个 primitive 的数组,每个 primitive 定义了一个几何图形或子部分,如一个三角形网格或一个几何体。每个 primitive 包括了以下属性:

    • attributes:指示几何体的顶点属性,如位置、法线、纹理坐标等。
    • indices:可选的属性,指示定义几何体的索引,用于构建三角形或其他多边形。
    • material:指示应用于几何体的材质。
  2. name:可选的属性,为 mesh 提供一个描述性的名称或标识符,以帮助开发人员和用户理解模型的内容或用途。

    mode

    1. POINTS(值为0):每个顶点都被视为一个单独的点,不会连接成线段或面。这是最简单的绘制模式,用于绘制散点或粒子等。
    2. LINES(值为1):每两个顶点之间都会绘制一条线段。相邻的顶点会被连接成线段。
    3. LINE_LOOP(值为2):绘制一个闭合的线环,最后一个顶点和第一个顶点会连接成一条线段。
    4. LINE_STRIP(值为3):绘制一系列相邻的线段,每个线段由两个相邻的顶点定义。线段之间不会重复使用顶点。
    5. TRIANGLES(值为4):每三个顶点会组成一个三角形,并绘制这些三角形。这是最常见的绘制模式,用于绘制复杂的三维几何体。
    6. TRIANGLE_STRIP(值为5):从第三个顶点开始,每个顶点都与前两个顶点组成一个三角形,形成一个连续的三角形带。
    7. TRIANGLE_FAN(值为6):第一个顶点与后续的每一对相邻顶点一起组成一个三角形,形成一个扇形的三角形序列。

nodes

描述场景中的节点或对象的层次结构。用于构建三维场景,其中包括模型、相机、灯光等各种对象,并定义了这些对象之间的父子关系。从而构建整个场景的层次结构。

  1. name:可选的属性,为节点提供一个描述性的名称或标识符,以帮助开发人员和用户理解节点的内容或用途。
  2. mesh:可选的属性,指示节点关联的 mesh(几何体或模型)。这表示节点是一个包含模型的对象。
  3. camera:可选的属性,指示节点关联的相机。这表示节点是一个相机的位置和方向。
  4. children:可选的属性,是一个包含节点索引的数组,指示了与当前节点关联的子节点。这定义了节点的层次结构。
  5. matrix:可选的属性,表示节点的变换矩阵,用于将节点的位置、旋转和缩放应用于其子节点。这可以用来实现节点的局部变换。
  6. translationrotationscale:这些可选的属性分别表示节点的平移、旋转和缩放,用于将节点的变换应用于其子节点。
  7. skin:可选的属性,指示节点关联的皮肤。这通常用于表示与骨骼动画相关的节点。
  8. weights:可选的属性,表示节点的权重。这通常与节点的模型或几何体一起使用,用于定义节点的变形或形状关键帧动画。

samplers

用于定义纹理采样器,这些采样器控制了纹理图像在渲染中如何采样和呈现。纹理采样器定义了如何处理纹理坐标,以便正确映射纹理到模型表面。

  1. magFilter:纹理的放大过滤器,定义了当纹理被放大时如何处理像素。常见的选项包括 NEAREST(最近邻插值)和 LINEAR(双线性插值)。
  2. minFilter:纹理的缩小过滤器,定义了当纹理被缩小时如何处理像素。常见的选项包括 NEARESTLINEAR,还有 NEAREST_MIPMAP_NEARESTLINEAR_MIPMAP_NEARESTNEAREST_MIPMAP_LINEARLINEAR_MIPMAP_LINEAR 等。
  3. wrapSwrapT:纹理坐标的水平和垂直包裹方式。它们定义了当纹理坐标超出 [0,1] 范围时如何处理。常见的选项包括 CLAMP_TO_EDGE(夹取到边缘)、REPEAT(重复平铺)、MIRRORED_REPEAT(镜像平铺)等。
  4. name:可选的属性,为纹理采样器提供一个描述性的名称或标识符,以帮助开发人员和用户理解采样器的用途或设置。
  5. magFilterminFilter 中的数字:
    • 9728 对应 NEAREST,表示最近邻插值。
    • 9729 对应 LINEAR,表示双线性插值。
    • 9984 对应 NEAREST_MIPMAP_NEAREST,表示最近邻插值和最近邻的 mipmap 等级插值。
    • 9985 对应 LINEAR_MIPMAP_NEAREST,表示双线性插值和最近邻的 mipmap 等级插值。
    • 9986 对应 NEAREST_MIPMAP_LINEAR,表示最近邻插值和线性的 mipmap 等级插值。
    • 9987 对应 LINEAR_MIPMAP_LINEAR,表示双线性插值和线性的 mipmap 等级插值。
  6. wrapSwrapT 中的数字:
    • 33071 对应 CLAMP_TO_EDGE,表示纹理坐标被夹取到边缘。
    • 10497 对应 REPEAT,表示纹理坐标在 [0,1] 范围内重复平铺。
    • 33648 对应 MIRRORED_REPEAT,表示纹理坐标在 [0,1] 范围内镜像平铺。

scenes

用于定义和描述场景图的不同视图或配置。每个scene表示一个具体的渲染场景。可以包含多个节点nodes,这些节点构成了场景的层次结构和内容。

  1. name:可选的属性,为场景提供一个描述性的名称或标识符,以帮助开发人员和用户理解场景的内容或用途。
  2. nodes:这是一个包含节点索引的数组,定义了场景中包含的节点。每个节点索引对应于 nodes 数组中的一个节点,这些节点可以是模型、相机、灯光或其他对象。

textures

用于描述模型或材质使用的纹理图像。纹理图像通常用于贴图,以在模型的表面上添加颜色、纹理、光照等信息。从而实现更真实的渲染效果。

  1. sampler:指示纹理采样器(sampler)的索引,它定义了纹理如何采样和呈现。纹理采样器包括对纹理的过滤、包裹方式等设置。
  2. source:指示纹理图像数据的索引,通常是指向包含实际图像数据的 images 数组的索引。
  3. name:可选的属性,为纹理提供一个描述性的名称或标识符,以帮助开发人员和用户理解纹理的用途或内容。