b3dm ~ ( Batched 3D Model )

目录

1. b3dm 概念解析

1. What‘s b3dm

2. b3dm 格式的数据结构有两部分组成 : header / body

1. b3dm 数据也是基于 gltf 的 ( 单模型基础上做了批量化处理 )

3. b3dm 文件解析

1. 局部文件 解析结果 ( 临时方案 )

BATCH_LENGTH

id[] / revitId[] / properties[]

JSON



1. b3dm 概念解析

b3dm 是一个缩写,它的全称是:Batched 3D Mode ( 批量化 3d 模型 ) , 顾名思义,批量化指的是一定有很多个,不止一个

 Batched 3D Model allows offline batching of heterogeneous 3D models, such as different buildings in a city, for efficient streaming to a web client for rendering and interaction. Efficiency comes from transferring multiple models in a single request and rendering them in the least number of WebGL draw calls necessary. Using the core 3D Tiles spec language, each model is a feature.
 ​
 Per-model properties, such as IDs, enable individual models to be identified and updated at runtime, e.g., show/hide, highlight color, etc. Properties may be used, for example, to query a web service to access metadata, such as passing a building's ID to get its address. Or a property might be referenced on the fly for changing a model's appearance, e.g., changing highlight color based on a property value.
 ​
 A Batched 3D Model tile is a binary blob in little endian.
 --------------------------------------------------------------------------------------------------------
 译文:b3dm允许不同类型的3d模型,例如城市里不同的建筑,组织成高效的数据流到web端渲染和交互,这种高效率来自于一次请求转化多个模型并且用最少的webGL消耗。在3d tiles特殊的语言中,每一个模型都是一个要素。
 ​
 每一个模型的属性,例如ID能够将模型分离成单个的个体,同样也能对这些模型做更新,颜色变化,是否展示等这样的操作,模型的属性也会有所使用,
 举个例子来说,通过网络服务去访问元数据,通过建筑的id去访问它的地址,或者动态的属性决定模型外观,根据属性值来改变颜色高度。


1. What‘s b3dm

b3dm 瓦片 是一个 二进制 的 blob

b3dm 也是一种数据格式,这种格式符合3d tiles规范,能够做一些操作,比如说查询,分层设色等。

b3dm 格式的数据通常都是城市的批量化的建筑模型,例如 , 倾斜摄影模型。在实际的生产应用中,倾斜摄影(或者别的格式的大批量模型)的格式并不是b3dm 格式的,绝大多数的倾斜摄影模型格式是 osgb,还有一部分是 obj,所以我们需要把它转化成 b3dm 格式的数据,才能进行进一步的操作。


2. b3dm 格式的数据结构有两部分组成 : header / body

b3dm 格式的数据结构有两部分组成,header 和 body( 有点像 html )

header 部分主要记录了一些 例如版本,字节长度之类的信息。

body 部分主要由3个文件构成 feature table batch table 和 binary gltf

feature table 记录了模型的语义信息,包括每个模型的特征值信息。

batch table 记录了模型的样式以及 rest 请求,还有一些属性信息。


1. b3dm 数据也是基于 gltf 的 ( 单模型基础上做了批量化处理 )

注意 :

b3dm 数据也是基于 gltf 的,也就是说批量的模型中的单个模型的模型格式还是 gltf,并且数据组织方式也和之前讲到过的 gltf 是一样的。

说白了 b3dm 就是在原来 gltf 小模型,单个模型的基础之上,做了批量化的数据组织方式,多了 feature table 和 batch table 两个文件。


3. b3dm 文件解析


1. 局部文件 解析结果 ( 临时方案 )

 数据源 准备阶段
     1、通过 WinHex 解析 b3bm 格式文件
     2、截取 解析正常的部分数据
     3、截取部分 另存为xxx.txt 文件
     4、通过 json 工具类 校验格式
 -------------------------------------------------------
 解析数据数理化阶段
     1、抽象统一解析 保存好的 JSON 格式文本文件
     2、所需数据实例化至数据库


BATCH_LENGTH

 {
     "BATCH_LENGTH": 23
 }


