生图3D类

AI 生 3D 缺的不是模型,是教材:法国团队把 10.6 万件物体重写成 Python 代码,连关节都标好了

2026年11月7日1 次阅读
AI 生 3D 缺的不是模型,是教材:法国团队把 10.6 万件物体重写成 Python 代码,连关节都标好了

3分钟看懂版:这次放出来的不是模型,是一本「给 AI 用的 3D 教科书」

过去两年,AI 生成 3D 的新闻基本都是同一个套路:又出了一个模型,又能文生 3D 或者图生 3D,参数更大、面数更高、速度更快。

11 月 5 日,法国里昂的初创公司 Sandflow 放出来的东西不一样。它没有发布新模型,而是开源了两样东西:

  • 一门叫 sand3d 的 Python 库,用几十行代码就能描述一个带零件、带尺寸、带关节的三维物体;
  • 一份 106,094 件物体的数据集 Sand3D,每一件都被重写成一段这样的程序,附带导出好的 3D 文件、渲染图和原始出处。

换句话说:别人在教 AI「画出形状」,它在教 AI「写清楚这东西是怎么造出来的」。

为什么这件事值得单独写一篇?因为 3D 生成这两年真正卡住的地方,从来不是模型不够大,而是没有像样的教材。语言模型能写代码,是因为网上有几万亿 token 的文本和代码;3D 模型学得别扭,是因为公开的 3D 数据大多是「三角面汤」——一堆顶点坐标,没有零件、没有层级、没有尺寸含义,还经常破面。

Sand3D 想做的,就是把 3D 从「一堆坐标」变成「一段能读、能改、能重跑的程序」。

谁该看这篇:做游戏和 XR 资产的人、做机器人仿真的人、做参数化 CAD 的人,以及所有想把「让 Claude 或 GPT 直接产出可编辑模型」这件事落地的人。

它到底发布了什么:一份能核对的事实清单

先把硬数据列清楚,这些都能在官方渠道一条条对。

  • 总量:106,094 件对象,覆盖几千个类别,从螺丝到三角钢琴。
  • 五个来源(各子集独立开源):
  • Objaverse 重写版:66,887 件
  • 机械 CAD 件:24,495 件(Zero-To-CAD 16,766 + CADFS 7,729)
  • Articraft 关节物体:9,209 件
  • AutoMate 机械装配:3,169 件(872 个装配体、2,297 个零件)
  • NVIDIA SimReady 仿真资产:2,334 件
  • 关节:10,456 件带活动关节,合计约 36,000 个关节,每一个都对着原始资产校验过。
  • 每件对象包含什么:一段可运行的程序、一个导出的 OpenUSD 文件(含 joints,能在网页 3D 查看器里直接转)、一张渲染图、以及它的原始来源标注。
  • 授权:库是 Apache-2.0,数据集是 CC BY 4.0,两者都允许商用。这点对做产品的人很关键——不是「研究用途」那种半开放。
  • 时间线(这是判断「新不新」的关键):GitHub 仓库创建于 11 月 3 日,PyPI 上 1.6.1 版本发布于 11 月 4 日 18:30 UTC,五个数据集 11 月 4 日上传,官方新闻稿和 Hugging Face 官方博客都是 11 月 5 日。目前最新版本 1.6.3(11 月 6 日)。
  • 官方路线图:Sandflow 说 12 月中旬会发布自家的第一个 3D 基础模型。这家公司原名 Chat3D。

顺手给一个旁证:数据集里最大的那个子集 sand3d-objaverse,上线两天 Hugging Face 下载量已经到 2.2 万次左右,GitHub 仓库 800 多星。这个热度说明一件事——大家确实在等这样的东西。

为什么不走「直接生成网格」那条路

要理解这件事的价值,得先理解现在 3D 生成的问题在哪儿。

