# 流式加载

# 流式加载概念说明

# 1.什么是流式加载

通俗来讲,流式加载指的是依据模型的视觉贡献度、属性、重要性等因素,划分不同加载优先级,从而进行模型数据动态加卸载的技术。

# 2.流式加载的优势

流式加载技术是BIMFACE团队针对大模型轻量化加载场景而研发出的调度技术,有效解决了大体量模型轻量化在加载时产生的加载时间长、资源消耗大,从而导致操作卡顿甚至崩溃的痛点。相比较传统的全量加载方式,流式加载在保证同样优秀的显示效果下,具备优异的性能和操作体验,在各类大场景下(如GIS场景、智慧工地、基建、数字城市等)得到了广泛应用。

经过团队内部测试,应用普通商务轻薄本(配置为i5-11代低压CPU,8G内存,核显),可实现对某基建模型(模型大小约9G,三角面片1200w+)进行快速加载与流畅展示;对于某大规模建筑(如下图,三角面片数2300w+)可实现3s内场景初始化完成并流畅展示。

# 3.应用流式加载的全新数据格式——bimtiles

流式加载以新的数据格式bimtiles呈现。bimtiles依据模型的建模与分类标准,结合模型视觉贡献度和重要性,应用了多种数据优化算法(如HLOD、mesh化简与压缩、几何重组与合并、批次合并等算法),成功解决了大规模模型展示时存在的海量数据、多源异构数据融合、在线快速渲染等复杂问题。

注:

  • 多源异构数据融合指的是对BIM数据、卫星影像资源、数字高程模型、倾斜摄影和SHP等多来源,多结构的数据进行融合,并进行后续应用。这也是目前大场景轻量化展示亟待解决的问题。
  • HLOD(Hierarchical Level of Detail)指的是多层次、多方式、多细节加载,通过应用抽壳、构件LOD、批次优化、实例绘制、视锥裁剪、遮挡/分层剔除等算法,将数据划分至多层次递进结构。

# 流式加载应用流程

全量加载和流式加载的主要区别为:全量加载的数据格式为bmd,默认单位为毫米,流式加载的数据格式为bimtiles,默认单位为米。

应用流式加载主要流程分为两步:转换/集成为流式加载数据、设置预览场景单位。

# 1.转换/集成为流式加载数据

在控制台中发起文件转换和模型集成时,默认会转换为流式加载V3.0的数据。

调用文件转换 (opens new window)模型集成 (opens new window)接口时,可以配置以下参数获取流式加载数据。

{
  "config":{
    // 是否转换为流式加载数据,true为流式加载,false为全量加载
    "toBimtiles" : true,
    // 流式加载数据版本,默认值为V2, 新版本V3需要使用新版Javascript SDK
    "bimtilesVersion" : "V3"
  }
}

转换/集成为流式加载数据需要注意以下两点:

  • 流式加载V3版本(发版时间2022年11月16日)的数据,需要使用新版本的Javascript SDK(3.6.224以上版本)进行预览,包括离线数据包预览。
  • 全量加载和流式加载数据可以进行集成,但不能直接添加到同一个场景,如果存在多模型场景,需要考虑历史数据的重转。
# 2.设置预览场景单位

全量加载数据的默认单位为毫米,主要面向小体量的模型,流式加载数据的默认单位为米,小体量和大体量模型都适用,同时可以复用到GIS场景中。

预览场景的单位设置可以结合应用情况考虑,推荐两种可行的方案,可能会存在部分适配工作。

方案一:使用默认单位。

  • 优点:前后端接口对应的数据单位都是米,同时数据可以复用到GIS场景。
  • 适配工作:基于全量加载开发的功能和业务数据,在复用时需要进行换算,如视角、标签、批注等涉及单位的功能和数据;

方案二:在前端设置预览场景的全局单位为毫米。

  • 优点:符合Viewer3D场景预览的习惯,同时基于全量加载开发的功能和业务数据可以直接复用。
  • 适配工作:预览时设置全局单位,方法如下:
// 设置全局单位为毫米,前端接口输入和输出的数据单位与全局单位一致
viewer3DConfig.globalUnit = Glodon.Bimface.Common.Units.LengthUnits.Millimeter ; 

方案二需要注意的是,全局单位设置仅对前端接口生效。如果开发者直接使用后端接口获取模型数据(如获取构件属性)则需要自行换算。后端接口获取模型数据一般会有对应的前端接口,直接使用前端接口则无需换算。