id[] / revitId[] / properties[]

 {
     "id": [
         "aabe04fe-bd80-4e6b-bd1c-7ca5db50ef0c-0056d2bb",
         "aabe04fe-bd80-4e6b-bd1c-7ca5db50ef0c-0056d2c8",
         "aabe04fe-bd80-4e6b-bd1c-7ca5db50ef0c-0056d2e5",
         "aabe04fe-bd80-4e6b-bd1c-7ca5db50ef0c-0056d2ea",
         "aabe04fe-bd80-4e6b-bd1c-7ca5db50ef0c-0056d2f1",
         "467801da-3f36-4be3-b3f9-f2de8b0aa99f-0057ae4b",
         "e8f36b26-a5b1-4026-b578-620c5738b68e-0059b23b",
         "e8f36b26-a5b1-4026-b578-620c5738b68e-0059b241",
         "e8f36b26-a5b1-4026-b578-620c5738b68e-0059b289",
         "e8f36b26-a5b1-4026-b578-620c5738b68e-0059b2a0",
         "aabe04fe-bd80-4e6b-bd1c-7ca5db50ef0c-0056d41b",
         "aabe04fe-bd80-4e6b-bd1c-7ca5db50ef0c-0056d420",
         "aabe04fe-bd80-4e6b-bd1c-7ca5db50ef0c-0056d427",
         "6fa5dcf6-ff4a-4930-aac9-b797f57b424b-00576625",
         "6fa5dcf6-ff4a-4930-aac9-b797f57b424b-0057663f",
         "6fa5dcf6-ff4a-4930-aac9-b797f57b424b-0057665e",
         "6fa5dcf6-ff4a-4930-aac9-b797f57b424b-00576660",
         "467801da-3f36-4be3-b3f9-f2de8b0aa99f-0057ae0c",
         "9f961a30-3b3d-44a2-b73a-db9d54125ba5-00597277",
         "c28ca6fe-7b52-4d98-b06b-e65b6f1c93b2-0059cd54",
         "c28ca6fe-7b52-4d98-b06b-e65b6f1c93b2-0059cdbc",
         "c28ca6fe-7b52-4d98-b06b-e65b6f1c93b2-0059cdc7",
         "c28ca6fe-7b52-4d98-b06b-e65b6f1c93b2-0059cdce"
     ],
     "revitId": [
         "5690043",
         "5690056",
         "5690085",
         "5690090",
         "5690097",
         "5746251",
         "5878331",
         "5878337",
         "5878409",
         "5878432",
         "5690395",
         "5690400",
         "5690407",
         "5727781",
         "5727807",
         "5727838",
         "5727840",
         "5746188",
         "5862007",
         "5885268",
         "5885372",
         "5885383",
         "5885390"
     ],
     "properties": [
         {
             "图像": "<无>",
             "底部高程": "3240.00 mm",
             "顶部高程": "3340.00 mm",
             "尺寸": "400 mmx100 mm",
             "标记": "2261",
             "标高前缀": "BL",
             "桥架类型": "CT",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "400 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3290.00 mm",
             "开始偏移": "3290.00 mm",
             "端点偏移": "3290.00 mm",
             "长度": "834.04 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3350.00 mm",
             "顶部高程": "3450.00 mm",
             "尺寸": "200 mmx100 mm",
             "标记": "2262",
             "标高前缀": "BL",
             "桥架类型": "CT",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "200 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3400.00 mm",
             "开始偏移": "3400.00 mm",
             "端点偏移": "3400.00 mm",
             "长度": "2555.39 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3350.00 mm",
             "顶部高程": "3450.00 mm",
             "尺寸": "200 mmx100 mm",
             "标记": "2264",
             "标高前缀": "BL",
             "桥架类型": "CT",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "200 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3400.00 mm",
             "开始偏移": "3400.00 mm",
             "端点偏移": "3400.00 mm",
             "长度": "20043.04 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3350.00 mm",
             "顶部高程": "3450.00 mm",
             "尺寸": "200 mmx100 mm",
             "标记": "2265",
             "标高前缀": "BL",
             "桥架类型": "CT",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "200 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3400.00 mm",
             "开始偏移": "3400.00 mm",
             "端点偏移": "3400.00 mm",
             "长度": "18723.21 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3240.00 mm",
             "顶部高程": "3340.00 mm",
             "尺寸": "200 mmx100 mm",
             "标记": "2266",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "200 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3290.00 mm",
             "开始偏移": "3290.00 mm",
             "端点偏移": "3290.00 mm",
             "长度": "249.24 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3350.00 mm",
             "顶部高程": "3450.00 mm",
             "尺寸": "200 mmx100 mm",
             "标记": "2284",
             "标高前缀": "BL",
             "桥架类型": "CT",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "200 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3400.00 mm",
             "开始偏移": "3400.00 mm",
             "端点偏移": "3400.00 mm",
             "长度": "18723.21 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3350.00 mm",
             "顶部高程": "3450.00 mm",
             "尺寸": "200 mmx100 mm",
             "标记": "2293",
             "标高前缀": "BL",
             "桥架类型": "CT",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "200 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3400.00 mm",
             "开始偏移": "3400.00 mm",
             "端点偏移": "3400.00 mm",
             "长度": "14616.67 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3240.00 mm",
             "顶部高程": "3340.00 mm",
             "尺寸": "200 mmx100 mm",
             "标记": "2294",
             "标高前缀": "BL",
             "桥架类型": "CT",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "200 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3290.00 mm",
             "开始偏移": "3290.00 mm",
             "端点偏移": "3290.00 mm",
             "长度": "711.98 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3300.29 mm",
             "顶部高程": "3389.71 mm",
             "尺寸": "200 mmx100 mm",
             "标记": "2295",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "200 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3346.41 mm",
             "开始偏移": "3346.41 mm",
             "端点偏移": "3343.59 mm",
             "长度": "5.64 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3300.29 mm",
             "顶部高程": "3389.71 mm",
             "尺寸": "200 mmx100 mm",
             "标记": "2296",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "200 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3343.59 mm",
             "开始偏移": "3343.59 mm",
             "端点偏移": "3346.41 mm",
             "长度": "5.64 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3350.00 mm",
             "顶部高程": "3450.00 mm",
             "尺寸": "100 mmx100 mm",
             "标记": "2270",
             "标高前缀": "BL",
             "桥架类型": "CT",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "100 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3400.00 mm",
             "开始偏移": "3400.00 mm",
             "端点偏移": "3400.00 mm",
             "长度": "10853.27 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3350.00 mm",
             "顶部高程": "3450.00 mm",
             "尺寸": "100 mmx100 mm",
             "标记": "2271",
             "标高前缀": "BL",
             "桥架类型": "CT",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "100 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3400.00 mm",
             "开始偏移": "3400.00 mm",
             "端点偏移": "3400.00 mm",
             "长度": "18507.78 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3230.00 mm",
             "顶部高程": "3330.00 mm",
             "尺寸": "100 mmx100 mm",
             "标记": "2272",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "100 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3280.00 mm",
             "开始偏移": "3280.00 mm",
             "端点偏移": "3280.00 mm",
             "长度": "1368.66 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3230.00 mm",
             "顶部高程": "3330.00 mm",
             "尺寸": "100 mmx100 mm",
             "标记": "2273",
             "标高前缀": "BL",
             "桥架类型": "CT",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "100 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3280.00 mm",
             "开始偏移": "3280.00 mm",
             "端点偏移": "3280.00 mm",
             "长度": "4294.11 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3350.00 mm",
             "顶部高程": "3450.00 mm",
             "尺寸": "100 mmx100 mm",
             "标记": "2274",
             "标高前缀": "BL",
             "桥架类型": "CT",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "100 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3400.00 mm",
             "开始偏移": "3400.00 mm",
             "端点偏移": "3400.00 mm",
             "长度": "18507.78 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3350.00 mm",
             "顶部高程": "3450.00 mm",
             "尺寸": "100 mmx100 mm",
             "标记": "2275",
             "标高前缀": "BL",
             "桥架类型": "CT",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "100 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3400.00 mm",
             "开始偏移": "3400.00 mm",
             "端点偏移": "3400.00 mm",
             "长度": "10853.27 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3350.00 mm",
             "顶部高程": "3450.00 mm",
             "尺寸": "100 mmx100 mm",
             "标记": "2276",
             "标高前缀": "BL",
             "桥架类型": "CT",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "100 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3400.00 mm",
             "开始偏移": "3400.00 mm",
             "端点偏移": "3400.00 mm",
             "长度": "8384.77 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3350.00 mm",
             "顶部高程": "3450.00 mm",
             "尺寸": "100 mmx100 mm",
             "标记": "2282",
             "标高前缀": "BL",
             "桥架类型": "CT",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "100 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3400.00 mm",
             "开始偏移": "3400.00 mm",
             "端点偏移": "3400.00 mm",
             "长度": "18507.78 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3230.00 mm",
             "顶部高程": "3330.00 mm",
             "尺寸": "100 mmx100 mm",
             "标记": "2289",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "100 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3280.00 mm",
             "开始偏移": "3280.00 mm",
             "端点偏移": "3280.00 mm",
             "长度": "224.62 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3350.00 mm",
             "顶部高程": "3450.00 mm",
             "尺寸": "100 mmx100 mm",
             "标记": "2297",
             "标高前缀": "BL",
             "桥架类型": "CT",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "100 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3400.00 mm",
             "开始偏移": "3400.00 mm",
             "端点偏移": "3400.00 mm",
             "长度": "601.77 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3350.00 mm",
             "顶部高程": "3450.00 mm",
             "尺寸": "100 mmx100 mm",
             "标记": "2300",
             "标高前缀": "BL",
             "桥架类型": "CT",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "100 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3400.00 mm",
             "开始偏移": "3400.00 mm",
             "端点偏移": "3400.00 mm",
             "长度": "4852.49 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3276.89 mm",
             "顶部高程": "3403.11 mm",
             "尺寸": "100 mmx100 mm",
             "标记": "2301",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "100 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3359.81 mm",
             "开始偏移": "3359.81 mm",
             "端点偏移": "3320.19 mm",
             "长度": "79.23 mm"
         },
         {
             "图像": "<无>",
             "底部高程": "3276.89 mm",
             "顶部高程": "3403.11 mm",
             "尺寸": "100 mmx100 mm",
             "标记": "2302",
             "创建的阶段": "新构造",
             "拆除的阶段": "无",
             "水平对正": "中心",
             "垂直对正": "中",
             "宽度": "100 mm",
             "高度": "100 mm",
             "参照标高": "管线综合",
             "偏移": "3359.81 mm",
             "开始偏移": "3359.81 mm",
             "端点偏移": "3320.19 mm",
             "长度": "79.23 mm"
         }
     ]
 }