一个 .obj 或 .glb 文件,本质是一张表:几万个顶点坐标,加上它们怎么连成三角面。它只描述表面长什么样,不描述这东西是什么。你没法问它「这个抽屉的滑轨能不能拉长 5 厘米」,因为文件里根本没有「抽屉」和「滑轨」这两个概念。

Objaverse 是目前开源 3D 研究用得最多的数据集,但它出了名的脏:三角面汤、破面、物体没有零件拆分。团队要么让模型去适应这些噪声,要么自己做一套很重的清洗流程——而清洗后的版本大多没有公开。干净的 3D 数据,长期锁在少数公司手里。

Sand3D 换了个思路:不存表面,存配方。

一段 sand3d 程序长这样(官方 README 里的例子,一个带孔的支架):

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")

这里没有一个手算的坐标。宽 80、深 40、厚 6,都是参数;孔位按「2 列 1 行、间距 50」的网格摆;倒角只作用在上边缘。想改成 100 宽?改一个数字,重跑,模型跟着变。

这套写法带来三个直接结果:

第一,省 token。 官方给的中位数对比是:同一个零件,用 sand3d 写比用 Blender 的 Python 接口(bpy)写少 4.0 倍 token,比 CadQuery 少 2.3 倍,比 FeatureScript 少 6.0 倍,比 Articraft SDK 少 2.0 倍。整个 sand3d 的 API 说明大约 3,600 token,能整段塞进系统提示词。这意味着一个普通模型也能「学会这门语言」,不用先微调。

第二,模型知道什么时候该停。 这是 3D 代码生成里一个很实际的老问题:模型会陷进循环、无限加细节、或者写到一半忘了自己要造什么。sand3d 强制「结构先行」——程序开头先写一个和物体同名的函数,里面只有零件清单和它们的装配关系,不含几何;后面每个零件一个函数,细节往里填。模型先立好目录,再逐个填,写完清单上的零件就知道收工了。

第三,结果可验证、可复现。 同一个程序,跑出来是逐位相同(bit for bit)的网格。这让「AI 提出方案 → 跑一遍 → 看结果 → 改参数」形成一个闭环。人不满意就改一个数,不用重新抽卡。

一个更完整的例子:38 行的洗衣机

官网上放了一台前开门洗衣机:38 行代码,带四个关节(门、抽屉、旋钮之类),能导出三种文件。

这个例子里最值得注意的细节是那句「门的原始资料是 143°,实际限位是 92°」——关节不是随便标一个角度,而是按真实产品的物理限位来写的。这正是 Sand3D 反复强调的「每个关节都对着原始资产校验过」的含义。

导出格式这块也给得比较全,一次调用、按扩展名决定格式:

  • GLB:网格 + 材质 + 每个节点里带着关节信息,用于网页、查看器、游戏引擎
  • URDF:每个活动部件一个 link,带关节和限位,配 OBJ 网格,用于 ROS、PyBullet、MuJoCo、Isaac
  • USDA:同一棵树写成 OpenUSD(UsdGeom / UsdPhysics),带材质,用于 Omniverse、Isaac Sim
  • OBJ / STL:只有网格,用于任意 3D 工具和切片软件

注意 URDF 那一栏。这是这份数据集和「好看但没用」的 3D 生成结果之间最大的区别之一:它直接能进机器人仿真。做具身智能的团队,最缺的就是带正确关节轴和限位的场景资产,而不是一张好看的渲染图。

怎么用:从零到第一个可导出模型

不需要 GPU,不需要训练,普通笔记本就行。下面是完整步骤。

第一步:确认 Python 版本。 要 3.11 或 3.13,别用 3.12。原因是底层依赖 Blender 的 bpy 模块,而 bpy 没有 Python 3.12 的预编译包。官方推荐 3.13(对应 bpy 5.2 LTS);如果你在 Intel Mac 上,用 3.11(对应 bpy 4.5 LTS)。

第二步:装。

pip install sand3d

用 uv 的话是 uv add sand3d。Blender 会作为 bpy 模块一起装进来,不用另装 Blender。

