先说个实在话:我第一次看到text-to-cad这个方向的时候,第一反应是“这不又是一阵热风”。但实际动手跑过几轮之后,我的看法变了,它确实是近十年里离“设计民主化”最近的工具形态之一。这篇文章不打算复述那些花哨的新闻稿,而是把text-to-cad背后的技术逻辑、实际操作中的体验和我自己踩过的坑,原原本本分享出来,给想上手或想判断“这玩意儿到底能不能用”的人一个参考。
text-to-cad,直接翻译就是“从自然语言到CAD模型”。它解决的问题非常朴素:一个没有经过多年机械制图训练、不熟悉参数化建模软件的人,能不能用一句大白话生成一个可用的三维模型。比如你说“一把四条腿的圆凳,凳面厚度三厘米,腿之间带横撑”,系统直接给你输出一个模型文件,能导入建模软件继续编辑,也能直接送进切片软件打印。这件事的难点不在“生成一个形状”,而在“生成一个符合设计语义、尺寸大致合理、且能被工程工具链继续加工的形状”。
这个方向适合谁?常做快速概念验证的结构工程师、搞产品前期造型的设计师、大量做非标小零件的创客,以及想给自己积累零件库的工程师同行,都值得认真看一遍。算法工程师也能从后面关于表征和条件注入的内容里找到一些有意思的思路。接下来我从技术路线、底层表征、实际工作流、参数调节和常见坑这几个角度,把这个方向拆开讲。
1. text-to-cad到底在做什么:概念先用大白话讲透
很多人一听“文字生成CAD”,下意识觉得这跟文生图差不多——输入一句话,跑一会儿,输出一个文件。逻辑上确实是这样,但两者有一个根本差异:图像是像素阵列,CAD模型是几何拓扑加约束关系。像素错了你肉眼不一定看得出来,几何拓扑错了,模型文件直接打不开,或者导入软件之后整个零件是个坏体。
所以text-to-cad的核心挑战,不是“把语言变成形状”的创意部分,而是“把形状变成工程上可用的数据”的严谨部分。打个比方,文生图像是请一个画家听你描述后自由发挥画一张画,text-to-cad更像是请一个结构师听你描述后给你出一张能施工的图纸。前者允许主观表达,后者必须满足隐含的物理和拓扑约束。
再往深一层说,text-to-cad做的是跨模态的语义到几何对齐。一段文本里有“圆角”“加强筋”“通孔”这类带明确工程含义的词,也有“现代感”“稳固”“轻巧”这类模糊描述词。模型需要把这两类信息都解析出来,映射成具体的几何操作。这比普通文生图里“红色”“金属质感”这种纯粹外观属性的映射要复杂得多,因为工程语义通常对应的是结构关系,而不是表面属性。
我接触到的最佳实践之一,是把text-to-cad看成“带约束的生成问题”,而不是“无约束的想象问题”。好的生成结果,往往不是最让人眼前一亮的,而是最符合输入约束、拓扑上干净、尺寸上没有明显错误的。理解了这一点,你后面调整提示词和参数时,思路会完全不一样。
2. 技术路线之争:三种“脑补”方式的取舍
text-to-cad当前没有统一的技术解法,不同团队走的路线差异很大。我把它们归成三条主线,各有利弊,理解这些才能解释为什么同一个提示词在不同工具里出来的结果天差地别。
2.1 扩散生成路线:让模型从头“长”出一个几何
这是现在最主流、讨论度最高的路线。做法是拿着大量“文本-三维模型”配对数据,训练一个扩散模型。推理时,用户输入文本,模型从随机噪声出发,一步步去噪,最终生成一个三维表征,通常是点云或隐式场。
这条路线的优势是表达能力最强,理论上不受已知形状的限制,你输入一个历史上没出现过的东西,它也能给你“脑补”出来。缺点也很明显:生成的几何往往拓扑噪声很大,点云内部有杂散点,隐式场提取出来的网格可能出现自交、非流形边、空洞这些问题。而这些恰恰是CAD工具链最不能忍的。
实际操作中,这类工具的产出更适合当“造型参考”或“视觉概念”,直接导入工程软件用的概率不高。但最近模型能力提升后,一些简单零件已经能生成较干净的网格,打磨一下就能用。
2.2 条件形变路线:让模板去适应当前描述
另一条路线不从头生成,而是准备一批参数化模板模型,比如基础立方体、圆柱、法兰盘、齿轮毛坯等,然后根据文本语义对模板做形变或调整参数。文本在这条路线里更多承担“检索+调参”的作用。
这条路线的好处是输出几何质量极高,因为所有结果都从合法模型变形而来,拓扑几乎永远是好的,尺寸参数也都可控。缺点则是天花板明显,表达能力受限于模板库和参数空间——你说“一个带六个孔的圆盘”,它能做;你说“有机形态的雕塑底座”,它就抓瞎了。
我的判断是,这条路线短期内最实用,尤其适合零件库场景。如果你需要的是标准件变体,它比扩散路线可靠得多。
2.3 检索组合路线:最朴素的“抄作业”思路
第三种路线更直接:给输入文本做语义检索,近期也有直接用大语言模型做工具调用的方案,从已有模型库里找出最接近的零件,然后做组合拼接或简单编辑。
这条路线适合企业内部场景。比如你公司有几千个历史零件模型,把text-to-cad做成一个“自然语言零件库搜索引擎”,工人说“找一款和之前A项目里那个支架类似的,但是孔位往左移10毫米”,系统在库里搜出候选,然后执行参数修改。这类需求不追求创造力,追求准确率和效率,实现的成本也最低。
三条路线不互斥。我见过挺有意思的实践是把检索结果当成扩散生成的初始条件,把模板参数当成后处理校正项,几个阶段串成一个pipeline,效果比单条路线好不少。这也是我认为未来一段时间的工程化方向。
2.4 三条路线的横向对比
| 路线 | 几何质量 | 表达能力 | 工程可用性 | 适合场景 |
|---|---|---|---|---|
| 扩散生成 | 中,噪声多 | 高 | 低,需要大量后处理 | 概念设计、造型探索 |
| 条件形变 | 高 | 中,受模板限制 | 高 | 标准件变体、参数化设计 |
| 检索组合 | 高 | 低,依赖库 | 极高 | 企业零件库、变体设计 |
3. 核心表征怎么选:点云、隐式场还是网格
text-to-cad绕不开一个底层问题:生成器输出的“中间态”到底是什么数据形式。这个选择决定了后续能否做拓扑修复、能否直接导出STEP、能否参数化重建。下面是我在实践中对几种主流表征的真实感受。
3.1 点云:最直白,但离“能用”最远
点云是扩散模型最早选择的输出形式,主要原因是好训练、好计算——本质上就是生成一堆三维坐标点。你输入“一把办公椅”,模型吐出一万多个点,构成椅子的轮廓。
但从工程角度看,点云几乎没法直接用。你拿点云去CAD软件里导什么?导成mesh?那还得先做表面重建。而表面重建本身就是个独立难题,薄壁件、尖锐边、细小孔洞在重建时极容易走样。更关键的是点云没有拓扑关系,哪个点是哪个面的一部分,完全不知道。所以点云在我心里只是一个“概率分布的中转站”,不是交付物。我用过的几个工具,最终都把它作为中间结果,再转mesh。
3.2 隐式场:用“海拔高度”理解SDF
下一代主流表征是隐式场,其中最著名的就是SDF(有向距离场)。我用自己的理解解释一下:你往三维空间里放一个物体,然后对空间中的每一个点,记录“从这个点到物体表面的距离”,如果点在物体内部,记为负值,外部记为正值。这样整个空间就被一个标量函数填满了,这个函数就是SDF。
你可能会问:这跟生成模型有什么关系?关系很大。因为神经网络天生擅长拟合函数,我可以让网络去拟合这个SDF——输入一个三维坐标,输出那个点的距离值。训练好之后,模型就等于隐式地掌握了一个几何体的完整形状描述。推理时,我只要在空间里均匀采样很多点,查询它们的距离值,把所有距离值为零的点连起来,就得到物体表面。
用生活化类比想:SDF就像是给几何体画了一张“海拔图”,表面是海岸线,内部是海平面以下,外部是陆地。你不需要直接画海岸线的形状,只要知道每个位置的海拔,海岸线自然就出来了。这种表征天然适合描述复杂拓扑,因为它根本没有“拓扑”这个概念,一切靠数值决定。好处是拓扑再复杂也能表达,穿插、重叠、空洞都不在话下。缺点是提取网格后往往不够干净,小碎面、尖刺很多,需要专门的网格修复步骤。我在实操里跑过几次从隐式场提取网格的流程,出来的结果拿给建模软件即使用,十次里有六次要修。
3.3 从文本到几何的语义对齐:为什么不能直接翻译
前面说的都是几何表征,现在讲另一个关键:文本信息怎么进去。
最朴素的做法是拿文本编码器输出一个embedding向量,把它作为条件拼进生成网络。这个做法能跑通,但效果不稳定。原因在于:文本编码器是通用模型,它学到的语义空间并不是为了描述三维几何而存在的。“凳子”和“椅子”在语义空间里距离很近,但在几何空间里差距不小——凳子通常没有靠背,椅子有。
所以现在的实践普遍采用“跨模态对齐”的思路,在训练时让文本embedding和几何特征在某个共享空间里去对齐,让“凳子”这个词不只关联文字语义,还关联到一类具体的几何特征分布。这一点在训练数据不够时尤其重要。我见过一个效果不错的小技巧:把提示词里的关键尺寸单独抽出来,不进文本encoder,而是作为数值条件直接拼进网络,这样“半径20毫米”这种精确约束不会被语言模型稀释掉。
网格作为最终交付还有一个天然优势:几乎所有三维软件和切片器都能吃网格数据。我现在的工作流基本是:生成网格→修复拓扑→简化面数→转STEP或直接导入工程软件,后面每一步都是成熟工具链,风险可控。
4. 现阶段真正可用的工作流(附实操细节)
讲完理论,说说我现在实际用着的一条工作流。我在一个产品前期设计项目里试过用text-to-cad生成几种备选结构方案,整体感受是:单靠生成结果直接交付,不现实;但把它当成“需求澄清工具”和“方案草稿机”,效率提升非常明显。
4.1 我推荐的四步流程
第一步,把模糊想法翻译成结构化的生成提示词。不要写“给我一个好看的支架”,而是写“L型支架,水平板长度160毫米,宽度80毫米,厚度5毫米,竖板高度120毫米,垂直方向带两个直径6毫米的安装孔,圆角半径3毫米”。你给的信息越结构化,生成结果的可用率越高。
第二步,用多个随机种子批量生成初稿。text-to-cad有随机性,同一条提示词不同种子出来的结果差异很大。我会一次性生成十几到几十个结果,快速扫一遍,把明显离谱的剔除,留五六个候选进行细看。
第三步,对候选模型做网格后处理。用网格修复工具清理反转为自交面、去除孤立碎片、简化三角形数量。一个典型的生成结果可能有几十万甚至上百万个面,对于CAD软件来说太多了,简化到两三万面左右比较合适。之后我会再重建关键特征,比如把孔位、圆角这些用真正的CAD特征重做一遍。这一步通常手工做,但比从零建模快很多。
第四步,导入工程软件做参数化重建。网格修复之后,模型如果只是拿来做结构示意或者3D打印,已经够了。但如果后面还要做有限元分析或者出工程图,就必须在CAD软件里基于网格重新拉一遍特征树。这个过程没法完全自动化,我目前的做法是用网格作为底图参考,手动重建主要特征,效率大约是纯手绘概念图的2到3倍。
4.2 提示词的精修技巧
我花了不少时间摸索提示词的写法,总结出三条有效经验:
结构词前置。把“支架”“法兰”“外壳”这类主体名词放在提示词开头,让模型优先确定基础类型,再细化特征。你可以理解为先锚定一个类别,再在这个类别里做变化。
参数词要具体、要带数字。“厚一点”效果远不如“厚度5毫米”;“靠近中间”不如“距离左侧边缘30毫米”。模型对精确数值的遵从度,比我预想的高,但也可能被训练数据里常见的数值范围束缚,比如直径5毫米就比直径38毫米生成得准。
材质和外观描述的作用被低估。虽然CAD是工程模型,但“拉丝铝”“黑色哑光塑料”这类视觉描述会显著影响模型的几何推断,因为训练数据里相同材质的零件往往有相同的结构倾向。想要精密外观就描述精密质感,想要铸件外观就描述铸造圆角,实际生成结果会向这个方向靠拢。
多轮迭代比一轮到位有效。我会先给一个描述粗糙的提示词看整体形态,然后根据输出调整:“整体比例不对,底盘再宽一点,立柱高度降低三分之一”。但这本质上是因为生成模型的输入输出不可微分,你只能通过“反馈式重采样”逼近目标,有概率搜索的性质。
4.3 生成参数怎么选
如果你用的工具暴露了生成参数,下面是几个我实测后比较稳的起点:
- 采样步数:默认值附近即可,步数太少几何不完整,太多容易过度平滑丢失细节。我通常用中档步数,具体要看工具实现。
- 引导权重:控制在适中范围。太高会让模型死板地贴文本,结果往往过度尖锐,反而损失可加工性;太低则生成结果游离。我自己习惯从默认值开始,每次调增一点,直到语义特征清晰但几何不过度“紧张”。
- 随机种子:这是最重要的参数。不要只跑一次,我强烈建议批量跑,至少十几二十个结果里挑,提升可用的概率。
- 温控相关的随机性:如果工具支持“多样性”参数,建议按需调节。做方案探索时调大,做精确复现时调小。
5. 我在实际运行中踩过的坑(过来人实录)
这部分是大家最喜欢看的部分,也是我在多个项目里真实付过学费的地方。每一条我都尽量写清楚发生了什么、怎么定位、最后怎么解决,供大家参考。
踩坑一:语言越“高级”,生成越离谱
有段时间我喜欢用特别精确的工程语言写提示词,结果生成了很多没法用的模型。后来想明白了:text-to-cad的训练数据主要来自模型库配套文本标签,不像文生图那样有丰富的自然语言描述。训练数据的语言风格是短标签式的,比如“支架”“电机安装座”“外壳”。当你说“一款用于实验室设备的垂直安装支架”,模型只稳定提取“支架”,其余词反而干扰了判断。所以我现在遵循一个原则:提示词用短标签式表达,如果要加描述,就加结构相关的具体词,少加风格化修饰。
踩坑二:对称性绑得太死
很多生成结果左右完全对称,甚至纤毫毕现地对称,但现实中很多零件并不完全对称,比如走线槽、带缺口的设计。原因是训练数据里对称零件占比高,模型学到了强先验。解决办法是,在提示词里明确写不对称特征,比如“右侧带缺口、左侧封闭”;如果工具支持局部条件控制,用局部mask约束效果更好。
踩坑三:单位混乱,导入CAD全乱套
这个坑我费了挺长时间才定位。有一次生成的模型在预览器里看比例合理,导入CAD软件后尺寸完全不对,一个160毫米的板子变成了160米。原因其实是两边单位默认设置不同,但本质上暴露的是text-to-cad工具的另一个问题:尺寸语义跟实际物理尺寸并没有完全对齐。它能识别数字,但不一定能精准对应你想要的毫米、厘米还是英寸。我的解决方法是固定一条铁律:生成后第一件事,是打开模型检查“包围盒尺寸”,用软件测量工具验证关键尺寸是否符合预期;如果偏差很大,就不进入后续流程,直接返回改提示词。
踩坑四:细节特征的丢失是结构性的
我原来以为细节丢失是因为模型不行,后来看了一些分析才明白,这是表征选择带来的必然代价。以隐式场为例,训练时坐标输出被归一化到一个小范围,模型容量有限,会把精力放在大尺度形状上,细小的法兰孔、窄槽这类高频几何信息被当成噪声忽略掉。所以如果你发现“孔位对但孔径总偏大”或“圆角全变直角”,不用动提示词,这大概率是模型本身的精度极限。应对办法是:分两步生成。先生成主体,再生成局部特征,然后在CAD里把两部分合并。我也试过用超分辨率重建的思路,从低分辨率粗糙网格重建高分辨率细节,寸步不让地保有细小特征,效果能及格,但离完美还有距离。
踩坑五:复杂装配体的能力还远不够格
我测试过带有五六个零件的装配体,比如“一个底座加四个轮子加一个把手”,生成的往往是五个独立零件在同一场景里渗在一起,没有约束关系,没有装配逻辑。原因是生成模型的本质是“生成一个场景里的多组几何”,不是“设计装配体里零件之间的配合关系”。现在的text-to-cad基本只能处理单零件,多零件只能拆开各自生成再组装。组装的工作没有省掉,只是变换了发生的位置。
汇总成一张速查表:
| 现象 | 原因 | 对策 |
|---|---|---|
| 语义稍微复杂就生成失败 | 训练数据短标签风格 | 提示词短促、结构化、带数值 |
| 左右过对称 | 训练数据偏向轴对称 | 提示词明确不对称特征 |
| 导入CAD尺寸错乱 | 单位语义与物理单位错位 | 生成后立即检查包围盒 |
| 细小孔、槽丢失 | 表征容量限制 | 分阶段生成,局部重建 |
| 多零件装配交错 | 缺乏装配关系建模 | 逐个生成后自行组装 |
6. 调参实践:如何让生成结果更“听话”
参数调节和提示词调节不能分开看,它们是一个整体。这一节我把我调出相对稳定效果的参数思路完整写出来,不敢说放之四海皆准,但至少是真实可复现的路径。
6.1 确定优先级的调参顺序
参数调节要有顺序。我自己的习惯顺序是:种子→引导权重→步数→数值条件。先把种子批量跑一遍match到一个比较顺眼的形态,再调引导权重让输出的结果更贴文本,然后调步数让细节更完整。如果结果还不够,才动数值条件。反过来的话,很容易在“步数太多导致几何过平滑”和“引导太强导致不自然”之间来回拉扯,浪费很多时间。
6.2 朴素而有效的“二分法”调引导权重
引导权重这个参数很关键,形象地说它控制“模型有多听你的话”。设得太低,生成结果跟提示词没什么关系;设得太高,模型会把所有词都当成实词去拼命满足,导致几何扭曲、出现锐利刺。我的经验是,用二分法找甜点。先给个默认值,看结果;如果偏了,就往相应方向调一半;三四次之后基本能稳在“既忠实于语义、又不牺牲几何美感”的区间。单次生成看不出差别,多跑到十几二十次,差异会非常明显。
6.3 批量生成是最大的“参数”
说实话,我用到现在,感觉text-to-cad里最有效率的“参数”就是批量。你单次生成一个结果就像开盲盒,批量生成三十个再挑,就变成了搜索。一次批量跑的显存和时间成本,往往比反复调参低很多。我干活时都是把生成界面开成网格模式,快速扫。
6.4 记录每个结果对应的种子和参数
我吃过不记参数的亏:有一次跑出特别好的结果,但忘了存提示词和种子,后面想重新生成一模一样的,硬是没复现出来。从那以后我养成了习惯,每个生成任务都会建一个txt文件,记录时间、提示词、种子、引导权重、步数、备注。这个习惯在工程复盘时价值极大。
7. 未来方向判断:真正的“text-to-CAD”还在路上
最后说点对行业方向的判断。在我看,现在的text-to-cad实现的有两个致命短板,一个是输出网格而非参数化特征,另一个是数据瓶颈。这两点不突破,它就一直只能是“草图工具”,成不了“设计工具”。
参数化CAD的本质是特征树,一个法兰是由“拉伸一个圆柱→切除一个孔→圆周阵列”等一系列操作历史构成的。现在text-to-cad生成的是最终几何形态,没有操作历史。工程人员拿到模型,无法再去拖动一个参数看变化,无法修改一个特征的深度然后看后面特征联动更新。所以现在业界最关注的方向之一,就是从网格反推特征树,或者在生成阶段直接输出特征序列。后者更难,因为特征顺序本身是一种语法,模型需要学习“如何按合理顺序做几何操作”,而不只是“长什么样”。
数据瓶颈也同样突出。要训练模型理解工程语义,需要大量高质量的三维CAD模型、文本标注和特征历史。当前能找到的数据集,几何覆盖面、行业跨度都有限。所以现阶段更靠谱的做法是行业内部做垂直数据收集,用企业积累的历史模型和标注去训练垂直模型,效果远好于通用模型。数据质量比数量更关键,一段脏数据会把生成效果带偏一倍以上。
我持续关注的几个方向包括:参数化特征树生成、文本驱动的草图平面推理、装配关系与运动副的生成、质量检查驱动的生成闭环。这些方向的进展,会是一个更完整的“用户说意图,系统生成可编辑工程模型”的未来。
8. 收尾:我的实际体会
我不是做学术研究的,更多是从落地使用者的角度讲这些体会。text-to-cad在我手上的定位,是一个“思考加速器”,它把一个“从0到1描绘形态”的过程,从几个星期压到几个小时。但它的产出离“交付级设计”还有明显距离,中间还隔着网格修复、特征重建、工程校核这些硬工作。如果以这个现实定位使用它,这工具是真的能提效的;如果你指望它彻底替代建模师,那你会失望。
最后分享一个小经验,也是我最近才养成的习惯:用text-to-cad做方案评审前的“预体验”。把最终要发给客户的方案描述,先丢给它生成一个粗略几何,拿这张图去跟同事讨论结构方向、跟客户确认布局意图,等意见收敛了再上正式CAD建模。这个小流程帮我挡掉了至少两轮大改,省下的时间和沟通成本相当可观。方向已经在那了,剩下的就是多跑、多试、多记录。