粗略地看一下 glTF 2.0 的所有标准属性(顺便说一下,还有 .glb 的结构)

编码

在 glTF 中,场景和各种对象的定义一般用 JSON 来描述,而顶点数据等所谓的"缓冲区"部分则以二进制形式存储。 对于这些内容的最终编码方式,有多种选择。

  • . gltf (JSON) + .bin (二进制缓冲区) (+ 图像文件)

  • 如何分离 JSON 和二进制部分。 二进制部分可以分为多个部分。

  • 纹理可以位于单独的图像文件中,也可以位于二进制缓冲区中。

  • 二进制部分也可以合并为 .gltf (JSON)

  • 您可以使用 Data URI 方案将二进制缓冲区放入 URI 中。 示例)uri="data:application/octet-stream;base64,xxxxxxxxxxxxxxx

  • .glb (将所有二进制文件固化为一个二进制文件)

  • 仅由一个 .glb (二进制文件) 表示。

  • 一个非常简单的标头、一个 JSON 块和一个简单的格式,它看起来几乎是按原样附加的二进制缓冲区块。 稍后将介绍该结构。

JSON 部分的内容

谨慎

尽管在以下 JSON 结构描述中省略了以下数据,但以下数据可以包含在 JSON 的所有对象层次结构中。

  • extensions

  • 使用 glTF 扩展写入。 它可以被任何物体持有。

  • extras

  • 用户定义的任意数据。 它可以被任何物体持有。

glTF 的结构

以下是注意事项 (TODO):

  • 我希望类型信息更准确一些

  • 它不指示需要哪些属性

扩展

  • extensionsRequired --- 列出使用此资产时的基本扩展

  • extensionsUsed --- 列出此资产使用的扩展

元数据

  • asset

  • version: "2.0"

  • generator:字符串

  • copyright:字符串

  • minVersion:字符串

围绕场景图

  • scene: id --- 默认场景 ID

  • scenes: \[\] 场景

  • name:字符串

  • nodes: \[\]Id --- 列出节点的根节点

  • nodes: \[\]节点

  • name:字符串

  • children: \[\] ID

  • mesh: ID

  • camera: ID

  • skin: ID

  • matrix: 16编号

  • rotation: 4number --- 旋转的四元数

  • translation: 3编号

  • scale: 3编号

  • weights: \[\]Id --- 实例化变形目标的权重。 您需要多个目标

  • extensions (仅标明 KHR_*。

  • EXT_mesh_gpu_instancing

对象

  • meshes: \[\]Mesh --- 网格

  • name:字符串

  • primitives (\[\]原始)

  • attributes --- Vertex 数据访问器

  • 位置: Id

  • TEXCOORD_n:Id

  • COLOR_n:Id

  • NORMAL:id

  • TANGENT:Id

  • JOINTS_n:Id

  • WEIGHTS_n:Id

  • (↑ 这些基于 OpenGL 约定,但 glTF 是一个规范名称。

  • 还允许使用其他自定义属性。

  • indices: Id --- 顶点索引的访问者。 如果未指定,则将其解释为未编制索引的顶点。

  • material: ID

  • mode --- 0 (点), 1 (线条), 2 (LINE_LOOP), 3 (LINE_STRIP), 4 (三角形), 5 (TRIANGLE_STRIP), 6 (TRIANGLE_FAN)

  • targets --- 变形目标

  • 位置: Id

  • TEXCOORD_n:Id

  • NORMAL:id

  • 等。

  • extensions (仅标明 KHR_*。

  • KHR_mesh_quantization

  • KHR_draco_mesh_compression

  • weights --- 变形目标的权重。 您需要多个目标

  • skins (\[\]Skin) --- 用于蒙皮的关节和逆绑定矩阵 (IBM)

  • name

  • skeleton --- 用作骨架根的节点

  • joints - 要用作关节的节点列表

  • inverseBindMatrices --- 要用作逆绑定矩阵 (IBM) 的 4x4 矩阵的访问器。 IBM 需要关节分钟。

  • cameras (\[\]相机)

  • type - 透视或正交

  • orthographic

  • xmag: 1

  • ymag: 1

  • zfar: 100

  • znear: 0.01

  • perspective

  • aspectRatio: 1,

  • yfov: 0.7853981633974483,

  • zfar: 100,

  • znear: 0.01,

浅色(扩展):

动画

  • animations (\[\]动画)

  • name

  • channels

  • sampler: ID

  • target --- 动画中要更改的对象。 目前仅支持控制节点的 TRS 和权重。

  • node: ID

  • path: "翻译" | "旋转" | "scale" | "权重"

  • samplers (\[\]采样器)

  • input: id --- 表示关键帧时间戳列(浮点标量)的访问器的 ID

  • output: Id --- 访问器的 ID,表示每个时间戳的输出值

  • interpolation: "线性" | "STEP" | "CUBICSPLINE"(三次样条)

材料

  • materials (\[\]材料)

  • name

  • doubleSided: bool --- 是否显示两侧(禁用背面剔除)。

  • pbrMetallicRoughness

  • baseColorFactor

  • metallicFactor

  • roughnessFactor

  • baseColorTexture

  • index: ID

  • texCoord: 整数 (TEXCOORD_n 中包含 n)

  • metallicRoughnessTexture

  • index: ID

  • texCoord: 整数 (TEXCOORD_n 中包含 n)

  • alphaCutOff

  • alphaMode: "不透明" | "面具" | "混合"

  • emissiveFactor

  • emissiveTexture

  • index

  • texCoord: 整数 (TEXCOORD_n 中包含 n)

  • normalTexture - 用于法线贴图

  • index

  • texCoord: 整数 (TEXCOORD_n 中包含 n)

  • scale

  • occulusionTexture -- 用于遮挡映射

  • index

  • texCoord: 整数 (TEXCOORD_n 中包含 n)

  • strength

  • scale

相关推荐
cyadyx1 天前
【Three.js】Three.js 中加载 3D 模型
前端·javascript·3d
chaoyuanl2 天前
悬空玻璃剧场源头厂家选型全解析|270°裸眼3D悬空玻璃剧场投资避坑指南
大数据·人工智能·3d·xr·娱乐·mr
在下胡三汉2 天前
GLTF vs OBJ vs FBX vs GLB:选择合适的 3D 文件格式,怎么获取下载
3d
fanfan_hongyun2 天前
Cesium for unity (可加载3dTileset)
3d
鲲穹AI种草2 天前
家装设计工具记录:多款室内 3D 设计工具能力边界整理
3d·家装设计工具
杀生丸学AI2 天前
【前馈三维重建】SAF3R:前馈式3D重建Transformer的动态稀疏注意力(加速)
深度学习·3d·transformer
2601_950760792 天前
3D细胞活力检测技术:从传统方法到三维体系的跨越
人工智能·3d·蛋白
牛企老板俱乐部2 天前
广东手板3D打印三大核心产区 采购视角看珠海深圳东莞
3d
数智工坊3 天前
SAMosaic3D:以可学习马赛克组装实现实时在线3D实例分割 | CVPR 2026 论文精读
学习·3d
tzc_fly3 天前
KDD 2026 | PRIME:一种用于从头设计binder的 3D 分子模型
3d·binder