【免费下载链接】usd-brep
USD BRep is a standalone C++ and Python library for NURBS-based boundary representation (BRep) solid modeling
usd-brep 是一个独立的 C++ 与 Python 开源库,提供基于 NURBS 的边界表示(BRep)实体建模能力。它内置了一条完整的text-to-3D 资产生成管线:用文字描述一个物体,经 SMLib 内核建模、网格化(tessellate),最终产出可在 Omniverse 中直接打开的 USD 3D 模型(USD Mesh 资产)。本文将带你完整拆解这条 USD BRep 3D 资产生成工作流的每一步。
一、先认识 USD BRep:精确几何的 3D 建模引擎 🧊
传统 3D 资产多为网格(Mesh)或细分曲面,而usd-brep的核心是精确的 NURBS 实体建模:
| 组件 | 作用 |
|---|---|
SMLib(NURBS/BRep 内核) | 负责精确几何计算,源码见 source/SMLib/ |
SM_API(C 风格稳定 C++ 封装) | 对外暴露稳定 API,见 source/SM_API/ |
_omni_solid(Python 绑定) | 让 Python 一行行“写脚本即建模”,见 source/SmPyLib/ |
BREP_SM_USD/USD_BREP_UTILS | BRep 与 USDBrepArray之间的双向桥接 |
上图是 UsdSolid 提案中 USD BRepArray 实体在渲染视图中的效果——两个精确的 BRep 立方体。BRep 能表达解析曲面、NURBS 曲面、精确布尔运算和圆角,这正是网格无法做到的。关于 BRep 在 OpenUSD 中的完整 schema 设计,可阅读 proposals/UsdSolid/README.md。
二、text-to-3D 管线:一条描述如何变成 3D 模型 🚀
这条管线的“标准操作手册”就在 .agents/docs/generate_asset.md,它定义了四个阶段:
文字描述 ──► ① SMLib 精确建模 ──► ② 网格化 ──► ③ 网格数组 ──► ④ 写入 USD 场景| 步骤 | 做什么 | 关键 API |
|---|---|---|
| ① 建模 | 用解析基元(盒/球/柱/锥/环)、自由 NURBS 曲面,配合 sweep、extrude、revolve、布尔运算、fillet 圆角,搭建出精确 BRep | sm.create_box、sm.boolean_union、sm.fillet_edges… |
| ② 网格化 | 把精确 BRep 转为多边形 PolyBrep | sm.tessellate(brep) |
| ③ 网格数组 | 取出points/faces/normals数据 | PolyBrep.to_mesh_arrays() |
| ④ 发布 USD | 每部件一个UsdGeom.Mesh,组成 z 轴向上、厘米单位的单一.usda | pxr(OpenUSD Python) |
一个值得注意的设计原则:输出 USD 中只写网格,不写BrepArray。USD 只出现在管线最后一步,几何全部由内核完成——这保证了生成的 USD 3D 模型能被任何支持UsdGeom.Mesh的工具直接消费。
三、5 分钟上手:构建并运行资产生成示例 ⚡
仓库提供了可直接运行的参考实现 tools/scripts/example_generate_asset.py——它用 4 个基元搭出一个“底座 + 立柱 + 圆球 + 圆环”小资产。
一键构建(Linux / macOS 用./repo.sh,Windows 用./repo.bat):
./prebuild.sh # 准备 schema 资源 ./repo.sh build # 拉取依赖并编译全部目标生成资产并截图:
uv run --locked --group gui python tools/scripts/example_generate_asset.py uv run --locked --group gui python tools/scripts/view_usd.py --screenshot out.png _assets_output/ExampleAsset.usda产出约定:_assets_output/<AssetName>.usda,z 轴向上、metersPerUnit=0.01(厘米级),每个部件对应一个 Mesh prim,可选primvars:displayColor上色。
四、三种方式查看你的 USD 3D 模型 🔍
- 批量截图:
tools/scripts/view_usd.py --screenshot离线渲染 PNG,适合嵌入文档或做视觉回归测试; - 交互式 PyVista 检查:直接运行
view_usd.py <你的.usda>,支持快捷键实时调节细分容差、切换线框/着色、开启 BRep 修复器——调试网格质量最快; - Omniverse 查看器:直接打开生成的
.usda,验证材质预览、灯光与 USD 组合(references / variants)。
五、不想写脚本?试试 SMLib 3D 建模 GUI 🖱️
usd-brep 自带一个图形界面 tools/scripts/smlib_gui.py(详见 tools/smlib_gui/README.md):
- 源码编辑器:在窗口里直接写
sm.create_sphere(...)这类 Python 建模脚本,按 Run 即时在视口中回放下 3D 结果; - 用户测试面板:编号化的
test_N()用例,方便反复回放出错步骤; - 拓扑检查与统计:实时显示面/边/顶点数量,辅助定位问题;
- 无头渲染:
smlib_gui_render.py可递归扫描目录,把.smb/.brep/.usd文件批量渲染成四视角联系图,报告输出为 JSON。
六、控制模型质量:网格化参数速查表 🎛️
sm.tessellate的容差决定精度与三角面数量的平衡(参数来源:.agents/docs/generate_asset.md 第 7 节):
| 使用场景 | chord_height_tolerance(弦高) | 曲线 / 曲面角度(度) |
|---|---|---|
| 近距离渲染、CAD 级精度 | 0.001 | 5 |
| 一般可视化 | 0.01 – 0.05 | 15 |
| 预览 / 远景 LOD | 0.1 | 30 |
💡 经验法则:弦高容差减半,三角面数量大约翻四倍。厘米级小资产上0.01已经足够细腻。
七、相关路径清单(按需深入)
- 项目总览:README.md
- text-to-3D 标准管线手册:.agents/docs/generate_asset.md
- 可运行参考实现:tools/scripts/example_generate_asset.py
- USD 查看 / 截图工具:tools/scripts/view_usd.py
- USD BRep 资产修复:tools/scripts/usd_brep_heal.py
- 交互 GUI 源码:tools/smlib_gui/
- 分层 API 示例(Python / C++ / 内核):Examples/
- Python 文档:docs/python.rst
- BRep 测试资产库:TestFiles/
写在最后
usd-brep 把“精确实体建模”和“USD 资产发布”串成了一条清晰的流水线:文字描述 → SMLib 精确几何 → 网格化 → 通用 USD 资产。对新手而言,从 tools/scripts/example_generate_asset.py 复制修改是最快的上手指引;对工程团队,这套 text-to-3D 管线让参数化、可复现的 3D 模型资产生产成为现实。🎯
【免费下载链接】usd-brep
USD BRep is a standalone C++ and Python library for NURBS-based boundary representation (BRep) solid modeling
相关推荐
OpenStack Swift与S3兼容性:如何实现跨云存储迁移
OpenStack Swift与S3兼容性:如何实现跨云存储迁移 OpenStack Swift作为开源对象存储解决方案,提供了与Amazon S3兼容的API
存储后端1 次跑通 llama.cpp 的 Qwen2.5 工具调用:实战命令与避坑清单
1 次跑通 llama.cpp 的 Qwen2.5 工具调用:实战命令与避坑清单 llama.cpp 原生支持 Qwen2.5 系列的工具调用(function
人工智能大模型模型推理服务推理引擎本地部署后端终极Objective-C运行时教程:基于gh_mirrors/ob/objc4源码的深度剖析
终极Objective C运行时教程:基于gh_mirrors/ob/objc4源码的深度剖析 Objective C运行时(Objective C Runti
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考