AI 3D建模工具: Tripo 3D | Meshy AI
一句话结论:2026 年 10 月,英伟达把自家用了二十多年的 SMLib 几何内核开源了——不是丢一份压缩包,而是连C++/Python API、OpenUSD 读写、三角化、修补、桌面 GUI、示例模型一起放进仓库 NVIDIA-Omniverse/usd-brep,许可 Apache 2.0(可商用嵌入,带明确的专利授权)。对做 CAD/BIM 的人来说,这件事的分量在于:"精确几何"这条长期被 Parasolid / ACIS 商业授权把住的路,第一次有了一个能直接拿进产品的开源 B-Rep 内核,而且它天生就说 USD。 但它才刚开源两周多:贡献不接收、12 个未修 issue、几何内核的坑写得比功能还长——现在适合评估与小工具试水,不适合把主力建模链路换过来。
想在浏览器里先看看 B-Rep 与三角网格长什么样的,可以拿一个 在线 CAD 查看器 打开手上的 STEP / IGES 对照着读下文。
披露:本文完整编译英文源文 CloudNavi 2026-10-13《NVIDIA Open-Sources the SMLib CAD Kernel Under Apache 2.0》 的全部要点,并用英伟达官方仓库的 README、CHANGELOG.md、KNOWN_ISSUES.md、proposals/ 两份设计文档逐条核对与补全(数据截至 2026-10-23)。我们没有本地编译源码、没有跑布尔/圆角实测,所有数字与行为都来自官方文档与 release 说明;英伟达与本站在产品上没有任何利益关系。
一、这次开源了什么
| 项目 | 情况(截至 2026-10-23) |
|---|---|
| 仓库 | NVIDIA-Omniverse/usd-brep(Omniverse 组织下的独立仓库) |
| 许可 | Apache 2.0;repo.sh / repo.bat / tools/repoman/repoman_bootstrapper.py 为 MIT |
| 首版 | v1.0.0,仓库建于 2026-10-08、发布 2026-10-09(媒体口径写作 10-08) |
| 最新版 | v1.0.1,2026-10-21(10-22 上架) |
| 热度 | 1,823 star / 265 fork / 12 个 open issue(10-13 时是 872 star / 85 fork) |
| 语言 | C++,Python 绑定(PyPI: usd-brep,CPython 3.12,Linux x86_64 / aarch64、Windows) |
| 平台 | Linux、Windows、macOS 仅 Apple Silicon(Intel Mac 不在范围) |
| 贡献 | 暂不接收外部贡献,bug 走 issue |
| 构建依赖 | OpenUSD、Python 3.12、pybind11、premake 由 Packman 自动拉取 |
把这件事推到台面上的,是做 ClassCAD / Buerligons.IO 的开发者 @0xca0a 在 2026-10-12 发的帖子:「对 CAD 来说是大新闻——英伟达的 NURBS 内核 SMLib 终于开源了」,他说自己和 SMLib 及其团队打交道二十多年,他的 headless CAD、GUI、AI/MCP 与 PDM 产品都建立在它之上。也就是说:内核本身不是新东西,新的是它能被任何人下载、编译、塞进自己的产品里。
二、先分清两层:SMLib 是内核,USD BRep 是"外壳"
这是最容易读错的一点:
- SMLib(
source/SMLib)= 几何内核。NURBS 与多边形建模、布尔、圆角、扫掠、偏移、抽壳、特征删除、三角化、几何与拓扑校验(AssertValid)、修补(healer)。英伟达官方把它描述为"一整套 NURBS 与多边形建模工具的全尺度库",也就是别人可以拿它盖 3D 应用的引擎/内核。再往下是 NLib——由 Wayne Tiller 与 Les Piegl(NURBS 标准参考书《The NURBS Book》的作者)开发的曲线曲面库。 - USD BRep(
source/SM_API_USD等)= 让内核住在 USD 里的那一层。定义BrepArrayprim(schema 名omniSolid)、SMLib ↔ USD 的导入导出、healer、三角化、Hydra 插件、转换器。
所以"英伟达开源了一个几何内核"和"USD 终于能装精确几何"是同一件事的两面:内核给了能力,schema 给了载体。
顺带补一句价格坐标:CAD 内核长期是商业授权的(西门子 Parasolid、达索 ACIS,开源侧是 OpenCASCADE)。一个原本按源码许可卖的商用内核改成 Apache 2.0,对"想做 headless CAD、桌面 GUI、AI/Agent+MCP 流水线、PDM"的团队来说,就是多了一个可嵌入的底座。
三、为什么 USD 需要 B-Rep:显示几何 vs 精确几何
仓库里 proposals/cad_geometry/README.md 是 AOUSD(Alliance for OpenUSD)几何工作组的问题陈述(v0.1 DRAFT,2026),开篇一句就能解释整件事:
USD has no mechanism for representing mathematically exact geometry.(USD 没有任何表示数学上精确几何的机制。)
网格是近似,细分曲面是近似,NURBS patch 最接近但裁剪支持有限、没有拓扑连通性、控制点还是单精度,解析体只覆盖少数几种标准形状。而工业界交换精确几何的主流表示是 B-Rep:用边界曲面、边、顶点加上显式拓扑关系描述一个实体。
| 显示几何 | 精确几何(B-Rep) | |
|---|---|---|
| 用途 | 可视化、渲染、实时交互 | 设计、仿真、测量、制造 |
| 表示 | 网格、细分曲面 | 边界表示、参数曲面、带裁剪的解析形状 |
| 精度 | 近似,由三角化密度决定 | 容差内数学精确 |
| 拓扑 | 隐式(靠网格连通性推断) | 显式(面知道邻居,边知道所属面) |
| 关系 | 从精确几何派生(或直接授权) | 权威来源 |
两份文档里最值得 BIM 从业者读的,是两个 hero 场景:
场景 1:厂区/工地规划里的测量与碰撞检测。 规划方把几十个来源的几何塞进一个 USD stage——设备供应商只给三角化网格,拿不到原始 CAD。于是两个问题必然出现:
- 测量不可靠:机器人底座与其安装面的间隙、螺栓孔的中心距、风管与结构梁的净距——三角化几何没有参数化身份:圆柱没有轴、孔没有标称直径,任何测量的精度都被三角化容差卡死,而这个容差不是你选的、你可能也不知道。
- 碰撞模棱两可:当测出的距离正好落在三角化容差的量级上,就分不清是真相交还是网格假象。工作组用例文档的原话是:"如果两物体间的测量距离与三角化所用容差同一量级,那么排除碰撞是不安全的。" 想解决这种"软碰撞",要么把网格重划到离谱的密度,要么换成精确几何要一个确定性答案。
场景 2:数据质量由消费方决定,而不是导出方。 今天谁导出 USD,谁就一次性决定了三角化密度,下游全盘接收。但可视化只想砍掉螺纹小孔、结构工程师要边界层加密的 FEA 网格、工艺规划要精确参数曲面出刀路——三个消费者要三种表示。有 B-Rep 在 stage 里,各自派生各自的表示即可,不改源、也不用回去找原作者。
此外还有 AECO 的参考模型交换(不同公司之间交换建筑/基础设施模型,精确几何才能保住跨交换边界的尺寸精度)、制造侧的装配约束与 PMI(螺纹孔以"圆柱 + PMI 元数据"存储,精确几何能重建螺纹)、机器人侧的仿真预处理(FEA/CFD/多体动力学各自从精确边界划分网格),以及线框与 IP 保护(B-Rep 的边本身就是一等实体,剥掉解析曲面只留线框是常见的对外交付第一步)。
四、仓库里到底有什么
README 把内容分成三块,都能直接拿来用:
| 层 | 内容 |
|---|---|
| USD 侧 | omniSolid schema(BrepArray prim,面可为 NURBS 或 plane / cylinder / cone / sphere / torus 解析面)、导入导出(SmApiUsd.h)、整场景 healer、USD 校验器 brep_validator、几何校验器 brep_geometry_validator、三角化 SmApiUsdTessellate.h |
| 可视化 | hdUsdBrep(usdview 的 Hydra 插件)、view_usd.py(PyVista 窗口看 B-Rep)、smlib_gui(打开/检视/编辑 USD 与 SMLib B-Rep 的桌面 App) |
| 转换器 | occt_to_usd / usd_to_occt(OpenCASCADE ↔ USD B-Rep),以及 BREP_USD_DATA、BREP_STAGING、USD_BREP_UTILS 三个辅助库 |
| 内核侧 | source/SMLib、healer(SmApiHeal.h)、三角化(SmTess.h)、AssertValid、C++/Python 双份 API、Examples/ 里按 API 层组织的可运行例子 |
| 给 Agent 的 | AGENTS.md 入口 + .agents/docs(分层与概念、错误码含义与修法)、.agents/operations(布尔/圆角/三角化/修补/导入导出逐区指南)、.agents/skills(调试内核操作、维护 API、排查测试与写 bug report 的流程) |
两点值得单独说:
- 测试模型是 STEP / IGES / JT 格式、走 Git LFS——说明它真的拿别的 CAD 系统的数据在做回归,而不是自产自销。
- 仓库自带"给编码 Agent 的说明书"。一个几何内核把错误码解释、操作指南、调试 skill 写进仓库给 Agent 读,是 2026 年的新常态:内核不只要对人友好,还要对 Agent 友好。这个方向的另一面就是 cldnavi 记录的演示视频第二幕——用自然语言让 Agent 驱动内核加约束,直到状态变成 SOLVED。
五、上手:三条路径
A. 最省事:PyPI + 五行代码
pip install usd-brep # CPython 3.12;Linux x86_64/aarch64、Windows
import usd_brep
sphere = usd_brep.primitives.create_sphere((0.0, 0.0, 0.0), 1.0)
box = usd_brep.primitives.create_box((0.0, 0.0, 0.0), 1.0, 1.0, 1.0)
cut = usd_brep.booleans.boolean_difference(sphere, box) # 球缺一个卦限
usd_brep.usd.export_brep(cut, "cut.usda")
(brep,) = usd_brep.usd.import_breps("cut.usda")
B. 修一个别人给的 USD 场景(这是最实用的入口):
import usd_brep
usd_brep.usd.heal_file("input.usdc", "input_healed.usdc")
heal_file 会修补场景所用图层里的 BrepArray 几何,并保留图层、引用、原生实例化、变换与材质写出——也就是说它不会把你辛苦搭的 USD 组合结构拍平。
C. 自己编译 + 桌面 GUI
# Linux / macOS
./prebuild.sh && ./repo.sh build # macOS Apple Silicon 加 -p macos-universal
# Windows
prebuild.bat && repo.bat build
./repo.sh test && ./repo.sh format
# 桌面 GUI(走 uv)
uv run --locked --group gui python tools/scripts/smlib_gui.py # 默认 Debug
uv run --locked --group gui python tools/scripts/smlib_gui.py --release # Release
四个环境坑先记下:Windows 钉在 VS2019(VS2022 用户要另装 MSVC v142 工具集 + Windows SDK);macOS 只支持 Apple Silicon;Git LFS 必须装(否则 STEP/IGES/JT 测试模型是空壳);Packman 会联网拉包,内网/被墙环境要先做代理准备。
六、1.0.1 修了什么:好内核和"能用的内核"的差距
CHANGELOG 的 1.0.1(2026-10-21)是这份开源最有信息量的部分——它把"开源第二天就有多少人踩坑"直接摊开。挑几条对使用者最要命的:
| 症状 | 现在 |
|---|---|
| 平坦 NURBS 平面没被识别成平面,带镜像副本的并集直接返回第一个操作数,两者差集失败(#1) | 已修;NURBS 盒子上的圆角也更准 |
| 合并时边容差被放大到真实间隙的两倍:环形件被包络刀具切出 2.4 的容差,换个舍入就变成 16 的缝合容差,下一次 DIFFERENCE 直接返回"没有实体材料"(#12) | 已修(只有落在边曲线容差内的分割点才被接受) |
三个等半径圆柱轴线交于一点(tricylinder)时布尔报 SM_ERR 或丢掉整条臂 |
已修 |
remove_fillet 什么都没删也报成功 |
现在只要有一个圆角面没删掉就报错(Python 里是 RuntimeError) |
circular_fillet 半径小于约 2e-4 时跑几分钟、吃好几 GB 内存(0.001 的盒子上用 0.0001) |
半径小于 8 × B-Rep 容差(默认 8e-5)一律 SM_ERR_INVALID_INPUT,B-Rep 保持不变 |
shell_brep 扩展偏移按内存地址决定边的偏移顺序 → 同输入在不同进程/不同调用顺序结果不同(#10、#21) |
改为按 B-Rep 决定的顺序;个别输入仍可能产出非实体 |
create_skin_from_faces 度数 ≥18、面数 ≥19 时栈溢出崩进程 |
度数超 1–17 一律 RuntimeError |
| Linux ARM64 上布尔结果和 x86-64 / Windows 不一致(FMA 融合),极端情况会算出"没有实体材料"(#12) | aarch64 关闭 -ffp-contract=off 的融合,与 x86 对齐 |
brep_geometry_validator 导入时顺手 heal,把要查的缺陷修掉了,而且 healer 会在非法 B-Rep 上崩 |
不再在导入时 heal,--no-healer 选项删除 |
tessellate() 慢 |
变快了(输出不变) |
volume / mass_properties / face_area / 面质心把 relative_accuracy 悄悄夹到区间内 |
取消夹取;非有限精度直接 SM_ERR_INVALID_INPUT |
读法:一个几何内核的成熟度不看它能不能做布尔(三十年前就能),而看边界条件怎么失败。1.0.1 这一版里,"报成功但其实没做"(remove_fillet)、"容差被悄悄放大到毁掉下游结果"、"同输入不同进程结果不同"——三条都是 CAD 里最贵的失败类型,两周内被点名并修掉,是好事;但也说明这类问题在这个内核里还在持续被发现。
七、还没修的坑(KNOWN_ISSUES 摘译)
这些是官方自己列的,用之前必须知道:
heal_brep会报成功但实际没修:修复各阶段(含 seam 插入)的失败不上报。兜底:修完用is_manifold_solid()或导出到 USD 后跑bin/brep_geometry_validator复核。周期曲面(环面、球、圆柱)缺 seam 或 seam 重合时的误修、极点附近丢面等一批问题都还没有 workaround。stitch_brep_with_face任何输入都崩进程(盒子的一个面、平面片的面都试过)。改用stitch_brep/stitch_into_shell/stitch_into_solid。- 浅重叠会被判成
touching:brep_relationship只在顶点、面上一采样点、边上的点找重叠;半径 1 的球压进create_box((0,0,0),20,20,10)的x=20面 0.2 深,结果仍是touching而不是interpenetrating——碰撞判断在这种量级上不可信。 - 圆角旁边三角形绕序反(渲染内翻),圆柱端盖与圆角旁的圆锥上都出现过。临时解:把
surface_angle_tolerance_deg设成 15°,作者说没再遇到。 - 球极点处的细长三角形、抽壳后不是实体(仓库自带
problemShell4.smb外偏 5.08、第 2 面开口 → 3 个面不成实体)等问题仍在列表上。
再叠上三条非技术限制:不收外部贡献、bundled 第三方组件另有条款(见 THIRD_PARTY_NOTICES.md)、Apple Silicon only。
八、对 BIM / IFC 意味着什么
先把不该说的说清楚:它不是 IFC 工具。仓库里只有 OpenCASCADE 与 STEP/IGES/JT 方向,没有 IFC 读写;几何内核开源也不等于认证(IFC 认证视图、算量规则、规范合规都不在里面);它两周大、12 个 open issue、贡献冻结。
但它解决的问题,恰好是 BIM 里最老的那一个:
- 碰撞检测的"软碰撞"终于有确定答案的路。上面场景 1 说的"测量距离与三角化容差同量级时排除碰撞不安全",就是 BIM 协同里跨专业硬碰撞的日常。IFC 本身有 B-Rep 表达(
IfcAdvancedBrep等),但实际流转到 USD/glTF 里的大多是三角化结果——精确几何能不能活到浏览器/协同平台,决定了碰撞报告能不能上会。 - "一个文件、多种精度" 是 BIM 协同的刚需:业主要看模型、结构要算、施工要净距、算量要边界。提案把这个诉求写成"消费方各自派生、不改源",正是 IFC 流转里最难做到的一件事。
- USD 正在成为 AEC 的事实底座(Omniverse 侧的数字孪生、施工模拟)。AOUSD 的工作组文档里 AECO 是被单列的一节——这次开源让"USD 里只有壳、精确几何留在各家原生格式"这个长期妥协有了替代方案。
现在能做什么:拿一个 IFC 查看器 或 在线 CAD 查看器 看模型,同时用 smlib_gui 打开同一个零件的精确几何对照——你会直观看到"三角化容差吃掉了多少净距"这件事到底有多大。这比读十篇评测有用。
九、该不该试:三条判断
值得现在动手:① 你在给产品找可商用嵌入的几何内核,且能接受早期内核的坑——Apache 2.0 + 专利授权这条比 CC 类许可干净得多;② 你的管线已经决定押 USD,需要一个能读能写 B-Rep 的 USD 工具链(转换、heal、三角化、校验都现成);③ 你想给 Agent 一套"能算精确几何"的手,而不是只会数三角面。
再等等:① 要替代 Parasolid/ACIS 做主力建模——12 个 open issue 与贡献冻结意味着你踩到的坑得自己修(许可允许,但你得有 C++ 几何工程师);② 需要成熟曲面(Class-A)、大装配性能、长期 API 稳定性承诺;③ 走 IFC 全流程、要认证与合规。
上手三步:① pip install usd-brep 跑上面五行代码,确认在你的 Python 3.12 环境里能装上;② 拿一个你自己的 STEP 用 occt_to_usd 转成 USD B-Rep,view_usd.py 打开看拓扑对不对;③ 故意做一个退化件(缝隙 1e-4、圆角半径 1e-4)看它怎么失败——内核选型的关键从来不是成功路径,而是失败路径。

图:proposals/UsdSolid 里"带内部空腔的立方体"示例的几何示意——这种"外盒 + 内球腔"在网格里要靠壳体判据才能看出来,在 B-Rep 里是显式拓扑。原图:cubevoid.png(Apache-2.0)
Sources
- 主源文:CloudNavi《NVIDIA Open-Sources the SMLib CAD Kernel Under Apache 2.0》(2026-10-13)https://cldnavi.com/en/blog/nvidia-smlib-usd-brep-2026/
- 仓库与 README:https://github.com/NVIDIA-Omniverse/usd-brep
- 官方文档站(Python / C++ API):https://nvidia-omniverse.github.io/usd-brep/
- 变更记录(v1.0.0 → v1.0.1):https://github.com/NVIDIA-Omniverse/usd-brep/blob/main/CHANGELOG.md
- 已知问题:https://github.com/NVIDIA-Omniverse/usd-brep/blob/main/KNOWN_ISSUES.md
- B-Rep 问题陈述(AOUSD 几何工作组,v0.1 DRAFT):https://github.com/NVIDIA-Omniverse/usd-brep/blob/main/proposals/cad_geometry/README.md
omniSolid/BrepArrayschema 提案:https://github.com/NVIDIA-Omniverse/usd-brep/blob/main/proposals/UsdSolid/README.md- PyPI:https://pypi.org/project/usd-brep/
- 原始发布帖(@0xca0a,ClassCAD / Buerligons.IO,2026-10-12,经主源文转述)
- 相关第三方项目:
awv-informatik/smlibpy(MIT,SMLib 的 Python 绑定)https://smlibpy.classcad.ch |tangency-labs/solidcore(Rust 重写 SMLib 的 CAD 子集)
同主题阅读
本文属于「CAD / 制造 / G-Code」专题。BimAnt 编译整理,转载请注明出处。文中版本、star 数与 issue 数截至 2026-10-23;本文未做本地编译与几何实测,行为描述以官方 README / CHANGELOG / KNOWN_ISSUES 为准,请以你自己的零件复测。
本文属于「CAD / 制造」专题。查看专题全部文章 →