
如果你还停留在“CAD 建模 鼠标拉草图 特征树里一个个推拉”的阶段那 text-to-cad 这个方向值得你认真了解一下。简单说text-to-cad 就是把一句自然语言描述直接转成三维 CAD 模型——你输入“一个直径 50 毫米的圆盘中心有一个 10 毫米的通孔”系统返回给你一个可编辑的 STEP 文件或参数化特征树。它不是文生图不是把文字变成一张好看的渲染图而是生成真正能被 SolidWorks、FreeCAD 这类软件打开、能继续编辑和加工的几何体。这件事的价值在于它把“从想法到三维几何”的时间压缩到分钟级尤其适合早期概念探索、备件快速建模、3D 打印原型这些场景。不管你是机械工程师、工业设计师、3D 打印玩家还是在校学生这篇文章都会从原理到实操把 text-to-cad 讲透。1. text-to-cad 到底在解决什么问题1.1 一句话理解从自然语言到参数化几何传统 CAD 建模的核心是“人操作软件”设计师脑子里有图手上一点点把它画出来。text-to-cad 想做的事是让“画出来”这个过程自动化你把脑子里那个零件的特征描述出来模型负责把描述翻译成几何操作序列。比如“一个边长为 40 毫米的正方体顶部中心有一个深度 15 毫米的盲孔”——这句话在 CAD 软件里对应的是“新建草图、画正方形、拉伸 40、再在顶面画圆、切除拉伸 15”这一串操作。text-to-cad 要做的就是从自然语言里提取出这些操作所需的信息然后生成对应的特征序列。这个“特征序列”很关键。CAD 模型和普通三维网格比如游戏里的 OBJ、GLTF最本质的区别就是 CAD 模型带参数化历史——你打开一个 STEP 文件看到的不只是表面三角形而是一棵特征树里面有基准面、草图、拉伸、切除、倒角这些可修改的节点。text-to-cad 如果只是输出一个看起来像某个零件的网格那它在工程上几乎没有价值因为你没法改尺寸、没法重新编辑、也没法直接进 CAM 加工。这也是 text-to-cad 和传统文生三维最大的分水岭它追求的不是视觉像而是工程语义上的正确和可编辑。1.2 它和文生图、文生视频有什么本质区别之前大家熟悉的文生图本质上是在像素空间里做对齐——文本编码器和图像生成器一起训练最终输出一张二维位图。文生三维比如 Point-E、Shap-E更进一步输出的是点云或者神经辐射场能看、能旋转、能渲染但你要把它拉到 CAD 软件里做尺寸标注和特征编辑基本等于重新建模。text-to-cad 的目标层级完全不同。它要在 CAD 的数据结构里生成内容也就是说它必须理解“拉伸”“切除”“阵列”“倒角”这些操作到底对几何体做了什么还得知道这些操作之间的依赖顺序。你可以把 CAD 模型理解成一道菜谱网格模型是最终端上桌的菜的照片text-to-cad 生成的是菜谱本身——哪个步骤切菜、哪个步骤下锅、火候多少。照片再好看你也不能直接拿照片去厨房复刻但菜谱可以。所以 text-to-cad 更适合被称为“程序化内容生成”它和自然语言处理里的“代码生成”关系更近和“文生图”反而远。1.3 哪些场景真正需要它我实际体验下来的感受是text-to-cad 现阶段最舒服的应用场景有三类。第一类是早期概念探索。设计师接需求时对方可能只说“我需要一个能固定电机的底座大概这么大小”传统做法是画一堆草图试探方向而 text-to-cad 能瞬间给出多个候选形状帮你在几分钟内筛掉明显不合理的方案再进入精细建模。第二类是备件和标准件快速建模。车间经常遇到“这个零件买不到需要照着样子做一个”的情况老法师看图量尺寸要半天现在直接把描述丢给模型先出个基础形进 CAD 里微调即可。第三类是 3D 打印玩家的快速原型。尤其是一些结构简单的零件比如手机支架、线缆固定扣、管道接头描述清楚孔位和尺寸生成之后再导出 STL 切片打印整个流程比从头画要快很多。这个过程还不够完美但它已经把“从想法到实体”的最小闭环打通了。2. 技术原理拆解系统内部发生了什么2.1 两条技术路线视觉派与特征派text-to-cad 不是单一算法而是两条技术路线的总称理解这两条路线你才知道自己调用的工具到底在生成什么。第一条是视觉派也叫网格或神经场路线。代表工作是 OpenAI 的 Shap-E、Point-E以及一批基于扩散模型的三维生成工作。它们的做法是文本编码器把句子变成向量然后一个生成网络把这个向量解码成点云、体素或隐式场比如 SDF 符号距离场再通过 Marching Cubes 之类的算法提取出网格模型。视觉派的特点是“完全数据驱动、什么形状都有可能生成”但缺点也很明显——输出是网格没有特征树没有尺寸约束工程上只能当参考。第二条是特征派也叫序列生成或程序化路线。代表工作是 Text2CAD、CADFusion 这类论文和项目。它们把 CAD 建模过程看作一个“命令序列生成”问题——先画哪个草图用什么约束拉伸多少再在哪切一个孔。模型不是直接生成几何而是生成一串 CAD 操作指令然后由一个固定的 CAD 引擎执行这些指令最终得到带参数历史的模型。特征派更接近机械工程师的思维方式但它的难点在于操作序列的搜索空间大得惊人而且一步错步步错。两条路线各有各的用武之地。视觉派更像“启发灵感”特征派更像“替代体力劳动”。如果你要的是能修改、能加工的模型那就只能选特征派——这也是我认为 text-to-cad 这个名字真正应该指代的东西。2.2 文本编码器把自然语言变成什么所有 text-to-cad 系统第一个环节都是自然语言理解。这里通常不会自己造轮子而是直接用预训练的语言模型比如 BERT、T5 或者 CLIP 的文本分支来把输入句子编码成向量。CLIP 文本分支的好处是它在设计之初就是跟图像或三维数据对齐训练的语义空间里相近的句子会得到相近的向量BERT 这类模型则更擅长捕捉句法结构、单位和数量关系。实操中要特别注意文本编码器对“尺寸描述”的敏感程度不一。“40 毫米”和“4 厘米”在语义上可能是同样含义但编码器可能把它们映射到不同向量。所以大部分项目会在数据处理阶段做单位归一化把“4cm”“40mm”“0.04m”全部统一成一种内部单位。这个细节看起来不起眼实际影响很大我试过输入“10cm”和“100mm”生成同一个零件结果一个完全正常另一个直接尺寸溢出原因就是模型在训练时见过前者没见过后者。2.3 几何表示与生成方式特征派模型内部不会直接操作三角形网格它操作的是 CAD 的中间表示。常见的有两种CSG 树构造实体几何和草图-特征序列。CSG 树比较好理解就是把几何体表示成基本体素的布尔运算组合——“圆柱 A 与长方体 B 求交集再减去球体 C”。这种表示紧凑且结构清晰文本描述里的“切除”“相交”能直接映射到布尔操作上。但有经验的人都知道CSG 树生成的模型往往和真实设计意图有偏差真实工程师会先画草图再拉伸而不是拿几个标准体素拼。草图-特征序列是更接近实际工作流的表示。模型生成的内容包括草图平面、草图曲线直线、圆弧、样条、尺寸约束、几何约束平行、垂直、同心然后是拉伸、切除、旋转、倒角等特征操作。这种表示的生成难度比 CSG 树高一个量级因为序列长度动辄几十上百而且强依赖关系多——第 30 步的倒角必须作用在第 28 步拉伸出来的边上。现在的 Text2CAD 模型基本都采用 Transformer 解码器逐 token 生成这个序列类似代码生成模型的做法。2.4 训练数据从哪来text-to-cad 模型需要大量“文本-模型”配对数据而这恰恰是领域里最稀缺的资源。目前业内用得最多的开源数据集来自 Fusion 360 Gallery 和基于它的扩展。Fusion 360 Gallery 里有大约 17 万条带完整特征树的 CAD 设计每条记录了从草图到最终模型的完整操作序列。Text2CAD 论文在此基础上用大语言模型和人工标注结合的方式为这些模型补上了自然语言描述构建了约 18 万个文本-模型对。这些数据集里有一个普遍现象训练样本集中在轴类、板类、壳体等常见机械结构上对法兰、支架、底座这类零件覆盖较好但遇到复杂的曲面造型比如汽车外观覆盖件就明显吃力。原因很简单Fusion 360 Gallery 的用户大多是业余爱好者和小型设计团队他们很少做汽车级曲面。所以你在实际使用 text-to-cad 时如果发现它对你的“复杂曲面花瓶”生成效果很差不要怀疑模型坏了大概率是训练数据里就没有这类样本。2.5 为什么“可编辑”比“好看”更难同样是生成一个零件视觉派只要在几何表面上逼近目标就算成功而特征派必须满足一系列工程约束所有草图必须完整闭合、拉伸方向不能自相交、孔必须落在已有面上、倒角必须选择有效边。这些约束是 CAD 内核和建模规范决定的违反任何一条模型就根本建不出来。另一方面CAD 生成还要求“语义可编辑”你不能生成一个几何上正确但特征树一团糟的模型。比如“一个带四个孔的方板”正确的特征序列是“拉伸方板→切除阵列孔”如果模型生成“切除四个独立的孔”也能出同样的形状但修改孔距时就要改四次参数这在工程上是不可接受的。所以 text-to-cad 模型在训练时不仅要优化几何正确率还要优化特征序列和人类建模习惯的匹配度。这一层要求让整个问题从“三维生成问题”升级成了“结构化规划问题”。3. 工具选型与实操准备3.1 主流开源方案横向对比我实测下来目前能真正跑通 text-to-cad 全流程的开源方案不算多但每一条路线都有各自的代表作这里给出一个我的个人对比表格。工具 / 项目输出类型可编辑性硬件要求适用场景Shap-EOpenAI网格 / NeRF差仅外形参考中低单卡推理概念探索、视觉预览Point-EOpenAI点云差需重建曲面低CPU 可跑极早期形状筛选Text2CAD开源论文实现CAD 特征序列好可进 STEP中需要独立 GPU机械零件、工程建模DeepCAD基础框架CAD 特征序列好可进 STEP中原理学习和二次开发CADFusion实验项目CAD 特征序列好实验性质中文本可控性研究注意Shap-E 和 Point-E 虽然名字里带“E”但它们本质是生成模型不是 CAD 工具。如果你要的是 STEP 文件直接选 Text2CAD 这条线。如果只是想让脑洞快速变成可看的形状用 Shap-E 会更方便。我自己常用的组合是先用 Point-E 快速筛形状方向再用 Text2CAD 生成真正的参数化模型两条路线各干各的活。3.2 硬件环境与代码依赖以 Text2CAD 开源实现为例我本地的环境是Ubuntu 20.04、Python 3.8、PyTorch 1.13 CUDA 11.7GPU 是一张 16GB 显存的卡。实际推理时显存占用大概在 6-8GB 左右所以 8GB 显存的卡也能跑但生成速度会慢一些大批量测试时容易显存溢出。环境搭建时最容易踩的坑是版本不兼容。PyTorch 的版本和 CUDA 驱动必须匹配Transformers 库的版本也不能太新——很多开源项目发布时锁了版本直接用最新库跑第一次前向传播就报“key 不存在”这类错误。我的建议是严格按项目 README 里的 requirements.txt 装环境不要贪最新。再一个坑是有些项目需要 Unreal 引擎或 CAD 内核做序列执行这类依赖往往需要单独的许可证或者编译流程装之前一定要把 README 附带的“依赖矩阵”看清楚。3.3 数据准备与预处理如果你想自己微调模型而不是直接用官方权重数据准备是很考验耐心的环节。原始 Fusion 360 Gallery 数据是 JSON 格式记录了每个模型的全部特征操作。预处理要做的包括三件事把模型特征序列统一成内部 token 格式、过滤掉无效或不完整的序列、把所有尺寸统一到毫米单位。这里特别提醒Fusion 360 Gallery 里有相当一部分模型的草图约束是残缺的——作者导出时就没有保存完整约束。这样在训练时会反复出现“序列合法但执行失败”的情况。我处理时用的策略是写一个简单的规则过滤器把“草图包含非闭合环”和“拉伸方向与草图共面”这两类常见无效样本直接删掉删除比例大约有 15%。这个比例听起来吓人但删完之后训练稳定性明显提升是值得的投资。4. 实操全流程从一句话到 STEP 文件4.1 提示词工程如何描述几何体text-to-cad 效果好不好七分在提示词。跟文生图那种“越诗意越好”的风格完全不同CAD 生成喜欢的是结构化的、特征分明的描述。我总结了一个四层公式主体特征 尺寸约束 布局关系 可选修饰。主体特征就是“这个零件是什么形状”比如“一个圆柱体”“一个矩形板”尺寸约束要直接给出具体数值“直径 50”“厚度 10”布局关系描述特征之间的位置关系“中心位置”“四个均匀分布”“间距 20”可选修饰包括圆角、倒角、通孔还是盲孔这些细节。举个实际例子。你写“一个圆形法兰”模型只能猜你大概要个盘子形状。你写“一个直径 80 毫米厚度 12 毫米的带四孔法兰四个 8 毫米通孔均匀分布在直径 60 的节圆上中心有一个直径 25 毫米的轴孔”模型基本不需要猜特征序列能直接定下来。二者生成结果的可用性完全不是一个级别。还有个技巧是“正着说不如拆开说”。一次描述多个复杂特征容易让模型混淆比如“一个 L 形支架两边的宽度不一样一边有几个椭圆孔”——这句话里 L 形和椭圆孔都算不规则特征模型可能只生成一个。更好的做法是先给基础形“L 形支架两条边长 60 和 40宽 15厚 5”等生成稳定了再在后续编辑里单独加孔。利用模型擅长的基础形构建比指望它一次到位更现实。4.2 模型推理与生成环境装好之后跑一次基础推理其实非常简单核心代码就几行。下面的例子是 Text2CAD 风格项目的简化流程import torch from model import Text2CADModel from tokenizer import CADTokenizer # 加载训练好的权重建议直接下载官方 checkpoint model Text2CADModel.from_pretrained(model_weights/checkpoint_epoch50.pt) model.eval() # 输入提示词 prompt a rectangular plate with four holes and two bosses on the top surface # 编码文本并生成特征序列 tokens, _ model.generate(prompt, max_length256, beam_size5) # 将 token 序列转化为 CAD 指令流 cad_commands CADTokenizer.decode_to_commands(tokens) # 打印前几条看看模型的理解 for cmd in cad_commands[:10]: print(cmd)这段代码里有两个关键参数值得留意。max_length控制生成序列的最大长度如果描述复杂、特征多建议调到 512否则模型会截断后面的特征直接丢光beam_size是束搜索宽度默认 1贪心解码输出最可能的序列但 CAD 生成是强连锁的一个 token 错了后面全错用 5 左右的束搜索能明显提升序列整体合法率代价是生成时间增加好几倍。推理完成后得到的是 token 序列你还需要把它转换成真实的 CAD 文件。多数项目会在这一步调用一个 Python 库把指令流解释成 BREP 几何体最终导出 STEP 格式。这一步是整个流程里最容易出幺蛾子的——同一个 token 序列在训练环境能出几何换个版本库可能直接报错。我的建议是导出 STEP 之前先跑一个可执行性校验检查每个草图是否闭合、每个特征是否引用了合法面。4.3 结果后处理与格式转换生成出来的 STEP 文件直接拖进 FreeCAD 或 SolidWorks 基本都能打开。但你会发现两个问题一是尺寸大概率不是整数因为网络预测的是连续值最后会被量化回 token 表示的离散尺寸二是特征树命名和顺序可能与你的习惯不符比如模型可能用“拉伸”生成板而不是用“垫块”特征。尺寸问题很好解决进 FreeCAD 后用 Part 菜单的“缩放”功能整体校正或者直接改草图的尺寸约束。特征树问题比较麻烦没有特别好的全自动解法只能手动调整。一个实用的技巧是生成阶段不要追求“一次到位”只求“结构对、名称乱”然后花几分钟在 CAD 软件里把尺寸改成需求值。毕竟人工建一个同复杂度零件通常要半小时生成后改尺寸只要几分钟效率优势依然明显。如果最终目标是 3D 打印需要把 STEP 转成 STL。FreeCAD 的操作是打开 STEP切到 Part 工作台选中模型菜单里选“网格化”然后导出 STL。转出来的 STL 偶尔会有破面或法线错误少量破面用 Windows 自带的 3D Builder 修复就行如果是大范围破面多半是原始 B-Rep 里就存在自相交得返回 CAD 模型删除有问题的特征重新生成。4.4 一个完整的端到端案例我拿一个实际跑过的例子串一遍全流程。需求一个直流电机安装座大致形状是一块开槽的底座板上面有四个安装孔。我输入的提示词是“a rectangular base plate, 120 mm by 80 mm, 6 mm thick, with a central slot 40 mm long and 8 mm wide, and four 5 mm clearance holes at the corners with 10 mm distance from edges” 。模型生成的特征序列大致是新建草图 → 画 120×80 矩形 → 拉伸 6mm → 顶面画中心槽 → 切除贯穿 → 顶面四角画四个圆 → 切除贯穿。这个序列和人工建模思路基本一致。不过生成结果里没有倒角四个角落是尖角需要我在 FreeCAD 里手动加 C1 倒角这是提示词里没提模型也就不会主动生成。整个过程耗时约 5 分钟其中模型推理 1 分半手动尺寸修正和补倒角 3 分半。如果用传统方式从零建模好歹要 20 分钟以上所以效率提升是实打实的。这个案例也说明text-to-cad 现阶段的目标不是“零编辑”而是“从零开始变成了从半成品开始”这就够了。5. 常见问题与避坑指南5.1 生成结果不符合预期怎么办我见过的失败案例九成都能追溯到提示词上。最典型的问题是描述得太抽象。“漂亮”“流线型”“现代感”这类词在 CAD 领域是无效信息模型没有语义锚点可抓只能随机生成一个形状。应对方法是把抽象词全部翻译成具体特征“现代感”翻译成“大圆角”“斜面边缘”“流线型”翻译成“光滑过渡曲面”。翻译这一步做不好模型永远在猜。第二个常见问题是“一次描述太多特征”。有朋友一上来就输入“一个用于固定四根管子的带支架底座还要有加强筋和减重孔颜色最好是蓝色”——CAD 生成模型没有颜色概念减重孔加加强筋同时出现时模型大概率顾此失彼。我的经验是分而治之先打基础形每次提示词只描述三到四个相关特征生成后再用 CAD 软件的阵列、镜像功能补充重复特征。把模型当成“草图搭形”的工具而不是全能设计器。还有一种情况是模型生成了完全不合法的序列CAD 引擎执行到一半直接报错。这种问题靠调提示词没用需要增加束搜索宽度或者往 prompt 里加“简单”“标准”这类限定词让模型倾向生成更保守的序列。如果你本地跑的是开源权重还可以考虑用少量目标领域样本做一下轻量微调几百条数据就能把失败率压到可以接受的范围。5.2 工程化落地经常踩的坑第一个坑是符号单位。工业设计里毫米和英寸的差异不是 25.4 倍那么简单一个模型如果在英寸数据上训练你在提示词里写“10mm”生成的几何体体积可能完全不对。所以用任何 open 模型之前先确认它的内部单位制。Text2CAD 训练数据统一用毫米这是它比较顺手的原因一些实验项目可能继承自英寸数据集必须提前看文档确认。第二个坑是 CAD 序列的“多米诺效应”。文本到特征序列输室过程中错一个 token后面连续十个 token 可能都在执行错误的对象引用。所以模型评估时不能只看“最终几何对不对”还要看序列本身是否存在无效指针。我在实践中发现用“序列合法率”和“几何有效性”两个指标同时卡比只看几何更可靠它能在困惑期就拦截 60% 以上的坏样本。第三个坑是算力管理。大批量生成测试时很多人会一次性把几百个 prompt 塞进模型结果显存直接爆掉。合理做法是逐条生成每生成一条就释放一次中间变量如果 prompt 长度很长统一截断到 64 token超出部分直接丢——这听起来浪费但实际效果优于硬撑因为超长 prompt 的尾部信息往往已经模糊不如不要。5.3 可复现性与质量评估text-to-cad 有一个很反直觉的特点同样一个 prompt跑两次结果可能不一样。原因有两个一是模型推理时如果没有固定随机种子采样引入的随机性会导致序列不同二是束搜索在部分版本实现里没有完全确定化。所以如果你想在自己的项目里评估模型好坏必须固定随机种子、固定 beam_size、固定输入长度否则同一个模型会被你测出天壤之别。评估指标方面除了前面说的序列合法率和几何有效性还有两个指标在论文里常用一个是“文本-几何对齐度”一般用预训练的 CLIP 模型分别编码文本和渲染图像看余弦相似度另一个是“几何精度”比较生成模型和参考模型的表面距离比如 Chamfer Distance。这两个指标对于日常调试足够用但都不够完美——CLIP 指纹相似度不关心工业语义Chamfer Distance 不关心特征树结构。所以最务实的评估方式仍然是人工打开 STEP 文件检查能不能被 CAD 软件正常打开、能不能改参数、能不能出加工刀路。在报告结果时我也习惯记录三组信息提示词原文、生成序列长度、CAD 引擎执行状态成功/在哪个特征失败。这种记录方式在排查问题时特别高效。我自己整理过一个失败案例表格发现 70% 的失败集中在“草图不闭合”和“特征引用不存在的面”两类后续专门针对这两种错误做数据增强明显改善生成质量。6. 再进一步text-to-cad 能走向哪里text-to-cad 目前还在非常早期的阶段但它指向的方向非常明确CAD 建模正在从“人人都会画图”走向“人人都会描述图”。短期看它最好的定位是设计流程里的“加速器”——概念阶段快速产出候选形细节阶段人工介入精修。中期看如果生成质量继续提升它会跟参数化设计系统深度结合输入描述、自动约束求解、自动出工程图会成为可能。更远一步它可能跟仿真分析打通形成“描述需求 → 生成模型 → 自动仿真验证”的闭环那是真正意义上的“设计自动化”。我个人的体会是这项技术最大的门槛不在模型而在数据。CAD 是高度专业化的领域几何规则多、语义复杂、标注成本极高这也是它比文生图慢好几拍的根本原因。但反过来正因为门槛高一旦模型在某几个细分方向轴类零件、钣金件、标准接口做到了可靠可用它在工程界的价值会比文生图在艺术圈的冲击大得多。现在的阶段最适合做的就是多上手试、多积累那些“提示词怎么写才能生成好模型”的经验这些经验在模型换代后也不会过时。