大数跨境

专为 LLM 而生|sand3d,用代码描述三维装配体

专为 LLM 而生|sand3d,用代码描述三维装配体 苏哲管理咨询
2026-11-09
2
导读:sand3d 是基于 Blender bpy、面向大模型的 Python 三维建模库,以简短代码程序描述 3D 形体、特征、运动副与装配体,代码可读且 token 开销远低于原生 bpy、CadQue
编者摘要:sand3d 是基于 Blender bpy、面向大模型的 Python 三维建模库,以简短代码程序描述 3D 形体、特征、运动副与装配体,代码可读且 token 开销远低于原生 bpy、CadQuery 等方案,整套 API 仅约 3600token,适合放进 LLM 提示词。它采用命名式访问零件、边和面,无需手动计算坐标,生成结果可确定性复现。内置轮廓、实体生成、布尔编辑、定位排布、关节装配等丰富算子,支持参数化建模与带运动副的机构定义,可导出 GLB、URDF、USD、STL、OBJ 等格式,适配网页可视化、机器人仿真、3D 打印、Omniverse 等场景。环境推荐 Python3.13,兼容 3.11。项目配套 5 份开源数据集,将 Objaverse、SimReady 等海量资产转为 sand3d 代码,开放在线预览。采用 Apache2.0 协议,配套建模规范,方便 LLM 直接生成合规装配代码。

sand3d 10 个问题问与答

  1. Q:sand3d 是什么?
    A:它是基于 Blender bpy、专为大模型设计的 Python 三维建模库,用简短代码描述零件、特征、关节和装配体。
  2. Q:sand3d 最大优势是什么?
    A:代码更省 token,比原生 bpy、CadQuery 等少 2–6 倍 token;全套 API 仅约 3600token,适合放入 LLM 提示词。
  3. Q:它怎么定位零件,需要手动算坐标吗?
    A:通过名称引用零件、边、面,不需要手动计算坐标索引。
  4. Q:建模结果是否稳定可复现?
    A:具备确定性,同一段代码每次生成完全一致的网格。
  5. Q:支持哪些导出格式,分别适合什么场景?
    A:支持 GLB、URDF、USD、OBJ、STL;覆盖网页展示、机器人仿真、Omniverse、3D 打印等场景。
  6. Q:运行 sand3d 推荐什么 Python 版本?
    A:推荐 Python3.13,也支持 3.11;bpy 不支持 Python3.12。
  7. Q:能不能做带运动关节的装配体?
    A:可以,内置 joint 运动副,支持转动、滑动等机构,比如洗衣机舱门、滚筒。
  8. Q:有没有现成开源数据集?
    A:Hugging Face 上有 5 套 CC BY 4.0 数据集,把 Objaverse、SimReady 等资产转为 sand3d 代码。
  9. Q:sand3d 有没有封装桌椅这类现成物体函数?
    A:没有,不提供高层物体封装;桌椅这类模型本身就是用 sand3d 代码编写出来的。
  10. Q:项目开源协议是什么?
    A:Apache License 2.0,可在研究与项目中使用。
附录:sand3d 专为大语言模型打造的 Python 三维建模库

sand3d 是一个 Python 库,支持用简短代码程序来描述三维物体:包含截面轮廓、实体、特征编辑、坐标系、运动副与装配体,底层基于 Blender 的 bpy 模块。一段代码描述形状的生成方式,分部件、用自然的语义表达;模型仅需几百个 token 即可描述,同时人类也能读懂。

相关链接:

官网:https://sandflow.ai/sand3d/文档站点:https://sand3d.sandflow.ai/

HuggingFace 合集:https://huggingface.co/collections/Sandflow/sand3d-6aec268fbdcd3bc174236168

在线预览空间:https://huggingface.co/spaces/Sandflow/sand3d-explorer

许可证:Apache 2.0支持 Python 3.11 / 3.13,bpy 4.5 / 5.2

为什么选择 sand3d

  • 极简省 token:描述同一个零件,相比原生 Blender Python、CadQuery、FeatureScript,token 数量可减少 2~6 倍。整套 API 全部放进提示词也仅约 3600 token。
  • 基于命名访问,而非硬算坐标:零件、边、面都通过名字引用,不需要手动计算坐标索引。
  • 结果确定性强:同一段代码生成完全一致的网格,结果可复现。

完整装配体:分部件搭建

一台前置滚筒洗衣机仅需 38 行代码即可定义:柜体、滚筒、带玻璃与把手的舱门、洗涤剂盒、旋钮,每个都是独立命名零件;同时定义 4 组运动副,描述它们的运动方式。

door = s3d.group(”door”, ring, glass, handle)# 把手和玻璃随舱门一起运动s3d.joint(”door_hinge”, door, hinge, axis=”-Z”, range=(0, 143))s3d.joint(”drum_spin”, drum, front.move(0, 400), kind=”continuous”)s3d.joint(”drawer_slide”, drawer, top_band.move(150), kind=”prismatic”, axis=”+X”, range=(0, 200))s3d.joint(”dial_turn”, dial, top_band.move(-150), kind=”continuous”)return s3d.assembly(”washing_machine”, cab, drum, door, drawer, dial, front=front)

导出格式:GLB、URDF、USD、OBJ、STL

一行导出,后缀名自动指定格式;单位默认米。

