BIMServer是一套BIM领域著名的开源平台,提供IFC文件管理、数据解析、格式化输出、web通信标准、WebGL渲染等功能,一站式解决BIM模型从文件到渲染展示的服务。
本文主要目的是整理分析BIMServer的数据结构,为BIM团队及其他有意或正在使用BIMServer的团队提供参考。因没找找到合适的圈子,所以先放在了WEBGL的圈子里。
webGL渲染效果
移动端Unity3D渲染效果
BIMServer基本的工作流程,蓝色部分为BIMServer服务端操作,其中解析数据包含整理、分类,重新索引、几何数据分离等操作。绿色部分为客户端操作。
BIMServer模型数据主要分成两个阶段来获取:
- 通过HTTP接口获取IFC Object元数据(Meta Data)
- 通过websocket获取IFC Object几何渲染数据(Geometry Data)
Meta Data:
MetaData的使用场景较多,所有对BIM Object的查询操作都会产生MetaData信息,其中最重要的功能是获取模型索引表。
- MetaData包含所有依赖关系及依赖索引号
- MetaData包含模型的全局信息,包括材质信息、计量单位等
- MetaData包含单个IFCObject的边界数据和BIMServer提供的额外的计算数据(如面积,体积,宽高,经纬度,海拔等)
- MetaData包含单个IFCObject的属性信息分组与列表
总结一下就是IFC原文件中所有与几何数据无关的标签都使用MetaData展示。MetaData最重要的一个场景就是获取IFC Object依赖列表,流程如下:
1. 确定模型id、版本id和返回数据格式并提交给BIMServer;
2. 确定要查询的构建依赖关系的IFCObject标签,包括标签类型和具体的信息类型,一般需要包括的标签如下;
* IfcProject
* IfcRepresentation
* IfcProductRepresentation
* IfcPresentationLayerWithStyle
* IfcProduct
* IfcProductDefinitionShape
* IfcPresentationLayerAssignment
* IfcRelAssociatesClassification
* IfcSIUnit
3. 组装成BIMServer约定格式提交;
4. 根据返回的MetaData及关联索引号,可以很容易地构建成一个完整的Project依赖关系树。
{ //数据结构举例
"_i": 15422653330, //索引号
"_t": "IfcProject", //节点类型
"_s": 1, //节点信息数量
"GlobalId": "1uPao3J9DDfP1fq0MDOh5G", //IFC文件全局标识
"_rOwnerHistory": 16313418326, //IFC文件创建时间与工具信息节点号
"Name": "Project Number", //节点名
"_rIsDecomposedBy": [ //分解子节点编号
60144157223
],
"LongName": "", //节点名(全称)
"Phase": "Project Status", //节点标签
"_rRepresentationContexts": [ //内容节点编号
31861965159,
31862030695
],
"_rIsDefinedBy": [ //构件属性节点编号
1028471849606,
1028471915142,
1028471980678
]
"_rgeometry": 273496016728, //几何信息节点编号
"_rRelatingObject": 15476196022, //父构件编号
"_rRelatedObjects": [ //子构件编号
19350749404,
19350814940
]
...... //不同节点类型,结构不同
}
Geometry Data:
Geometry Data顾名思义,就是模型的几何数据,包含:
- 模型的全局边界信息
- 单个构件的边界信息
- 单个构件的投影矩阵数据
- 单个构件的网格数据(含顶点数据,三角索引数据,网格发现数据和网格面着色数据)
Geometery Data是确切的,可以用于渲染的数据,所以在渲染前必须先要构建完整的Project依赖关系树,否则Geometery Data无法确切对应到具体的构件上,无法完成渲染。
最后整理一下BIMServer的缺点:
1. 目前BIMServer目前仅限于处理IFC文件,数据相对更丰富的revit和FBX文件则不兼容。
2. 目前仅支持IFC2x3和IFC4,不兼容IFC2x4以及更早期的IFC文件。
3. BIMServer的接口设计与交互对web前端较友好,但对各种形式的原生客户端应用(尤其是移动客户端)来说非常不友好。
* 过于频繁的HTTP交互;
* 网络数据流量较大;
* 大多接口需要串行进行,无法做并发调用;
* 仅提供了基于webGL的渲染方案,各种原生客户端需要自己集成或进行渲染引擎的开发。
4. 过于依赖BIMServer服务器,服务器压力较大。
5. 不支持网格聚合与分割算法,完整渲染整个模型带来巨大的硬件资源开销。
本文来自网易实践者社区,经作者徐骞授权发布。