aspose.info
ZH

GLB

更新于

什么是一 .glb 文件?

GLB 是以 GL 传输格式 (glTF) 保存的 3D 模型的二进制文件格式表示。有关 3D 模型的信息,例如二进制格式的节点层次结构、相机、材质、动画和网格。这种二进制格式将 glTF 资产(JSON、.bin 和图像)存储在二进制 blob 中。它还避免了在 glTF 的情况下发生的文件大小增加的问题。 GLB 文件格式导致文件大小紧凑、加载速度快、完整的 3D 场景表示以及进一步开发的可扩展性。该格式使用 model/gltf-binary 作为 MIME 类型。

GLB 文件格式 - 更多信息

glTF 使用的内容交付方法导致对 base-64 编码的二进制数据进行解码的额外处理,并且还将文件大小增加了 33%。这些交付方式促成了 GLB 文件格式的形成,包括:

  • glTF JSON 指向外部二进制数据(几何、关键帧、皮肤)和图像。
  • glTF JSON 嵌入 base64 编码的二进制数据,并使用数据 URI 内联图像。

GLB 作为一种容器格式被引入为二进制文件格式,用于在二进制 blob 中表示 glTF 资产,以避免由 glTF 引起的问题。 GLB 文件格式 规范 应参考用于应用程序开发的任何读取器/写入器实现.

GLB 文件结构

GLB文件格式是基于little endian的,其结构表明它包含:

  • 一个 12 字节的前导码,标题为标题。
  • 一个或多个包含 JSON 内容和二进制数据的块。

标题

GLB 文件格式标头由三个 4 字节条目组成:

  • uint32 魔法 - 魔法等于 0x46546C67。它是 ASCII 字符串 glTF,可用于将数据识别为二进制 glTF
  • uint32 version - 表示 Binary glTF 容器格式的版本
  • uin32 length - Binary glTF 的总长度,包括 Header 和所有块(以字节为单位)

块

GLB 文件中的每个块都具有以下结构:

uint32uint32ubyte[]
chunkLengthchunkTypechunkData
  • chunkLength - chunkData 的字节长度
  • chunkType - 表示块的类型
  • chunkData - 块的二进制有效载荷

块类型是:

#块类型ASCII描述出现次数
1.0x4E4F534AJSON结构化 JSON 内容1
2.0x004E4942BIN二进制缓冲区0 或 1

每个块的开始和结束必须与 4 字节边界对齐,为此应使用填充。

结构化 JSON 内容

这应该是二进制 glTF 资产的第一个块,并使实现能够从后续块中逐步检索资源。这还提供了从二进制 glTF 资产(例如网格的最粗略 LOD)中仅读取选定资源子集的能力。为了满足对齐要求,这个块必须用尾随空格字符(0x20)填充。

二进制缓冲区#####

该块包含几何、动画关键帧、皮肤和图像的二进制有效负载。它应该是二进制 glTF 资产的第二个块,并且必须用尾随零 (0x00) 填充以满足对齐要求。

参考 ##

另请参阅