BIM 模型审查引擎・第三方空间几何算法包调研报告

面向 Solibri 同类 BIM 审查插件的空间几何内核选型调研,对比 OCCT / CGAL / Bullet / Rhino3dm / Embree 等开源方案,输出 MVP 与生产两套架构建议

1 调研背景

项目目标:开发类似 Solibri 的 BIM 模型审查插件,核心需求为三维构件空间关系判定——碰撞检测、距离计算、包含 / 相交 / 分离、空间包围盒、实体布尔、模型拓扑校验,支撑 BIM 合规性规则检查(管线净距、构件冲突、空间占位、洞口校核等)。

调研对象:开源空间几何内核、空间索引库、IFC 几何处理组件;重点评估适配 .NET 栈(Revit 插件,.NET 10)、支持 BIM 三角网格 / 实体 BREP、可做空间查询、许可友好、性能可用于大规模模型场景。

调研目的:对比各算法包能力、限制、集成成本,输出技术路线选型建议,为审查引擎架构定案提供依据。

业务边界说明:Solibri 核心能力 = IFC 模型解析 + 空间索引 + 三维几何相交 / 距离计算 + 规则引擎。本次调研聚焦空间几何与空间索引算法包,不含规则引擎、IFC 解析库(IFC 解析可单独选用 IfcOpenShell 等)。

2 需求拆解(审查引擎核心空间能力清单)

类别具体能力需求BIM 审查场景
基础几何点 / 线 / 面 / 实体、包围盒 AABB/OBB、三角网格、BREP 实体构件粗筛、包围盒预检测
空间关系判断相交、包含、分离、接触、最小距离、穿透深度碰撞检查、构件净距校验
布尔运算实体求交、求差、求和空间扣除、洞口校核、体积计算
空间索引AABB 树、BVH、八叉树,批量构件快速筛选(减少两两几何计算)大模型性能优化(上万构件)
网格处理三角网格简化、缝合、修复非流形Revit 导出模型存在烂面、破面
接口与集成.NET 原生 / C++ 可封装 C#、支持嵌入 Revit 插件、支持 IFC/STEP 几何插件部署限制
许可MIT/Apache 2.0 等宽松开源,避免 GPL 传染性开源商用插件发布风险

3 候选开源空间算法包调研详情

3.1 OpenCASCADE(OCCT)

工业级三维几何内核,C++ 开发,老牌 BREP 实体几何引擎,STEP/IGES 原生支持,大量 BIM/CAE 软件底层依赖(FreeCAD 底层就是 OCCT)。

  • 支持:BREP 实体、曲面、布尔运算、实体相交、距离计算、拓扑分析;自带 AABB 包围盒;支持 STEP/IGES;可处理参数化实体
  • ⚠️ 限制
    • C++ 库,.NET 需要自行封装(OCCT .NET wrapper 非官方,如 OCC.Net)
    • 编译、部署复杂;体积大
    • 对破损 BIM 模型(非流形、碎面)容错较差
    • 无内置 BVH 空间索引,需要自己实现或搭配第三方 BVH 库做构件加速筛选
  • 📜 License:LGPL 2.1。商用注意:动态链接 LGPL 库不传染源码;静态链接会触发 LGPL 开源义务,插件打包需要关注发布方式
  • 🎯 适用场景:需要高精度实体布尔、拓扑检查;适合做精确几何计算。Solibri 早期底层几何内核同类路线

3.2 CGAL(Computational Geometry Algorithms Library)

C++ 计算几何算法库,学术 + 工业级,算法种类最全,支持三角网格、布尔、网格修复、BVH 空间查询。

  • 支持:精确几何谓词、三角网格布尔、网格修复、BVH / 空间索引、距离、相交检测;点云、多边形、多面体处理能力极强
  • ⚠️ 限制
    • C++ 库,需要 C++/CLI 封装给 .NET;编译门槛高
    • 大量算法是精确算术,大规模 BIM 模型性能开销大;可切换浮点数模式,但会引入精度问题
    • 不原生支持 BREP 实体,偏重三角网格
  • 📜 License:混合开源(GPL/LGPL),部分模块 GPL,商用项目需要谨慎挑选模块
  • 🎯 适用场景:网格修复、复杂空间查询;如果 BIM 全部转三角网格后做审查,CGAL 是强候选

3.3 Bullet Physics(Bullet3)