第三步:跑通官方那个支架。 把上面那段 bracket 代码存成 .py 跑一遍,同目录会出现 bracket.glb。拖进 Blender、Unity、Godot 或者任意在线查看器,能转就说明环境通了。默认单位是毫米。

第四步:把 API 说明喂给模型。 仓库里的 docs/api.md 大约 3,600 token,包含所有函数签名、书写规则和可用示例,直接放进 Claude、GPT 或本地模型的系统提示词。仓库还有 llms.txt,专门给模型指路。做多零件装配的,再补一份 guidelines(八条装配程序规则:先计划、再细节、然后零件)。

第五步:让模型写,你来验收。 建议的提示词写法是:说清这是什么物体、有哪些零件、关键尺寸范围、哪些部位要能动。模型产出程序后直接运行——能跑通、能导出,才算过关。跑不通就让它改,别自己去调坐标。

第六步:要用现成资产就直接拿数据。 五个数据集都在 Hugging Face 的 Sandflow 组织下,先用 Explorer(一个在线 Space)点开看模型、看代码、转着看,觉得合适再下载。数据集体积不小,按需拉子集,别一次全下。

适用场景:谁最适合现在上手,谁先别急

适用场景

适合:

  • 做硬表面资产的:家具、工具、机械件、家电、器械。这是官方明确覆盖的主战场。
  • 做机器人仿真 / 具身智能的:需要带正确关节的 URDF/USDA,而不是一张图。这条可能是最有价值的用法。
  • 做参数化产品配置的:同一款产品要出几十个规格,改参数重跑比重新建模快得多。
  • 想把 LLM 接进 3D 管线的:3,600 token 的 API 说明,是目前少见的「模型能整段吃下」的 3D 语言。

不适用场景

先别急:

  • 要角色、动物、有机形体的。官方自己在「局限性」里写得很明确:这一版以硬表面为主,角色和有机体还没覆盖,需要给库新增隐式曲面(比如 metaball)、细分曲面、沿曲线扫掠、蒙皮骨架这些动词。也就是说,这不是「还没调好」,是「语法还没有」。
  • 要照片级细节的影视资产。程序化建模的强项是结构和可编辑性,不是皮肤毛孔和布料褶皱。
  • 想扫描真实物体的。这是重建(reconstruction)的活儿,跟这套东西不是一个方向。
  • 想要开箱即用的成品模型库的。它给的是程序 + 导出文件,不是「下载就能用的美术资源包」。虽然能直接导 GLB,但风格是几何准确优先,不是美术风格化。

常见错误与避坑

把它当成又一个 text-to-3D 模型。 它本身不生成任何东西。生成要靠你接的语言模型写程序,sand3d 只负责「让程序变成模型」。搞错这点会非常失望。

用 Python 3.12。 装不上,报错还不太好懂。看到 bpy 相关的 wheel 报错,先查版本。

以为数据里是 quad 网格。 程序本身构建的是 quad-dominant 拓扑,但今天发布的 OpenUSD 文件在导出时做了三角化。要 quad 就在库里自己跑程序导出,别指望从 USD 里抠出来。

把 F-score 当质量评分。 数据集给每件物体标了 F-score,那是「程序重建出来的表面和原始资产的吻合度」,在包围盒对角线 1% 的阈值下算的。它是筛选门槛:Objaverse 和静态 SimReady 低于 0.70 的被剔除,CAD 和刚性 Articraft 低于 0.90 的剔除,带关节的要求每个零件都到 0.90 且关节全对。它不是「这个模型有多好看」的分数。

指望它提供 chair() 这种类别函数。 官方明确说不做类别动词——「椅子」本身就是一个用 sand3d 写出来的程序。这是设计选择,不是缺失。

一次下全量数据集。 五个子集加起来体量很大,先看 Explorer 挑需要的类目。

