2026/10/26 7:13:51

Text-to-CAD:用一句话生成可编辑三维模型,原理与实操

Text-to-CAD:用一句话生成可编辑三维模型,原理与实操 搞CAD建模的朋友多少都有过这样的经历客户嘴上说我要一个带法兰盘的连接件你脑子里已经把它拆解成草图、拉伸、倒角、布尔运算好几道工序了建模两小时改图一整天。这两年AI绘图火得一塌糊涂但CAD这边能用的工具一直不温不火直到text-to-cad这个概念冒出来。它就是让你用一句自然语言直接生成可编辑的三维CAD模型——不是那种纯视觉的mesh而是带特征树、带参数、能进CAM软件直接编程序的B-rep实体。这个方向解决的核心问题说白了就是把脑子里的设计意图到软件里的几何实体这段最费时间的路用AI压缩成几秒钟。对机械设计、非标自动化、3D打印爱好者来说这玩意儿一旦跑通意味着方案阶段可以用文本快速验证多种结构不用每次都手动草绘。我前前后后跑了几个开源方案踩了不少坑这篇就把text-to-cad的核心机制、实操流程和我自己的测试体会完整梳理一遍想试水的朋友可以直接照着重现。1. 一句话生成模型先搞清楚它和普通AI绘画的本质区别先泼盆冷水。text-to-cad跟text-to-image看起来都是文字生成几何但底层逻辑完全不同。画图AI生成的是像素矩阵而CAD要的是精确到小数点后六位的边界表示B-rep每个面、每条边、每个顶点必须拓扑闭合。图片渲染错了还能说是艺术风格CAD模型拉伸面歪了一度后面的模具加工直接报废。1.1 传统建模流程的痛点到底在哪拿最常见的机械零件设计来说。手动建模的工作流一般是先画草图定尺寸、加约束然后拉伸或旋转生成实体再去做倒角、阵列、布尔运算最后还要保证参数能被后续修改驱动。这个流程有几个天生的问题第一草图阶段最耗时你要把二维的尺寸约束关系理清楚第二改参数经常牵一发动全身一个尺寸变了下游特征全部要重建第三方案探索阶段非常低效你想对比三种法兰结构就得把同样的草图、拉伸流程重复三遍。text-to-cad的思路是反过来你直接说需求直径50mm的圆形法兰周围均匀分布6个直径8mm的通孔孔距法兰边缘10mmAI直接输出一个参数化的CAD实体。省掉的不只是画草图的时间更重要的是把人的语言表达和几何约束之间的翻译过程自动化了。1.2 text-to-cad的能力边界和输出形式我测试下来当前开源方案的输出主要有两种格一种是STEP文件B-rep实体这是制造业的标准交换格式能直接被SolidWorks、Fusion 360、FreeCAD识别和编辑另一种是参数化特征序列AI输出的是先圆柱拉伸30mm再打孔6个这样的构造步骤可以在CAD软件里重建出带特征树的历史记录。后者实现难度更高但对设计师最友好因为你能在软件里直接改参数。需要明确现阶段text-to-cad还远没到替设计师干活的程度。复杂的装配体、曲面造型、钣金展开这类需求AI基本束手无策。它是用来加速标准件、简单结构件、概念方案建模的定位是辅助工具不是替代设计。2. 底层机制拆解AI怎么把文字变成带精度的实体理解了定位再来看它到底怎么实现的。我拆开一个开源的text-to-cad管线基于Transformer架构的常见方案核心环节有三块数据怎么编码、模型怎么生成、生成结果怎么变成一个合法的CAD文件。2.1 数据层面CAD模型如何翻译成机器能学的语言这里有个很关键的选择。Mesh网格数据比如STL对AI来说很好学因为就是一堆三角形顶点坐标但输出的是视觉模型没有工程意义。文本到CAD要学的是B-rep数据这才是制造端真正要的东西。B-rep本身结构复杂包含面Face、边Edge、顶点Vertex还带着拓扑关系以及每个面的曲面类型平面、圆柱面、NURBS曲面。直接让Transformer输出这种拓扑结构是不现实的。主流做法是做几何序列化——把B-rep实体转换成一系列离散token类似把一句英文拆成单词。我跑过的方案用的是近似这样的流程先把STEP文件解析成B-rep结构然后按顺序遍历先输出基础体素比如圆柱体、长方体再输出布尔操作加运算、减运算接着是特征的参数位置、方向、尺寸。每个元素对应一个token整个模型就变成了一个token序列。这样AI就把它当文本翻译任务做输入描述性文本输出一串构造指令token。2.2 模型架构从CLIP文本编码到自回归token生成模型结构上当前主流方案参考了多模态大模型的设计。文本侧用预训练的CLIP文本编码器或者直接用T5、BERT之类把用户输入的自然语言句子编码成语义向量几何侧把上面说的序列化token做embedding。生成的环节通常采用自回归方式模型逐个预测下一个token就像自动补全句子。不过这里有个关键差异CAD token序列里既有离散的指令比如创建圆柱也有连续的数值比如半径15.5mm。离散指令用token分类搞定连续数值得单独处理常见做法是做一个数值回归头或者把数值离散化成毫米级的桶比如0.1mm一个区间让模型输出桶编号。离散化精度要拿捏好精度太高模型学不过来精度太低生成的模型尺寸公差直接超标。整个训练流程大致是收集大量带文本描述的三维模型数据比如ABC数据集、Fusion 360 Gallery数据集从真实用户建模历史整理而来自带特征序列非常宝贵把模型序列化同时把对应的文本描述也让编码器处理然后端到端训练。损失函数就是标准的交叉熵预测token序列的分布。实测下来数据质量对效果的影响远比模型结构大Fusion 360 Gallery这类带构造历史的数据训练出来的模型生成结果远好于只有STEP最终形态的模型。2.3 后处理把token序列还原成可用的CAD实体模型推理出来的是一个token序列这一步要把它变成一个真实的STEP文件。流程就是序列化的逆过程解析token逐步执行创建基体、打孔、倒角、布尔差集等操作在几何内核里重建实体。常用的内核是Open CASCADE开源的FreeCAD和很多工具都基于它。这一步最容易翻车。模型生成的序列经常出现拓扑错误比如布尔操作遇到不相交的几何体导致失败或者参数非法负半径、零厚度。后处理需要有容错机制执行每一步操作时都做合法性校验失败的步骤要么跳过去要么做降级处理比如把布尔差集改成不操作保证最后至少能导出一个实体哪怕形态有偏差。说句实话目前能落地的方案里后处理的质量直接决定了天壤之别——同样的预训练模型后处理做得好成功率能高出一大截。3. 实操全流程从环境搭建到跑通推理理论说完了上实操。下面这套流程基于我测试过的开源text-to-cad方案环境是Ubuntu 20.04 RTX 3090我把关键步骤和参数都写出来照着做能少走很多弯路。3.1 环境准备与依赖安装硬件方面推理一张图级别的模型至少需要10GB显存训练的话建议24GB以上4090或A6000起步。软件环境用conda管理最省心Python版本建议3.9太高或太低都可能遇到依赖冲突。conda create -n text2cad python3.9 conda activate text2cad # 安装PyTorch根据你的CUDA版本调整 pip install torch2.1.2 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 安装Open CASCADE几何内核 conda install -c conda-forge ocp7.6.3 # 安装其他依赖 pip install transformers cadquery-ocp numpy matplotlib trimesh这里有个经验提示conda安装ocp这个包名是关键直接用pip是装不上Open CASCADE的Python绑定的。另外如果你后面要处理STEP文件解析建议再装一个cadquery库它对B-rep的解析封装比裸的ocp友好得多尤其是涉及面类型查询、拓扑遍历的时候。3.2 数据准备与预处理数据这块我直接推荐用Fusion 360 Gallery数据集。它不是简单的模型库而是来自真实用户操作的B-rep建模序列自带每种特征的参数这对训练生成特征序列的方案太合适了。数据集下载之后你要按照官方划分好的train/test split来用不要自己随机分割——同一模型的变体可能出现在多个文件里胡乱切分会导致数据泄漏验证集指标虚高。预处理管线分为三步第一步用cadquery把STEP转成B-rep对象提取面、边、顶点和拓扑关系第二步实现序列化器把每个实体按基体特征、草图轮廓、拉伸参数、布尔操作、倒角参数的顺序输出token第三步给每个模型匹配文本描述。Fusion 360数据集自带一部分文本标注但质量参差不齐我测试时发现很多描述过于笼统比如只说bracket不说尺寸。如果你有精力可以自己做数据增强编写规则脚本根据参数自动生成描述模板比如直径{}mm的圆柱体中心有一个{}mm的孔。实测这样比单纯依赖原始标注的效果更好。3.3 训练过程的关键参数与IO策略如果你使用现成的开源训练脚本核心超参数建议这样设batch size 24显存不够就16配合梯度累积、学习率5e-4、warmup步数1000、序列长度上限512。文本编码器用冻结的超参只训练几何token侧的embedding和Transformer层这样能大幅减少可训练参数量训练速度更快且不容易破坏预训练语言模型对语义的理解。训练时的数据IO很讲究因为B-rep序列化后的数据不是纯文本每个token有不同类型。建议预处理的时候直接把token ID存成numpy的.npz文件训练时用随机采样器按批次加载而不是在线做序列化——在线序列化会让训练速度掉到原来的十分之一不到。我自己第一次跑的时候偷懒图省事把序列化写在Dataset类里头结果一个epoch跑了6个小时改成离线预处理之后直接缩短到40分钟。3.4 推理与后处理从模型输出到STEP文件推理阶段的做法是输入文本描述beam search束搜索宽度设4生成token序列然后送入后处理脚本重建实体。这部分的细节往往决定成败# 伪代码后处理核心逻辑 tokens model.generate(text_prompt, beam_width4) surface_model reconstruct_brep(tokens) # 逐步执行构造指令 if not surface_model.is_valid(): # 尝试用启发式修正移除无效特征重跑布尔运算 surface_model repair_geometry(surface_model) export_step(surface_model, output_path)重建后一定要用Open CASCADE做B-rep合法性检查重点是三个维度实体闭合性、面法向一致性、边界表示尺寸阈值。很多模型生成的STEP文件在CAD软件里打开会提示模型已修复其实就是在后处理这关没做校验。有一次我生成一个带法兰盘的管件AI把六个孔的位置参数算错了导致两个孔重叠Open CASCADE直接判定几何体无效。后来我用了一个聚类修正方案检测到孔的位置间距小于最小壁厚的两倍时自动把这两个孔合并成腰型槽——虽说不完全符合原意但至少能导出一个可用的实体。3.5 效果评估不能光看IoU评估text-to-cad的生成质量很多人爱用几何IoU交并比就是对比生成模型和真实模型的体素重合程度。但这个指标有迷惑性两个都是直径20mm的圆柱体但一个高度是10mm另一个是15mmIoU可能仍然很高实际上特征完全对不上。我实际用下来觉得更可靠的评估组合是第一特征序列准确率——对比生成的构造指令序列和GT序列的编辑距离这直接反映建模思路对不对第二参数误差——对于每个特征对比尺寸参数数值的偏差比如孔的直径误差应该在±0.5mm以内第三人工目检——抽取20个生成案例看B-rep实体在CAD软件里的实际表现。前两项可以自动化第三项虽然费时但最真实。4. 实测踩坑清单与排查思路这个方向我翻车太多次了挑几个典型问题整理出来你在复现时能省不少排查时间。4.1 模型输出乱码先查序列化规范症状推理生成的token序列无法解析或者解析出的特征数量不对、参数值严重超出合理范围。这类问题八成不是模型没学好而是你的序列化规格和反序列化逻辑不一致。比如训练时定义坐标值一律保留一位小数推理时用的脚本可能把token解成两位小数导致数值偏移。排查思路先拿着训练数据集里的一条数据手动改文本描述让它能通过序列化和反序列化闭环再检查一遍数值是否精确还原。4.2 训练loss不下降数据平平无奇这是最常见的挫败场景。loss卡在5.0左右不动生成的token随机性很强。我遇到的罪魁祸首是数据里存在大量空模型或异常模型解析STEP失败、实体为空这些垃圾样本没有过滤掉模型在学噪声。解决办法预处理阶段给每个样本加一道校验要求满足——实体面数1、体积0、序列长度在10到512之间。过滤之后再训练loss大概率能明显下降。4.3 生成的STEP打不开或打开后是一片空白这种问题几乎全出在布尔操作上。AI生成的特征序列里如果先创建了一个圆柱体然后又用一个部件去减它但两类几何体实际没有正确相交布尔差集就会失败。我在后处理里加了一条原则执行布尔操作之前先做三维包围盒重叠检测如果两个几何体空间上根本不接触就直接跳过这一步并在日志中提示skipped non-intersecting boolean。这个改动把出图成功率从61%提到了84%。4.4 文本描述很准确但生成结果张冠李戴如果你输入的描述很具体比如M8六角法兰螺栓但输出的是个形状接近但尺寸完全离谱的零件说明你的模型对文本语义的利用还不够。大概率是训练时文本编码器和几何解码器之间的跨模态对齐没有充分训练。解决方案之一是增加描述-模型匹配的对比学习辅助损失同一个batch里让模型区分哪个描述对应哪个模型强制它学习语义关联。这样训练后模型对描述中关键词的敏感度会有显著提升。5. 我的个人体会与扩展方向跑了一个多月text-to-cad最大的感受是AI生成CAD模型的瓶颈从来不是生成几何这件事而是生成有工程约束的几何。几何形状好搞难的是让模型理解什么是可加工的——壁厚不能太薄、孔间距要留够、倒角不能大于实体本身。目前的方案基本是让模型通过大量数据撞出这些规则数据的边界就是能力的边界。如果你想让它在某个垂直领域比如标准紧固件、管接头真正可用最有效的策略不是调模型结构而是收集那个领域的专用数据做微调。另外实测下来把text-to-cad和参数化设计结合是很有潜力的玩法让AI生成一个基础结构然后你在CAD软件里打开特征树手工调整关键尺寸速度比从零建模快很多。我最近在一个非标零件的方案选型里就是这么用的——先让AI出三四个基础形态的变体我从中挑一个最接近的改几个参数就定了初稿整个方案阶段压缩了大半天的时间。最后给想上手的朋友一个很实用的建议先别急着训练自己的模型去找社区里一个叫CADformer或者类似的预训练权重直接跑推理具体名称我不便直接推荐你可以在GitHub搜索text-to-cad相关的开源仓库多关注下载量和issue区的活跃度。把整个文本→STEP→CAD软件的链路跑通建立一个对生成质量的直观感受再决定要不要进入微调阶段。这条路踩坑无数但一旦通了你再看CAD建模视角会完全不一样。