C++ 物理引擎,内置成熟 BVH、AABB、碰撞检测库,游戏 / 可视化领域大量使用。

  • 支持:AABB/OBB、BVH 加速结构、三角网格碰撞、距离查询;对海量三角面性能优秀;跨平台
  • ⚠️ 限制:只做碰撞相交,不支持实体布尔运算,不支持 BREP 拓扑;几何是离散三角网格,无实体拓扑信息;不适合体积、洞口布尔扣除场景
  • 📜 License:zlib 许可,极其宽松,商用无源码传染风险
  • 🎯 适用场景:粗碰撞筛查、净距检测,不适合实体拓扑类审查。适合作为第一层空间索引加速层

3.4 Embree(Intel)

Intel 开源光线追踪内核,高性能 BVH,面向光线投射、包围盒查询。

  • 支持:高性能 BVH 构建、光线相交查询;大规模三角面查询速度极快
  • ⚠️ 限制:只做光线 / 三角面相交,无实体布尔、无空间距离谓词;不是通用几何库
  • 📜 License:Apache 2.0,商用友好
  • 🎯 适用场景:BIM 空间射线查询(房间空间拾取、遮挡检测),不适合构件碰撞和布尔

3.5 Triangle / TetGen

三角面、四面体网格生成库,仅用于网格剖分,不能做空间关系判断与布尔,仅辅助几何预处理,不适合作为主引擎。

