注册
当前位置: 彭导分享 pdsharing.com » AI技术 » 10万个3D模型,每个都是一段能改的Python代码

10万个3D模型,每个都是一段能改的Python代码

/1. 前言:这个库的玩法不一样

普通的 3D 模型库,给你的是一堆网格文件:下载回来只能看,想改尺寸、改结构,基本得回建模软件里重做。

Sandflow 刚开源的 Sand3D 反过来:它收录了 106,094 个 3D 对象,每一个对象附带的不是“成品文件”,而是一段 Python 程序。模型的每个部件叫什么名字、多大尺寸、什么材质,全写在代码里。改一个数字,重新运行,一个新模型就出来了。

这个项目 11 月 3 日才在 GitHub 开仓,几天已经有 1000 多颗星。这篇把它的来历、上手方法和坑一次说清,文末有全部直达链接。

2. 库里到底有什么

先把家底交代清楚:

  • 106,094 个 3D 对象:日常物品、家具、工具、载具、CAD 零件、机械装配都有
  • 每个对象三件套:一段 Sand3D 程序、程序旁边现成的网格文件、渲染图
  • 其中 10,456 个对象带关节,关节总数 3.6 万个,每个关节的轴向和活动范围都声明在代码里
  • 配套的运行库在 GitHub 开源,数据集在 Hugging Face 上,还有一个在线 Explorer,能直接看对象和生成它的程序
细节近看:塔吊、机械臂、桌上足球(图来自 Sand3D 数据集,CC BY 4.0)

官网首页把 288 个样例渲染图拼成一面墙,从电话亭、挖掘机到机器人手臂,全是各自那段程序跑出来的结果:

样例墙:288 个模型同框,全部由程序生成(图来自 Sand3D 数据集,CC BY 4.0)

3. 这 10 万个模型是哪来的

这一点原介绍里很少有人讲,但很关键:这些模型不是人工一个个建的。Sandflow 用自己的模型,把五个已有的开放数据集里的对象逐个重写成 Sand3D 程序,再拿程序跑出的结果和原模型逐一对照校验。

五个来源的构成是这样的:

  • Objaverse:约 6.7 万个,日常物品
  • CAD 数据:约 2.4 万个,机械零件
  • Articraft:约 9200 个,带关节的门、抽屉这类物件
  • AutoMate:约 3100 个,机械装配体
  • NVIDIA SimReady:约 2300 个,仿真用资产

所以它的定位更像是“把已有 3D 资产翻译成代码”,而不是一个全新的原创模型库。好处是量大、现成;使用时也要记得,源头数据的许可要跟着一起看。

五个来源的构成:Objaverse 占大头

4. 代码即模型,是什么意思

拿官网的煤油灯举例:整个灯就是一个 62 行的程序文件。油箱、玻璃罩、支架、提手各是一个函数,每个函数的参数就是尺寸——油箱半径、罩子高度、提手宽,全是带名字的数字。想把灯改高一点,改参数重跑就行,不用动任何顶点。

带关节的更能看出差别。一台滚筒洗衣机,38 行代码写完,顺带声明了 4 个关节:舱门铰链能开 0 到 143 度、滚筒连续旋转、抽屉沿一个方向滑 0 到 200、旋钮连续转动。关节不是渲染出来的假象,是程序里写死的数据,导出到仿真环境里能直接用。

这种写法对人友好,对大模型更友好——下一节细说。

煤油灯:62 行程序写完一个模型(图来自 Sand3D 数据集,CC BY 4.0)

5. 为什么说它天生是给大模型准备的

Sand3D 这套语言的设计目标就写在脸上:让大模型能读、能写 3D。有三个实测口径:

  • 同一个部件,用 Sand3D 写,比用 Blender 的 Python API 写少用约 4 倍 token,比 CadQuery 少约 2.3 倍,比 FeatureScript 少约 6 倍
  • 整个库的 API 大约 3600 个 token,一份文档就能完整塞进大模型的提示词里
  • 程序是确定性的:同一段代码,每次跑出的网格逐比特一致,不会这次一个样、下次一个样

再加上部件、边、面全靠名字调用,不用手算坐标,大模型写错、写歪的概率就低很多。项目方还专门准备了 llms.txt 和一份 API 文档,就是给人把这套语言“喂”给自己的大模型用的。想训练 AI 做 3D 生成、或者想让编程助手帮你改模型的人,这套数据和语言都值得收。

写同一个部件,Sand3D 用的 token 最少

6. 上手:三步跑起来

(1)先在线玩,不用装任何东西

打开文末的 Explorer 链接,里面有十几个现成对象,每个都能对照着读生成它的程序,文档站里还有可以逐个关节玩的画廊。先花十分钟搞清“程序长什么样”,比直接下载数据高效。

细节近看:健身车、显微镜、无人机(图来自 Sand3D 数据集,CC BY 4.0)

(2)装库,跑通第一个程序

安装只有一行,但有个版本坑要先知道:

pip install sand3d

它底层用的是 Blender 的 bpy 模块,只支持 Python 3.11 和 3.13,3.12 没有对应的包。装错版本是最常见的第一个报错,先对好版本再装。

跑通的标志是这段十行不到的支架程序——改 w 是改宽,改 hole_d 是改孔径:

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))
    return plate

s3d.export(bracket(), "bracket.glb")

(3)按用途选导出格式

导出就是一行 export,文件后缀决定格式:

格式带什么拿去哪用
GLB网格、材质、当前姿态的关节网页 3D、游戏引擎、查看器
URDF活动部件、关节和限位ROS、MuJoCo、Isaac 等仿真
USD完整的部件树和材质Omniverse、USD 流程
OBJ / STL只有网格任意 3D 软件、切片打印

全部入口在这里:官网 https://sandflow.ai/sand3d/ ;数据集 https://huggingface.co/collections/Sandflow/sand3d ;运行库 https://github.com/Sandflow-ai/sand3d ;在线玩 https://huggingface.co/spaces/Sandflow/sand3d-explorer 。

7. 边界和许可证,先说清

  • 只覆盖硬表面物体:家具、工具、机器、零件这类;人物、动物等有机形体不在里面,别指望拿它做角色资产
  • 模型是 AI 对照原数据重写的,拿去做产品级交付前,自己抽查几个关键对象的精度
  • 许可证是分开的:运行库 Apache 2.0,数据集 CC BY 4.0——商用可以,但用数据要署名,五个源数据集各自的许可也要一并核对

8. 总结

Sand3D 真正新鲜的地方,不是“又一个 10 万模型库”,而是把 3D 资产变成了文本:能读、能改、能让大模型直接上手。做 3D 生成训练、机器人仿真,或者单纯想收集一批能参数化改尺寸的模型素材的人,都值得现在就去收藏。先玩 Explorer,再决定要不要下数据,这是最省时间的顺序。


本文数据来自 Sand3D 官网、其 GitHub 仓库与 Hugging Face 数据集页面;样例图来自 Sand3D 数据集(CC BY 4.0)。

未经允许不得转载:彭导分享 pdsharing.com » 10万个3D模型,每个都是一段能改的Python代码

相关文章

评论 (0)

7 + 2 =

TG链接:https://t.me/pengdirect