3DTiles之b3dm介绍

3DTiles之b3dm介绍

b3dm(Binary 3D Model)文件是3DTiles标准中的一种用于存储三维模型的二进制格式。它的设计目的是为了高效地存储和传输包含几何数据、纹理、材料等内容的3D模型,特别适用于大规模的三维城市建模和地理信息系统(GIS)应用。与传统的基于文本的3D格式(如OBJ、FBX等)相比,b3dm文件提供了更加高效的存储和渲染性能,特别是在处理大量复杂数据时,能够显著减少加载时间和内存使用。

b3dm文件结构

b3dm文件采用了层次化的二进制结构,这使得它能够高效存储大量数据并支持快速解析。下面是一个典型的b3dm文件结构概述。

  1. Header(文件头)

    • 文件头部分包含文件的元数据,标识该文件的类型、版本等基本信息。
    • 它用于指示文件是b3dm格式,通常包含以下内容:
      • magic:用于标识文件类型的字符串(例如:b3dm)。
      • version:文件的版本信息。
      • length:文件的总长度,包括所有的数据部分。
  2. Batch Table(批次表)

    • b3dm文件通常包含一个批次表(Batch Table),它用于管理多个模型实例(例如,城市中的多个建筑物)。每个批次表项指向一个具体的模型或物体实例。
    • 批次表项可能包括模型的元数据、颜色、标识符、材质等附加信息。每个批次数据块通常关联到一个独立的3D对象或多个对象。
  3. Feature Table(特征表)

    • 特征表存储与3D模型相关的额外属性和元数据。这些数据是关于3D对象的属性(如标签、分类、建筑物用途等),在可视化时可以被用作附加信息展示。
    • 特征表项通常与批次表项关联,以支持大规模对象的属性查询。
  4. Geometry(几何数据)

    • 这是b3dm文件的核心部分,包含了3D模型的几何信息。几何数据由多个部分组成,通常包括顶点、面片、法线、纹理坐标等。
    • 具体来说,几何数据通常以以下方式存储:
      • Vertex Buffer:顶点数据,包括每个顶点的坐标、法线、颜色、纹理坐标等。
      • Index Buffer:面片的索引数据,指示如何将顶点连接成三角形或其他几何形状。
      • NormalsTangentsTexture Coordinates:这些用于光照计算和纹理映射。
  5. Textures(纹理数据)

    • 纹理数据部分存储与模型相关的所有图像或纹理。这些纹理可能包括基础颜色纹理、法线贴图、粗糙度贴图等。
    • 纹理通常以二进制格式存储,可以是PNG、JPEG或其他压缩图像格式。文件中会包含纹理的元数据(如大小、格式等),以及指向纹理数据的引用。
  6. Materials(材质数据)

    • 作为3D模型的外观描述,材质定义了模型表面的视觉效果,如颜色、反射、透明度等属性。b3dm文件可以包含多个材质设置,每个材质都与模型的几何部分相关联。
    • b3dm中,材质通常通过物理基础渲染(PBR)模型进行描述,支持漫反射、镜面反射、粗糙度等属性。
  7. 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文件,通常需要进行以下步骤:

  1. 模型转换:首先,需要将3D模型(如OBJ、FBX、GLTF等格式)转换为b3dm格式。TilesBuilderTilesBuilder提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。可以帮助将GLTF模型转换为b3dm格式。

  2. 几何数据打包:转换过程中,工具会解析3D模型的几何数据(顶点、面片、法线等),并将它们压缩为二进制格式。这些几何数据会被打包成b3dm文件的一个部分。

  3. 材质和纹理处理:模型中的材质和纹理也会被转换为b3dm格式中适用的PBR材质数据。纹理图像会被嵌入文件或链接到外部资源。

  4. 生成批次和特征表:如果模型包含多个实例或有其他自定义属性,工具会创建批次表和特征表来管理这些信息。

  5. 文件输出:最后,所有数据会被组织成b3dm格式,并保存为一个二进制文件。

使用b3dm文件的工具
  • TilesBuilderTilesBuilder提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。
    请添加图片描述

  • CesiumJS:CesiumJS是一个开源的JavaScript库,用于浏览和可视化大规模3D地理数据。需要一定的代码能力

  • 其他GIS工具:一些GIS和三维建模软件(如ArcGIS、Blender等)也支持生成或导入b3dm格式文件。

b3dm的优势
  • 高效存储和传输b3dm文件的二进制格式让其在存储和传输时更加紧凑,能够大幅度降低网络带宽消耗和加载时间。
  • 支持大规模数据:通过3DTiles的分块机制,b3dm可以有效支持超大规模的三维模型和城市级别的数据集。
  • 兼容性强:作为3DTiles标准的一部分,b3dm与其他类型的3D数据(如点云、纹理、光照等)能够无缝融合。
  • 优化的渲染性能:支持PBR材质,使得渲染效果更加真实,适应不同光照条件下的表现。

总结

b3dm文件是3DTiles标准中的一种重要格式,专为大规模的三维模型设计,能够高效地存储、传输和渲染3D数据。它通过二进制结构优化了存储和加载性能,支持PBR材质和其他高级特性,并广泛应用于城市建模、虚拟地球、GIS等领域。随着技术的不断发展,b3dm有望在更多的应用场景中发挥更大的作用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值