glTF基本结构

glTF是一种针对GL接口的运行时3D资产格式,用于高效、可扩展的内容传输。它包括JSON文件、二进制数据和纹理图像。资产由场景、节点、网格、材质、摄像机、动画等组成,支持基于物理渲染的材料表示和关节蒙皮动画。glTF是3D Tiles的基础,后者是为大量地理3D数据流式传输设计的格式,常用于Cesium框架。

一、概述

  1. glTF的全称是GL传输格式,是一种针对GL(WebGL,OpenGL ES以及OpenGL)接口的运行时资产(asset)。在3D内容的传输和加载中,glTF通过提供一种高效,易扩展,可协作的格式,填补了3D建模工具和现代GL应用之间的空白。

  2. glTF资产是JSON文件,另外还支持外部数据。具体而言,glTF资产表示为:

    • JSON格式的文件(.gltf ),其中包含完整的场景描述:节点层次结构,材质,照相机以及网格,动画和其他构造的描述符信息
    • 包含几何和动画数据以及其他基于缓冲区的数据的二进制文件(.bin )
    • 用于纹理的图像文件(.jpg ,.png )
  3. glTF资产包含零个或多个场景,scene.nodes数组中所有的节点都必须是根节点。

  4. 节点层次结构使用children属性来定义,如"childredn":[1,2,3,4]

  5. 节点通过matrix属性和rotation、scale、translation属性来定义空间变换。ratation属性是单位四元数值(x,y,z,w),如"rotation":[0,0,0,1];scaletranslatiion属性是单位三元数值,如"scale":[1,1,1]、"translation":[-17,-11,2]

  6. buffer存储二进制数据,包含几何体、网格、动画和蒙皮等大数据文件,并通过访问器(accessor)进行检索。"byteLength"指定缓存文件的大小,"uri"属性是URIbuffer的数据,buffer数据也可以作为base64编码的数据存储在glTF文件中,并通过URI进行引用。

  7. "bufferView"表示数据在buffer中的子集,glTF文件中的对象不会直接访问bufferbufferView,而是通过Accessor访问器来访问。

二、基础结构

1)scene:场景入口,由node构成树结构

2)node:场景层级中的一个节点,包含变换,可以有子节点。node通过指向mesh,camera,skin来描述Node的形变
在这里插入图片描述
3)camera:定义渲染场景的视点配置

4)mesh:描述场景中的几何物体,通过accessor来访问;通过扩展网格概念来定义变形目标,变形目标是可变的网格,其通过Mesh primitives中定义的targets属性实现,通常仅支持三个属性POSITION(位置位移),NORMAL(法线位移)和TANGENT(切线位移)。

5)skin:蒙皮的网格是用顶点属性定义的,影响一个顶点的关节数限制为每组4个,因此访问器必须具有VEC4类型。

所有的关节值必须在皮肤的关节范围内,未使用的关节值应设置未零。
用于控制蒙皮网格的关节层次结构是glTF节点层次结构,每个节点都指定为关节。

6)texture:glTF将纹理访问分为三种不同的对象类型:纹理,图像和采样器。

7)material:glTF使用基于物理渲染(PBR)广泛使用的材料表示一组通用参数来定义材料。

8)camera:摄影机定义了从视图到剪辑坐标的投影矩阵,投影分为透视图和正射投影。摄像机包含在节点中,因此可以进行转换。

摄像机存储在资产的cameras中,每个摄像机都定义了一个type属性,该属性指定投影的类型(透视或正交)。

9)animation:glTF通过节点变换的关键帧动画支持关节动画和蒙皮动画,关键帧数据存储在缓存中,并通过访问器在动画中引用。
动画储存在资产的animations中,每个动画定义了通道和采样器,这些采样器使用关键帧数据和插值方法指定访问器

10)extensions:任何glTF对象都可以具有可选的extensions属性。

三、与3D Tiles的联系

  1. glTF是与API无关的3D资产运行时资产交付格式;3D Tiles是在glTF的基础上,加入了分层LOD的结构后得到的产品,专门为大量地理3D数据流式传输和海量渲染而设计的一种格式,是目前大火的开源WebGL框架Cesium的御用格式。

  2. 批处理3D模型(b3dm)和实例3D模型(i3dm)格式基于glTF建立,glTF是为有效传输3D内容而设计的开放规范。这些格式的图块内容在二进制主体中嵌入了glTF资源,其中包含模型几何和纹理信息。点云格式未嵌入glTF。

  3. glTF使用URI来引用缓冲区和图像资源。

  4. 数据类型分为两类:type和componentType。

    • type属性用来表明数据元素是标量(SCALLAR)、矢量(VEC3)还是矩阵(MAT4
    • componentType属性用来表明数据类型,如512为FLOAT类型
04-02
### GLTF 文件格式简介 GLTF(Graphics Language Transmission Format)是一种用于传输和存储三维场景和模型的开放标准文件格式。它旨在提供一种高效、易于使用的解决方案来交换3D内容[^1]。 #### JSON 和 GLB 的区别 GLTF 格式的两种主要形式分别是基于纯文本的 `.gltf` 文件和二进制封装的 `.glb` 文件。`.gltf` 是一个包含 JSON 数据的文件,可以使用任何文本编辑器打开并查看其内部结构。而 `.glb` 则是将 JSON 数据及其关联的二进制资源打包成单一的二进制文件,从而减少文件数量并提高加载效率[^4]。 --- ### 如何压缩 GLTF/GLB 文件? 为了优化 GLTF 或 GLB 文件的大小,可以使用 `gltf-pipeline` 工具。以下是具体操作: - **压缩 GLB 文件为 GLTF 并启用压缩功能** 可通过命令行工具运行以下指令实现: ```bash gltf-pipeline -i model.glb -j -d ``` 这里的 `-j` 参数指定输出为 GLTF 格式,而 `-d` 表示应用 Draco 压缩技术以减小文件体积[^2]。 - **提取贴图和网格信息** 如果需要进一步分析 GLTF 文件的内容,则可以通过如下方式导出其中的纹理和其他资产: ```bash gltf-pipeline -i model.gltf -o test.gltf -t ``` 此命令会生成一个新的 GLTF 文件 (`test.gltf`) 同时保留原始贴图等附加信息[^3]。 --- ### Cesium 中加载 GLTF/GLB 模型的方法 当在 Cesium 地球可视化框架中加载 GLTF 或 GLB 模型时,需注意以下几个方面: 1. **基本加载流程**: 使用 `Cesium.Model.fromGltf()` 方法即可完成模型实例化过程。 ```javascript var viewer = new Cesium.Viewer('cesiumContainer'); var entity = viewer.entities.add({ position : Cesium.Cartesian3.fromDegrees(-75.0, 40.0), model : { uri : 'path/to/model.glb' } }); ``` 2. **解决常见问题**: 若遇到某些特定错误提示 (如材质丢失),可能是因为缺少必要的依赖库或者路径配置不正确。此时应仔细核对文档说明,并确保所有相关资源均已上传至服务器端。 --- ### 总结 综上所述,GLTF 提供了一种轻量级且灵活的方式来表达复杂的三维图形数据;借助专门设计好的工具链能够有效提升性能表现同时简化开发工作流。无论是手动调整还是自动化处理环节都离不开这些基础概念的支持。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值