3.6 .NET 原生库(适合 Revit C# 插件直接调用)

3.6.1 MathNet.Numerics

纯 .NET 数值库,矩阵、向量基础运算;无三维实体 / 网格相交、无空间索引,只能做底层数学工具,不能作为空间引擎。License MIT。

3.6.2 Rhino3dm(Rhino3D 开源 .NET 库)

重点:McNeel 官方开源 .NET 库,Rhino 几何内核剥离,NuGet 包直接 C# 引用,无需 C++ 封装

  • 支持:BREP 实体、NURBS 曲面、三角网格;相交、距离、布尔运算;AABB/OBB;内置 BVH;支持 STEP 导入;纯 .NET 托管调用
  • ⚠️ 限制
    • 开源版 Rhino3dm 是几何数据模型 + 基础计算,不包含完整 Rhino 空间加速全套高级算法;大规模上万构件场景性能需要测试
    • 复杂破损 IFC 模型 BREP 转换容易失败
  • 📜 License:MIT,商用非常友好,无传染性开源
  • 🎯 亮点唯一可直接在 Revit C# 插件中引用、无需 C++ 封装的 BREP + 网格几何库,集成成本最低,开发速度最快

3.6.3 NetTopologySuite(NTS)

JTS 拓扑套件 .NET 移植版本,二维几何王者,三维能力弱,仅支持简单 3D 点线面,不支持 BREP、三维实体布尔。MIT 许可。

结论:NTS 适合 2D 图纸审查,不适合三维 BIM 构件空间审查。

3.7 IfcOpenShell(补充,非纯空间算法包)

C++/Python/C# 绑定,IFC 解析库,可将 IFC 构件解析成 OCCT 几何;职责是 IFC→几何转换,不是审查计算内核,常搭配 OCCT 一起使用。LGPL。

4 候选包横向对比汇总表

算法包开发语言BREP 实体三角网格布尔空间索引 (BVH)三维相交 / 距离.NET 集成难度License商用风险
OpenCASCADE (OCCT)C++❌ 需自建高(C++ 封装)LGPL 2.1中等(静态链接风险)
CGALC++很高GPL/LGPL 混合高(部分模块 GPL)
Bullet3C++✅(仅碰撞)zlib
Rhino3dm.NET✅ 基础极低(NuGet)MIT
EmbreeC++仅光线相交Apache 2.0
NTS.NET仅弱 3D极低MIT

5 技术路线方案对比(审查引擎架构可选路线)

目标:开发 Revit 插件,BIM 构件空间审查(Solibri 同类功能)

方案 A:Rhino3dm 为主内核(推荐【快速原型路线】

架构:Revit 插件 (C#) → Rhino3dm(BREP + 网格几何、相交、布尔、BVH)→ 空间关系判断 → 规则引擎

优势

  • .NET 原生 NuGet,无 C++ 编译、跨平台封装难题,直接嵌入 Revit 插件,开发周期短
  • MIT 许可,商用无风险;BREP 与三角网格双支持;自带 BVH
  • 可以直接读取 Revit 几何转换到 Rhino 几何对象,转换链路短

短板:超大模型(几万构件)下 BVH 性能上限低于 OCCT/CGAL;极端破损模型鲁棒性一般

适用:MVP 原型开发、中小规模 BIM 模型审查;团队以 C#/.NET 开发为主,缺少 C++ 底层开发人力

方案 B:OCCT 为主内核 + Bullet 做空间索引加速(推荐【高性能生产路线】

架构:Revit 插件 (C#) ↔ C++ 封装层 ↔ OCCT(BREP 实体布尔、拓扑) + Bullet(BVH 批量包围盒预筛选)

流程

  1. Bullet BVH 做粗筛:构件包围盒不相交直接跳过,减少昂贵实体几何计算
  2. 粗筛命中后,交给 OCCT 做精确 BREP 相交、距离、布尔运算

优势:工业级精度,Solibri 同类底层思路;处理实体拓扑、洞口扣除、体积计算能力最强

短板:C++ 封装、编译、部署复杂;LGPL 许可管控;开发周期长;需要 C++ 开发人力

适用:长期产品化,面向大型轨道交通 / 机场复杂 BIM 项目,上万构件高精度审查场景

方案 C:CGAL + Bullet(纯网格路线)

全部构件转三角网格,CGAL 做网格布尔 / 修复,Bullet 做 BVH 加速。

短板:丢失 BREP 拓扑信息;不能做实体参数化分析;许可风险高

适用:仅做网格碰撞,不推荐作为 BIM 审查主引擎

方案 D:自研空间算法(不推荐

自己实现 BVH、三维相交、实体布尔。三维计算几何坑极多(浮点精度、非流形、拓扑退化),研发成本巨大,稳定性很难达到 OCCT/Rhino3dm 成熟库水平。

6 关键风险点

  1. BIM 模型几何破损问题:Revit/IFC 导出模型经常出现非流形、碎面、重叠面;所有开源库都会受影响,需要前置几何修复流程(CGAL 或 OCCT 自带修复工具)
  2. 浮点精度问题:三维几何判断容差是 BIM 审查核心,所有库都需要统一全局容差配置(Solibri 可配置规则容差)
  3. 许可合规风险GPL 库绝对不能直接静态链接到商用闭源插件;LGPL 需要严格区分动态 / 静态链接
  4. Revit 进程内存限制:大规模模型几何加载会占用大量内存,空间索引需要做按需加载,不能一次性载入全部构件

7 选型建议与落地路径

7.1 选型结论

短期 MVP 原型开发(优先推荐):采用 Rhino3dm(MIT)

  • 优点:C# 直接集成、开发速度快、许可安全,快速验证整套审查业务逻辑(构件相交、净距、空间包含规则)
  • 适用:验证业务规则、开发 Demo、内部测试,快速跑通和 Solibri 对齐的审查案例

中长期产品化,面向大型复杂 BIM 项目:采用 OCCT (LGPL) + Bullet (zlib) 组合架构

  • 粗筛用 Bullet BVH 做包围盒加速;精确几何相交、布尔、拓扑计算交给 OCCT。需要投入 C++ 封装开发,同时做好开源许可合规管理

不推荐

  • CGAL 作为主内核(许可 + 性能复杂度)
  • 自研底层几何算法

7.2 落地实施步骤

  1. 原型阶段:基于 Rhino3dm 搭建最小验证 Demo,实现:构件包围盒 BVH、构件最小距离、相交判断;拿轨道交通 BIM 模型做案例测试,验证性能与精度
  2. 压力测试:针对 5000 / 10000 构件规模模型,测试查询耗时、内存占用,评估 Rhino3dm 性能瓶颈
  3. 架构迭代:如果原型阶段发现大模型性能不足,拆分架构,把计算密集几何部分下沉到 C++ 层,切换 OCCT + Bullet 方案,上层 C# 插件保持业务规则不变
  4. 配套:几何预处理模块(破面修复)、统一容差管理、构件空间索引持久化

8 附录:待后续调研事项

  • Rhino3dm 大规模构件 BVH 性能实测、破损 IFC 几何转换成功率
  • OCCT .NET 封装方案(OCC.Net)稳定性、LGPL 商用发布合规细则
  • 空间审查规则引擎技术选型(和几何引擎解耦)
  • IFC 几何转换组件(IfcOpenShell)与几何内核对接测试