成本与时间

  • 钱:0。库 Apache-2.0,数据集 CC BY 4.0,商用允许。真要花钱的地方是你接的那个语言模型的 token。
  • 环境:5~10 分钟,主要花在等 bpy 下载。
  • 单个零件:几十行代码的量级。官方示例里,巴松管 30 行、鼓 43 行、办公椅 255 行、跑步机 406 行——复杂度差别很大,但都在「一次对话能写完」的范围内。
  • 学习曲线:如果你会 Python,基本是「读一遍 API 说明就能上手」;如果不会,让模型写、你只改参数,也完全可行。

这件事对行业意味着什么

第一,争的是「语料层」,不是「模型层」。 语言模型能有今天,靠的是 Common Crawl 那种规模的文本。3D 一直没有等价物。Sand3D 的赌注是:谁定义了「模型该怎么写 3D」,谁就定义了下一代 3D 输出的默认格式。这比多发一个榜单高 2 个点的模型,长期影响大得多。

第二,和 NVIDIA 是互补,不是打架。 10 月 21 日 NVIDIA 和 Hugging Face 刚上线 SimReady Central(2000 多件为机器人仿真准备的资产)。Sand3D 里直接收了其中 2,369 件,重写成代码。官方自己的说法很准确:标准 3D 文件描述表面,Sand3D 描述构造方式,两者互补。

第三,对国内团队有直接参考价值。 混元、Tripo、Meshy 这些走的是模型侧——把生成质量往上顶。Sand3D 走的是数据 + 语言侧。两条路不冲突,而且数据侧这条路,国内完全有能力做:我们有大量工业 CAD 资产和产品模型,缺的只是「把它们变成模型能读的代码」这套流水线。Sandflow 用的就是自研的 agentic 重建流水线——让 AI 把既有资产重写成程序,再跑程序生成文件。这个思路,是可以照着做的。

第四,12 月中的那个基础模型值得盯。 官方说了要发。如果它是在这套代码语料上训的,那它输出的就不是网格,而是程序——那可编辑性和可控制性会是另一个层级。现在进场熟悉语法,正好赶在它前面。

给新手的第一步

今天就能做的三件事,按顺序:

  1. pip install sand3d(Python 3.13),把官方 README 里那个 bracket 跑通,导出 GLB,拖进任意查看器看一眼。
  2. 把 docs/api.md 丢给 Claude 或 GPT,然后说:「用 sand3d 写一个带两个抽屉、抽屉能拉开的床头柜,宽 45 厘米。」
  3. 跑它给的代码。跑不通就把报错贴回去让它改;跑通了就改一个参数(比如宽度改成 60),再跑一遍,看模型是不是真的跟着变。

第三步做完,你就理解了这套东西的全部意义:它不是让你抽卡抽到一个模型,是让你拿到一份能一直改下去的设计。

参考来源与说明

本文基于 Sandflow 官方发布信息整理。核心事实(数量、授权、导出格式、时间、路线图、局限性)来自三条一手来源:

https://sandflow.ai/press/3d-as-code-dataset/

https://huggingface.co/blog/Sandflow/sand3d-106094-3d-objects-in-one-code-substrate-for

https://github.com/Sandflow-ai/sand3d

时间与规模另有旁证:GitHub 仓库创建时间 2026-11-03、PyPI 版本发布时间 2026-11-04 / 11-06、Hugging Face 五个数据集创建时间 2026-11-04。此外,FabScene(日文,11-06)、AI Flux(中文,11-06)、news.the9.pro(11-06)、nnets.ru(11-06)等多家媒体在 11 月 5~6 日对同一发布做了转述报道,核心事实一致,本文部分行业解读参考了这些转述的视角。

需要说明的边界:文中的 token 节省倍数、API 体积、F-score 门槛均引自官方文档,本文未做独立复现实验;「12 月中旬发布基础模型」是官方计划,尚未发生。

评论

0 条已公开
登录或注册后可以参与评论。

正在加载评论...