1. id[] : 构件 id 数组

 


JSON

 {
     "scene": 0,
     "asset": {
         "generator": "gltf-samples-generator",
         "version": "2.0"
     },
     "scenes": [
         {
             "name": "-1",
             "nodes": [
                 0
             ]
         }
     ],
     "nodes": [
         {
             "name": "-1",
             "mesh": 0
         }
     ],
     "meshes": [
         {
             "name": "-1",
             "primitives": [
                 {
                     "attributes": {
                         "POSITION": 0,
                         "NORMAL": 1,
                         "_BATCHID": 2
                     },
                     "indices": 3,
                     "material": 0
                 }
             ]
         }
     ],
     "materials": [
         {
             "name": "MaterialNode_8355711_0",
             "pbrMetallicRoughness": {
                 "roughnessFactor": 1.0,
                 "baseColorFactor": [
                     0.498039216,
                     0.498039216,
                     0.498039216,
                     1.0
                 ],
                 "metallicFactor": 0.0
             },
             "alphaMode": "OPAQUE",
             "doubleSided": true
         }
     ],
     "accessors": [
         {
             "min": [
                 21.8017368,
                 21.23,
                 -39.46816
             ],
             "max": [
                 42.94478,
                 21.45,
                 -19.6449471
             ],
             "bufferView": 0,
             "byteOffset": 0,
             "componentType": 5126,
             "count": 1104,
             "type": "VEC3"
         },
         {
             "min": [
                 -1.0,
                 -1.0,
                 -1.0
             ],
             "max": [
                 1.0,
                 1.0,
                 1.0
             ],
             "bufferView": 0,
             "byteOffset": 12,
             "componentType": 5126,
             "count": 1104,
             "type": "VEC3"
         },
         {
             "min": [
                 0.0
             ],
             "max": [
                 22.0
             ],
             "bufferView": 0,
             "byteOffset": 24,
             "componentType": 5126,
             "count": 1104,
             "type": "SCALAR"
         },
         {
             "min": [
                 0
             ],
             "max": [
                 1103
             ],
             "bufferView": 1,
             "byteOffset": 0,
             "componentType": 5123,
             "count": 1932,
             "type": "SCALAR"
         }
     ],
     "bufferViews": [
         {
             "buffer": 0,
             "byteLength": 30912,
             "byteOffset": 0,
             "target": 34962,
             "byteStride": 28
         },
         {
             "buffer": 0,
             "byteLength": 3864,
             "byteOffset": 30912,
             "target": 34963
         }
     ],
     "buffers": [
         {
             "byteLength": 34776
         }
     ]
 }

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值