3DTiles之b3dm介绍
b3dm(Binary 3D Model)文件是3DTiles标准中的一种用于存储三维模型的二进制格式。它的设计目的是为了高效地存储和传输包含几何数据、纹理、材料等内容的3D模型,特别适用于大规模的三维城市建模和地理信息系统(GIS)应用。与传统的基于文本的3D格式(如OBJ、FBX等)相比,b3dm文件提供了更加高效的存储和渲染性能,特别是在处理大量复杂数据时,能够显著减少加载时间和内存使用。
b3dm文件结构
b3dm文件采用了层次化的二进制结构,这使得它能够高效存储大量数据并支持快速解析。下面是一个典型的b3dm文件结构概述。
-
Header(文件头)
- 文件头部分包含文件的元数据,标识该文件的类型、版本等基本信息。
- 它用于指示文件是
b3dm格式,通常包含以下内容:- magic:用于标识文件类型的字符串(例如:
b3dm)。 - version:文件的版本信息。
- length:文件的总长度,包括所有的数据部分。
- magic:用于标识文件类型的字符串(例如:
-
Batch Table(批次表)
b3dm文件通常包含一个批次表(Batch Table),它用于管理多个模型实例(例如,城市中的多个建筑物)。每个批次表项指向一个具体的模型或物体实例。- 批次表项可能包括模型的元数据、颜色、标识符、材质等附加信息。每个批次数据块通常关联到一个独立的3D对象或多个对象。
-
Feature Table(特征表)
- 特征表存储与3D模型相关的额外属性和元数据。这些数据是关于3D对象的属性(如标签、分类、建筑物用途等),在可视化时可以被用作附加信息展示。
- 特征表项通常与批次表项关联,以支持大规模对象的属性查询。
-
Geometry(几何数据)
- 这是
b3dm文件的核心部分,包含了3D模型的几何信息。几何数据由多个部分组成,通常包括顶点、面片、法线、纹理坐标等。 - 具体来说,几何数据通常以以下方式存储:
- Vertex Buffer:顶点数据,包括每个顶点的坐标、法线、颜色、纹理坐标等。
- Index Buffer:面片的索引数据,指示如何将顶点连接成三角形或其他几何形状。
- Normals、Tangents、Texture Coordinates:这些用于光照计算和纹理映射。
- 这是
-
Textures(纹理数据)
- 纹理数据部分存储与模型相关的所有图像或纹理。这些纹理可能包括基础颜色纹理、法线贴图、粗糙度贴图等。
- 纹理通常以二进制格式存储,可以是PNG、JPEG或其他压缩图像格式。文件中会包含纹理的元数据(如大小、格式等),以及指向纹理数据的引用。
-
Materials(材质数据)
- 作为3D模型的外观描述,材质定义了模型表面的视觉效果,如颜色、反射、透明度等属性。
b3dm文件可以包含多个材质设置,每个材质都与模型的几何部分相关联。 - 在
b3dm中,材质通常通过物理基础渲染(PBR)模型进行描述,支持漫反射、镜面反射、粗糙度等属性。
- 作为3D模型的外观描述,材质定义了模型表面的视觉效果,如颜色、反射、透明度等属性。
-
Extra Data(附加数据)
- 这部分是
b3dm文件的扩展部分,可以存储一些附加的、与核心数据无关的内容。根据应用需求,这些数据可以是任何类型的二进制信息,比如自定义的属性、标注信息、或特殊的渲染参数。
- 这部分是
b3dm的二进制结构
b3dm文件是以二进制格式存储的,因此它的每一部分都有明确的二进制编码。这使得b3dm文件比传统的文本格式(如OBJ)更加紧凑。以下是b3dm文件的一个简化示意结构:
|----------------------------------------|
| Magic Identifier (4 bytes) | -> "b3dm"
| Version (4 bytes) | -> Version number
| Total Length (4 bytes) | -> File size
|----------------------------------------|
| Batch Table (optional) | -> Batch information
|----------------------------------------|
| Feature Table (optional) | -> Feature attributes
|----------------------------------------|
| Geometry Data (vertex, indices, etc.) | -> 3D model geometry
|----------------------------------------|
| Textures (optional) | -> Textures data (images)
|----------------------------------------|
| Materials (optional) | -> PBR materials data
|----------------------------------------|
| Extra Data (optional) | -> Custom data
|----------------------------------------|
每个字段的具体字节长度会根据版本和具体实现有所不同,但这种二进制结构使得b3dm格式能够高效地存储大量数据。
如何生成b3dm文件
要生成一个b3dm文件,通常需要进行以下步骤:
-
模型转换:首先,需要将3D模型(如OBJ、FBX、GLTF等格式)转换为
b3dm格式。TilesBuilder: TilesBuilder提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。可以帮助将GLTF模型转换为b3dm格式。 -
几何数据打包:转换过程中,工具会解析3D模型的几何数据(顶点、面片、法线等),并将它们压缩为二进制格式。这些几何数据会被打包成
b3dm文件的一个部分。 -
材质和纹理处理:模型中的材质和纹理也会被转换为
b3dm格式中适用的PBR材质数据。纹理图像会被嵌入文件或链接到外部资源。 -
生成批次和特征表:如果模型包含多个实例或有其他自定义属性,工具会创建批次表和特征表来管理这些信息。
-
文件输出:最后,所有数据会被组织成
b3dm格式,并保存为一个二进制文件。
使用b3dm文件的工具
-
TilesBuilder: TilesBuilder提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。

-
CesiumJS:CesiumJS是一个开源的JavaScript库,用于浏览和可视化大规模3D地理数据。需要一定的代码能力
-
其他GIS工具:一些GIS和三维建模软件(如ArcGIS、Blender等)也支持生成或导入
b3dm格式文件。
b3dm的优势
- 高效存储和传输:
b3dm文件的二进制格式让其在存储和传输时更加紧凑,能够大幅度降低网络带宽消耗和加载时间。 - 支持大规模数据:通过3DTiles的分块机制,
b3dm可以有效支持超大规模的三维模型和城市级别的数据集。 - 兼容性强:作为3DTiles标准的一部分,
b3dm与其他类型的3D数据(如点云、纹理、光照等)能够无缝融合。 - 优化的渲染性能:支持PBR材质,使得渲染效果更加真实,适应不同光照条件下的表现。
总结
b3dm文件是3DTiles标准中的一种重要格式,专为大规模的三维模型设计,能够高效地存储、传输和渲染3D数据。它通过二进制结构优化了存储和加载性能,支持PBR材质和其他高级特性,并广泛应用于城市建模、虚拟地球、GIS等领域。随着技术的不断发展,b3dm有望在更多的应用场景中发挥更大的作用。
1749

被折叠的 条评论
为什么被折叠?