s3d.export(machine, ”washer.glb”) # 也支持 .urdf, .usda, .obj, .stl
格式
携带内容
适用场景
GLB
网格、材质、运动副信息保存在节点附加数据内,保持当前姿态
网页预览、三维查看器、游戏引擎
URDF
每个可动零件对应 link,附带运动副与限位;配套 OBJ 网格文件
ROS、PyBullet、MuJoCo、Isaac 仿真
USDA
基于 OpenUSD(UsdGeom、UsdPhysics)的场景树,附带材质
Omniverse、Isaac Sim、USD 工作流
OBJ / STL
仅导出网格,保持当前姿态:OBJ Y 轴向上,二进制 STL Z 轴向上
通用三维软件、3D 打印切片软件

.usd、.usdc、.usdz 可由 .usda 文件通过 USD 自带工具(usdcat、usdzip)转换。整个场景本身就是标准 Blender 场景,Blender 原生支持的其他导出功能都可以继续使用。

安装要求

Python 3.13(推荐)或 Python 3.11。底层依赖 Blender 自带的 bpy 模块:bpy 5.2 LTS 适配 Python3.13,bpy 4.5 LTS 适配 Python3.11;CI 测试环境使用 bpy 5.2。

pip install sand3d# uv 项目中使用:uv add sand3d

注意:bpy 没有提供 Python3.12 的预编译包;5.2 版本之后 Intel Mac 环境也不支持,这类环境请使用 Python3.11。

第一个示例程序

import sand3d as s3d def bracket(w=80, d=40, t=6, hole_d=6.6, pitch=50):    plate = s3d.extrude(”plate”, s3d.rect(w, d, r=4), t)    s3d.hole(plate, hole_d, on=s3d.grid(2, 1, pitch, 0))    s3d.fillet(plate, 1, edges=”top”)    return plate s3d.export(bracket(), ”bracket.glb”)

默认单位:毫米。

快速上手文档:https://sand3d.sandflow.ai/quickstart.html装配样例展厅:https://sand3d.sandflow.ai/gallery.html完整 API 文档:https://sand3d.sandflow.ai/api.html示例代码仓库:https://github.com/Sandflow-ai/sand3d/tree/main/docs/examples/https://github.com/Sandflow-ai/sand3d/tree/main/programs/

接入大语言模型

把 docs/api.md 放入系统提示词:里面包含语法规则、全部函数签名与示例,总 token 约 3600;llms.txt 文件可以引导模型读取这份文档。对于多零件装配体,配套指南文档(https://sand3d.sandflow.ai/guidelines.html)给出了编写装配代码的 8 条原则:先总体规划、再细化细节、最后定义各个零件。

库内置能力清单

全部接口统一在 s3d.xxx 下调用:

  • 轮廓(16 个):rect 矩形、circle 圆、slot 长圆孔、polygon 多边形、poly 折线、arc 圆弧、spline 样条曲线、superellipse 超椭圆、text 文字、offset 偏移、stroke 描边等
  • 实体与路径(15 个):extrude 拉伸、revolve 旋转、sweep 扫掠、loft 放样、wire 线框、helix 螺旋线、box 立方体、cylinder 圆柱、tube 圆管、sphere 球体、torus 圆环、dome 穹顶等
  • 特征编辑(15 个):cut 求差、join 合并、intersect 求交、split 分割、hole 打孔、pocket 挖槽、fillet 圆角、chamfer 倒角、shell 抽壳、dent 凹陷等
  • 坐标系与定位:Frame、face、edge、bbox 包围盒、local 局部坐标系、at 定位、transform 变换、grid 阵列、ring 环形阵列、along 沿路径排布、snap 吸附
  • 运动机构:joint 运动副、pose 位姿、seat 定位、group 分组、assembly 装配体、attach 绑定、export 导出、units 单位、fingerprint 指纹校验等(8 个)
  • 零件与材质:gear 齿轮、knurl 滚花、thread 螺纹、material 材质

没有封装 chair()、table() 这类高层对象函数;椅子、桌子这类物品本身就是用 sand3d 代码写出来的程序。

数据集

在 HuggingFace 上开放了 5 套三维数据集,协议 CC BY 4.0,全部是 sand3d 代码形式描述三维物体:

  1. sand3d-objaverse:基于 Objaverse 日常物体,全部重写成 sand3d 程序
  2. sand3d-cad:来自公开 CAD 模型的机械零件
  3. sand3d-articraft:来自 Articraft 的带运动关节物体
  4. sand3d-simready:NVIDIA SimReady 仿真资产
  5. sand3d-automate:AutoMate 机械装配体,每个零件都参数化

在线浏览工具:sand3d-explorer

引用

如果你在研究工作中使用 sand3d,请按如下格式引用;仓库内 CITATION.cff 文件也包含该信息,GitHub 页面可一键引用。

@misc{sand3d2026,  author = {Neveu, Thibault and Loy, Andréa},  title  = {sand3d},  year   = {2026},  note   = {Version 1.6.3},  url    = {https://github.com/Sandflow-ai/sand3d}}

贡献与许可证

库的构建、测试、版本管理规范见 CONTRIBUTING.md。许可证:Apache License 2.0。


【声明】内容源于网络
0
0
苏哲管理咨询
为企业及组织提供AI+战略、数智化转型咨询及观点、建议等
内容 2490
粉丝 0
苏哲管理咨询 为企业及组织提供AI+战略、数智化转型咨询及观点、建议等
总阅读87.6k
粉丝0
内容2.5k