云计算百科
云计算领域专业知识百科平台

用 SMLib + Claude Code 做一个 CAD 资产生成 Agent

“让 AI 帮我建模”这件事,SMLib 仓库已经做了一半:根目录有 AGENTS.md、.agents/ 下有 22 篇操作指南、19 个 Agent 技能,还有完整的 text-to-3D 参考实现。

这篇做完整实战:用 Claude Code(或其他 coding agent)基于 SMLib 做一个“文本→3D 资产”的 CLI。

一、准备环境

# ① 装 SMLib Python 包(官方 PyPI 有 manylinux wheel)
pip install usd-brep

# ② 准备一个 coding agent(Claude Code 为例)
# 也可以换成 Cursor / Codex / 其他任意 agent

# ③ 拿到仓库(agent 需要读 AGENTS.md 与 .agents/)
git clone https://github.com/NVIDIA-Omniverse/usd-brep.git
cd usd-brep

注意:pip install usd-brep 需要 Python 3.12(官方 wheel 为 cp312)。

二、先理解 Agent 的“工具箱”

资源作用
AGENTS.md 给 Agent 的作业指南(构建、架构、代码风格)
.agents/docs/generate_asset.md text-to-3D 标准流水线(本实战的指导文档)
.agents/skills/text-to-3d-asset-generation/SKILL.md 文本生成资产的技能说明
tools/scripts/example_generate_asset.py 完整可运行的参考实现
tools/scripts/view_usd.py 渲染 USD 截图(结果验证)

三、实战:让 Agent 写一个 CLI

1. 把提示词交给 Agent

在仓库目录里对 Claude Code 说:

用 SMLib 的 text-to-3D 流水线,帮我写一个 CLI 工具:
输入一个物体名称(比如 "gearbox"),输出一个 mesh-only 的 USDA 文件。

要求:
– 用 _omni_solid(import usd_brep as sm)构建几何
– 几何用参数化方式构建,尺寸用变量
– 镶嵌后用 PolyBrep.to_mesh_arrays() 生成 UsdGeom.Mesh
– 输出 z-up、厘米单位(SetStageUpAxis(z)、SetStageMetersPerUnit(0.01))
– 参考 tools/scripts/example_generate_asset.py 的结构
– 完成后用 tools/scripts/view_usd.py 截图验证

2. Agent 会照着官方流水线实现

① 用 SMLib 构建几何
├─ 解析图元:create_box / create_sphere / create_cylinder / create_torus…
├─ NURBS 曲线曲面:create_curve_interp_points / create_surface_from_points…
└─ 组合成形:linear_sweep / boolean_union / fillet_edges…
② 镶嵌:sm.tessellate(brep) → PolyBrep
③ 取数组:PolyBrep.to_mesh_arrays() → {points, normals, faces, face_normals}
④ 写 USD:UsdGeom.Mesh(每部件一个 prim)+ SetStageUpAxis(z) + SetStageMetersPerUnit(0.01)
⑤ 验证:view_usd.py –screenshot <png> <usda>

3. 参考实现长什么样

官方 example_generate_asset.py 的核心结构:

import _omni_solid as sm # 几何:SMLib Python 绑定
from pxr import Usd, UsdGeom, Sdf, Vt, Gf # 发布:USD

def build_parts():
parts = []
base = sm.create_box((–5, –5, 0), 10, 10, 3)
sm.fillet_edges(base, base.edges(), radius=0.5) # 圆角
parts.append(("base", base, (0.30, 0.60, 0.95)))
parts.append(("post", sm.create_cylinder((0, 0, 3), 0.8, 6.0)))
parts.append(("ball", sm.create_sphere((0, 0, 9), 1.5)))
return parts

关键点:USD 只在最后一步接触——中间全程在 SMLib 栈内完成,输出里不写 BrepArray,纯网格资产。

四、Agent 的最佳实践(官方 Ground Rules)

规则说明
从参考脚本开始 复制 example_generate_asset.py 改造,不要从零写
选最简单的构建方式 图元合适就用(精确、镶嵌干净);扫掠/旋转/NURBS 往往比"堆图元+布尔"更干净
参数化建模 尺寸用 Python 变量,不要散落魔法数字
一个资产一个脚本 便于维护与复用
USD 只在最后接触 中途别在 BRep 与 USD 之间来回转(有精度归一化损失)
失败不要手改 USD 掩盖 去查 errors.md 或对应操作指南

五、进阶:用技能分诊

Agent 遇到复杂问题时,用仓库里的技能(每个是一份 SKILL.md):

问题类型用哪个技能
几何构建/布尔/圆角失败 smlib-kernel-booleans / smlib-kernel-fillets
镶嵌参数不对/网格异常 smlib-kernel-tessellation
Python API 用法 smlib-python-api-use
从文本生成资产 text-to-3d-asset-generation
USD 数据/结构问题 usd-brep-data-author / usd-brep-schema

六、验证结果

# 运行生成的脚本
python your_cli.py –object gearbox –output gearbox.usda

# 截图验证
python tools/scripts/view_usd.py –screenshot gearbox.png gearbox.usda

检查点:

  • 截图里模型形状合理、无破面;
  • PolyBrep.to_mesh_arrays() 返回的数组非空;
  • USDA 能被 Omniverse viewer / usdview 打开。

七、常见坑

坑解决
环境缺 _omni_solid 确认 Python 3.12 + pip install usd-brep(或按仓库构建)
Agent 没用技能 明确告诉它"读 .agents/skills/text-to-3d-asset-generation/SKILL.md 再动手"
输出带 BrepArray 说明 Agent 走错了发布路径——应输出纯 mesh
布尔后输入被消耗 布尔是消耗型操作,别复用输入
镶嵌太粗糙/太精细 见 《镶嵌参数调优》

八、一句话总结

SMLib 的 Agent 化门槛很低:AGENTS.md + 技能 + 参考脚本就是"AI 建模工具箱"。你只需给 Agent 一个明确的文本→资产流水线提示词,剩下的几何构建、镶嵌、USD 发布它都能照官方文档写出来。


系列文章

SMLib 系列共 8 篇,本篇为第 8 篇,可互相跳转:

  • 第 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 导入模型修复实战》
  • 第 7 篇:《SMLib 镶嵌(Tessellation)参数调优:chord-height 与角度容差怎么选》
  • 第 8 篇(本文):《用 SMLib + Claude Code 做一个 CAD 资产生成 Agent(实战)》

仓库:https://github.com/NVIDIA-Omniverse/usd-brep(Apache 2.0,C++ / Python)

赞(0)
未经允许不得转载:网硕互联帮助中心 » 用 SMLib + Claude Code 做一个 CAD 资产生成 Agent
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!