编码
在 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: [4]number --- 旋转的四元数
-
translation: [3]编号
-
scale: [3]编号
-
weights: []Id --- 实例化变形目标的权重。 您需要多个目标
-
extensions (仅标明 KHR_*。
对象
-
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_*。
-
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,
浅色(扩展):
-
extensions (仅显示 KHR_*)
动画
-
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