做 CAD / 三维应用几乎绕不开一个选择:几何内核用哪个? 商业授权(Parasolid、ACIS)之外,开源阵营里最常被比较的就是 OpenCASCADE(OCCT) 和 2026 年 10 月刚开源的 NVIDIA SMLib。
这篇从工程视角做一次务实对比,并给出选型建议。
一、先认识两位选手
| OpenCASCADE(OCCT) | SMLib(NVIDIA) | |
|---|---|---|
| 出身 | 开源几何内核,商业化最早可追溯到 1990 年代 | NVIDIA 于 2026-10-08 以 Apache 2.0 开源(此前为源码授权) |
| 授权 | LGPL-2.1(含例外条款) | Apache 2.0 |
| 语言 | C++(第三方 Python 绑定 pythonocc) | C++ + 官方 Python 绑定 (_omni_solid) |
| 几何基础 | BRep + NURBS + 解析曲面,功能全面 | BRep + NURBS(NLib,NURBS 经典教材作者开发) |
| USD 集成 | 无原生支持 | 原生 BrepArray 集成(OpenUSD) |
| 生态 | 30+ 年、大量工具链(STEP/IGES 全格式、可视化、网格) | 2026 年新开源,仓库自带 Agent 工程与示例 |
SMLib 的 NLib 由《The NURBS Book》作者 Wayne Tiller 与 Les Piegl 开发,数学底子扎实。
二、五个关键维度对比
1. 授权(对企业最现实)
| 项 | OCCT | SMLib |
|---|---|---|
| 许可 | LGPL-2.1 + 例外 | Apache 2.0 |
| 商用嵌入 | 需注意 LGPL 动态链接 / 例外条款 | 允许(含专利条款) |
| 修改后闭源 | 受限(LGPL) | 允许 |
结论 :需要「闭源分发 + 无授权顾虑」的产品,SMLib 的 Apache 2.0 更省心;OCCT 的 LGPL 也可以在动态链接 + 例外条款下商用,但要仔细读过条款。
2. 几何能力
- OCCT:功能全面------建模、布尔、倒角、抽壳、放样、扫掠、网格化、可视化(OpenGL/VTK 接口)、数据交换(STEP/IGES/STL 等)。
- SMLib :聚焦精确 NURBS/BRep 实体建模 ------图元、布尔、扫掠、圆角、抽壳、偏移、缝合、镶嵌、查询。接口以
SM_API稳定函数提供。
结论:要"大而全 + 带渲染/网格" → OCCT;要"精确几何 + 轻量内核" → SMLib。
3. STEP / IGES 等格式支持(重要差异)
-
OCCT:原生支持 STEP、IGES、STL、VRML 等格式的读写------这是 OCCT 的看家本领。
-
SMLib :内核本体不直接读写 STEP/IGES ;但它的仓库提供了 OCCT 桥接 :
.brep 文件 → OcctFileSource → OcctStagingDriver → USD BrepArray → SMLib即:用 OCCT 处理格式,再转成 SMLib 能读的 BRepArray。
-
另外 SMLib 提供
usd.heal_file与heal_brep修复导入模型的几何缺陷(详见 heal_file 修复实战)。
结论 :需要直接吃 STEP/IGES → OCCT;SMLib 需要 OCCT 或转换器配合(或者只用 USD 管线)。
4. USD / Omniverse 集成
- SMLib :原生 USD 支持 ------BRep 以自定义
BrepArrayschema 存入 USD,与 Omniverse 生态直接互通;仓库自带omniSolidschema、usd.heal_file、Python GUI。 - OCCT:无原生 USD 支持,需要自己桥接(如通过 SMLib 的 OCCT 桥接反向使用)。
结论 :做 Omniverse / OpenUSD 管线 → SMLib 明显更顺。
5. 成熟度与社区
| 项 | OCCT | SMLib |
|---|---|---|
| 历史 | 30+ 年 | 资深内核(源码授权多年),2026 才开源 |
| 社区 | 庞大(论坛、教程、商业支持公司) | 新兴(开源 2 周 1800+ star,更新活跃) |
| 文档 | 完善 | 仓库自带 AGENTS.md + 22 篇操作指南 + 19 个 Agent 技能(对 AI 开发友好) |
| 风险 | 成熟稳定 | 新开源、已知问题清单(如移除圆角缺陷)需注意 |
结论:保守、求稳 → OCCT;追新、吃 NVIDIA 生态 → SMLib。
三、选型建议(按场景)
| 你的场景 | 推荐 |
|---|---|
| 做 Omniverse / USD 数字孪生 | SMLib(原生 USD) |
| 需要闭源商用、不想受 LGPL 约束 | SMLib(Apache 2.0) |
| 要直接读 STEP/IGES、做格式转换 | OCCT(原生支持) |
| 要可视化 + 网格 + 渲染一整套 | OCCT(生态最全) |
| 精确建模 + Python 脚本 / AI Agent 驱动 | SMLib(官方 Python 绑定 + Agent 技能) |
| 团队小、要成熟稳定、有商业支持 | OCCT(有商业支持公司) |
四、进阶:两者可以组合用
实际上两者不是二选一,组合往往最优:
STEP/IGES 文件
│ OCCT 读取/转换(格式兼容性最强)
▼
.brep 文件
│ SMLib 仓库的 OCCT 桥接(OcctFileSource → BrepArray)
▼
SMLib 精确建模 / 布尔 / 修复(heal_brep)
│
▼
USD(BrepArray)→ Omniverse / 渲染 / 协作
也就是说:用 OCCT 解决"格式",用 SMLib 解决"精确几何 + USD"。这是当前最务实的组合方案。
五、一句话总结
OCCT 是"大而全的老牌工具箱",SMLib 是"精确几何 + USD 的新锐内核"。要格式兼容和生态 → OCCT;要 USD 管线、Apache 2.0 商用、Agent 驱动 → SMLib;需要两者时,用 OCCT 转格式、SMLib 做精确建模。
系列文章
SMLib 系列共 6 篇,本篇为第 5 篇,可互相跳转:
- 第 1 篇:《NVIDIA 开源 CAD 内核 SMLib:USD BRep 里有什么、能怎么用》
- 第 2 篇:《Agent 如何用 SMLib 做 CAD 创作:从 AGENTS.md 到 text-to-3D 流水线》
- 第 3 篇:《SMLib 五层架构深度解析》
- 第 4 篇:《SMLib Python API 实战:用 _omni_solid 建模的 10 个常用操作》
- 第 5 篇(本文):《SMLib vs OpenCASCADE:2026 开源 CAD 内核怎么选?》
- 第 6 篇:《SMLib 的 usd.heal_file:STEP/IGES 导入模型修复实战》
仓库:
https://github.com/NVIDIA-Omniverse/usd-brep(Apache 2.0,C++ / Python)