别让AI直接吐模型了!用代码生成3D模型才是参数化建模的正确姿势 📅 发布时间:2026/9/7 5:41:35 👁 浏览次数: 聊到用AI做3D模型很多人的第一反应是“直接给我吐一个STL/OBJ出来”。这个想法完全可以理解毕竟现在文本生成3D、图片生成3D的工具越来越常见感觉一句话就能搞定一个模型。但真把这些模型拿去用的时候问题就来了想改一个尺寸只能重新生成一版重新生成后造型细节又变了对不上之前的版本导入切片软件经常冒出烂面、破孔、非流形边缘打印出来才发现货不对板。而反观另一条路——让AI写一段生成模型的代码——看起来多了一步用起来反而特别顺手尺寸、壁厚、孔位全是参数改一个变量全模型自动同步一个脚本还能批量生成几十个变体。这篇文章我就把自己在项目里反复验证过的这套思路完整拆出来为什么建议别让AI直接吐3D模型而让它写代码以及具体怎么落地。1. 先想清楚为什么建议别让AI直接吐模型1.1 “看起来能用”和“实际上能用”是两码事我先说结论AI直接生成的3D模型文件绝大多数是“看起来能用”而不是“实际上能用”。现在的图片生成3D、文本生成3D工具底层大多在做网格mesh预测生成结果是一个由大量三角面片拼出来的多边形网格。这种网格放在渲染器里看光影效果可能很唬人一旦进了3D打印切片、CNC加工或精雕软件问题立刻暴露——烂面、破孔、非流形边缘、法线方向混乱这些在视觉上很难发现的问题在制造环节全是致命的。我见过有人拿图片生成3D工具导出一个工件模型结果导入切片软件后连最基本的“可打印性检查”都过不了也见过有人让AI直接生成一个带安装孔的支架生成出来孔倒是有了但孔的轴线根本不垂直于安装面这种模型在工程里基本属于废品。为什么会这样因为生成式模型擅长的是“统计规律”它在隐空间里猜出一堆“大概率长这样”的顶点和面但它并不理解“这里是一个直径5mm的过孔”“这里和对面有一个同轴度要求”这类工程语义。换句话说直出的模型是一幅画不是一份图纸。看看网上那些“一张图片生成3d可雕刻模型的软件”测评就能发现好看的模型很多能拿来雕刻、打印、加工的反倒是少数。1.2 让AI写代码本质是拿到了一份“可编辑源文件”那“让AI写代码”这条路好在哪里用一个类比直接生成3D模型等于让设计师给你一张定稿的位图改一个字都要重新画让AI写生成3D模型的代码等于让设计师给你一个PSD源文件图层、参数、可调项都整齐摆在那里想改哪里改哪里。代码描述几何体的建模方式业内叫程序化建模。模型不是一个被“猜”出来的网格而是一组可执行的几何指令先画一个长方体再挖掉一个圆柱最后布尔求和出一个凸台。每条指令都可解释、可修改、可回滚。你甚至能在Git里管理版本今天的模型和昨天的模型到底差在哪diff一下代码就清清楚楚。更关键的是大模型天生擅长写代码。训练数据里OpenSCAD、Three.js、Blender Python这类建模代码量非常大代码又有严格的语法和报错机制AI生成错了你把它贴回去告诉它报错信息它能自己修正。这就在你和AI之间形成了一个“自然语言描述—生成代码—编译报错—修改代码”的闭环现在很多AI Agent框架也在做同样的事情。对比一下直接生成网格出问题了你没法把烂面当“编译报错”反馈给模型让它修正只能从头再生成一次完全靠运气。1.3 哪些场景值得走“AI生成代码”这条路以我实际做过项目的经验下面三类场景最受益一是3D打印配件和结构件。键帽、外壳、传感器支架、工装夹具这类件尺寸要求严格、孔位多、需要反复调整。用程序化建模改一个孔距参数整个零件重新生成比在建模软件里手动拖拽快得多。二是需要批量变体的场景。比如同一款外壳要做三种尺寸、四种颜色、两种孔位布局。手写一个参数化脚本然后循环生成一分钟出8个模型文件这是我经常干的事。三是需要和硬件设计流程对接的场景。做产品结构时板卡尺寸、连接器位置、螺丝孔位都是在变的。程序化建模可以把这些外部尺寸定义成变量板子改了脚本一更新外壳跟着改。这个在工程上价值非常大。反过来也有不适合的场景需要高度有机形态、雕塑造型、生物曲面这类东西程序化建模并不擅长AI写代码也写不出流畅的动物形体。这种需求更适合传统的雕刻软件或图片生成3D工具做一个粗模再手工精修。2. 工具选型4种主流程序化建模方案怎么挑2.1 OpenSCAD最轻量最适合AI上手我第一推荐就是OpenSCAD。它可能是目前“AI生成代码3D建模”组合里成功率最高、学习成本最低的一个。OpenSCAD的建模逻辑很简单加减法。用cube()画方块用cylinder()画圆柱用translate()挪位置用difference()做减法用union()做合并基本就这些。整个语言没有太多花哨的概念AI训练数据里大量OpenSCAD代码都是这种简单结构它生成出来的代码正确率非常高几乎没有学习曲线。它的缺点是曲面造型能力弱圆角、倒角、复杂曲面都不太方便做机械件和结构件完全够用做外观件就要靠Blender那套了。另外一个好处是OpenSCAD免费跨平台导出STL直接切片打印整个链路干净利落。2.2 Three.js网页端3D展示和实时定制如果你的目标是“在浏览器里展示3D模型”或者做一个在线定制工具比如用户拖动滑块改产品颜色、形状、尺寸那Three.js是最好的选择。Three.js是一个JavaScript的3D渲染库AI对JS的熟练程度是所有语言里最高的。你可以让AI用Three.js写一个参数化生成函数用一个滑块控制模型尺寸实时刷新视图。这套组合在电商定制、Web 3D展示、线上配置器这些场景里特别好使不需要用户安装任何软件打开网页就能看。需要注意Three.js生成的模型本质还是网格不适合直接导给制造端。它的价值在于“前端快速验证”和“交互展示”真正要打印还是要导出一份带尺寸信息的STL通常是让AI再配合生成一份OpenSCAD或CadQuery代码。2.3 Blender Python API从参数化到最终渲染一把梭如果你既要参数化建模又要做渲染图、动画、甚至后续手工雕刻调整那Blender的Python API通常叫bpy值得用。Blender内置Python解释器你可以在脚本编辑器里让AI生成一段建模型的代码执行后直接出现在Blender视口里。好处是生态极强材质、光照、渲染、后期都在同一个软件里参数化生成的模型可以直接进渲染管线出产品效果图。缺点是bpy的API细节特别多对象名、模式切换、上下文管理这些概念AI经常写错。我的经验是让AI生成核心几何创建代码自己再负责执行环境和少量修正。另外Blender全英文界面和快捷键体系对新手不友好需要一点耐心。2.4 CadQuery / SolidPython面向工程CAD的进阶选择如果你的目标是做真正的工业零件最终要和STEP、IGES这类CAD格式打交道那CadQuery值得了解。CadQuery是一个Python库建模方式更接近传统CAD先创建一个平面拉伸出实体再选面打孔、倒角每一步都在维护一个“特征历史”导出的是STEP文件可以直接进SolidWorks、FreeCAD这些工业软件。AI生成CadQuery代码的准确率比OpenSCAD要低一些因为API更复杂但它的表达力强得多尤其适合结构件、钣金件、带复杂孔位的零件。SolidPython是另一个选择本质是把OpenSCAD语法包装到Python里。如果你会Python但不习惯OpenSCAD语法可以用它核心逻辑没变。2.5 快速对比哪个工具适合你工具建模逻辑适合场景AI生成友好度输出格式OpenSCADCSG加减法3D打印、机械件、结构件高STL、DXFThree.jsJavaScript几何体网页3D展示、在线定制高GLTF、STLBlender Pythonbpy场景图渲染、动画、手工精修中低BLEND、STL、OBJCadQuery/SolidPython特征历史工业CAD、STEP对接中STEP、STL给一个选型建议零基础、专注3D打印的直接上OpenSCAD做网页展示的上Three.js要出效果图还想要手工修改余地的上Blender Python进了工业级项目CadQuery必学。不要贪多先从第一个搭配AI跑通一遍流程后面自然会触类旁通。3. 实操让AI写代码生成3D模型的完整流程3.1 提示词怎么写AI才不“发挥失常”很多人让AI写建模代码翻车问题不在AI而在提示词没说清楚。程序化建模最讲究精确你不能只说“帮我做个外壳”然后期待尺寸是对的。我的提示词模板大概长这样你是一名程序化建模工程师只用OpenSCAD语言输出完整可运行代码。 需求做一个带安装孔的圆形外壳用于放置一个直径50mm的传感器。 尺寸要求外径60mm高度30mm壁厚2mm。 底部有3个直径3.2mm的安装孔均布在半径22mm的圆周上。 所有关键尺寸必须定义为文件顶部的变量方便后续修改。 如果需求和制造工艺有冲突比如壁厚太小用一行注释指出问题。 直接输出代码不要解释。这个模板有几个关键点一是明确指定语言不给AI发挥空间二是把“需要什么”讲具体带外径、壁厚、孔位三是要求“顶部变量”这是程序化建模的灵魂没这个要求AI很可能把数值散落在代码里后面想改一个数要找半天四是要求冲突提示这个很重要逼着AI做几何合理性检查而不是闷头生成一个无法打印的代码。实测下来按这个模板让AI生成的代码第一次跑通率在七八成以上剩下的基本是尺寸细节问题改起来也很快。3.2 案例用OpenSCAD让AI做一只机械键盘键帽我实际演示一个案例——做一只机械键盘的键帽。这个小东西尺寸要求严、结构典型特别能说明问题。需求是这样的MX轴标准键帽简化版顶部18mm×18mm总高10mm壁厚1.6mm底部带一个直径5.5mm、深度3.5mm的圆柱插口。我把这个需求放到上面的模板框架里AI给出的核心代码大致如下$fn 64; // 可调参数 cap_size 18.0; // 键帽顶部边长 cap_height 10.0; // 键帽总高 wall 1.6; // 壁厚 bottom 1.5; // 底部厚度 stem_d 5.5; // 底部插口直径 stem_depth 3.5; // 底部插口深度 // 主体 module keycap() { difference() { // 实心立方体 cube([cap_size, cap_size, cap_height], center true); // 从顶部向下挖空保留底部厚度 translate([0, 0, bottom - cap_height / 2]) cube([cap_size - 2 * wall, cap_size - 2 * wall, cap_height], center true); } } // 底部插口 module stem() { translate([0, 0, -cap_height / 2]) cylinder(d stem_d, h stem_depth); } keycap(); stem();这段代码执行后会得到一个最简单的方形键帽外壳。注意几个细节位置关系是最容易出错的所以主体用了center true所有坐标都围绕原点对称这样挖空、插口的位置更好算。挖空时translate的z坐标是bottom - cap_height / 2刚好让挖空区域的底部落在“底部厚度1.5mm”的位置。插口没有做十字标准结构是为了先跑通最小流程现实中MX键帽是十字凹槽原理一样只是把圆柱换成两个交叉方块做差集。代码拿到手后打开OpenSCAD粘贴进去按F5预览。看到模型没问题按F6完整渲染等右侧出现实体再File→Export→Export as STL就生成了能直接送切片软件的STL。3.3 迭代修改把AI当成能改代码的建模助理程序化建模最爽的地方就是后面这个迭代环节。比如我发现壁厚1.6mm打完手里这卷料之后强度不够想改成2.2mm。我不需要在建模软件里重新建模只要把这段代码贴回给AI补一句“把wall参数改成2.2mm并检查其他尺寸是否冲突”。AI会重新输出一版代码可能还会提醒我“内部空间从14.8缩到13.6传感器放不放得下”这一来一回非常高效。再比如我想要更接近真实键帽的顶部圆角可以继续提需求“给主体加R1的圆角用minkowski实现并确保底部不圆角”。AI会改成类似的形态module body() { minkowski() { cube([cap_size - 2, cap_size - 2, cap_height - 2], center true); sphere(r 1); } } // 切掉底部的圆角保证底面能平放 intersection() { body(); translate([0, 0, -cap_height / 2]) cube([cap_size * 2, cap_size * 2, cap_height], center true); }实际代码可能还要再调整几次但这个交互过程说明了核心价值你面对的不再是一个黑盒模型文件而是一个可以由AI持续维护、持续改版本的代码项目。把这个思路放大你会发现整个3D资产的生产方式变了从“每次重新生成”变成了“需求变更→代码变更→模型同步变更”。3.4 导出与打印前的自检清单在把STL送进切片软件之前我建议按这个清单过一遍在OpenSCAD里按F6完整渲染确认没有红色高亮报错。用“View→Thrown Together”检查布尔运算方向是否正确挖空和实体有没有搞反。导出的STL导入切片软件后开启“自动修复/统一法线”多数大的空腔问题会自动提示。检查最小壁厚打印材料不同最薄处建议不低于0.8mmPLA外壳件至少1.2mm以上才够结实。实际打印前先量一眼模型在切片软件里的尺寸很多人翻车都是因为“以为单位是毫米”结果整体缩放错误。这套自检流程我每次都用能拦下绝大多数低级返工。4. 常见问题与排查技巧实录4.1 一次看清AI建模代码的典型故障速查先放一个速查表后面展开说排查思路。现象可能原因快速解法代码直接报错语法错误、API版本不匹配把报错信息原样贴给AI能渲染但尺寸对不上单位约定不明确强制约定mm切片时复核尺寸切片报非流形/破面共面、零厚度、布尔重叠留重叠量用3D Builder修复模型结构不合理AI不理解制造约束在提示词里补充工艺要求4.2 AI生成代码报错先照三个方向排查用AI生成建模代码报错太常见了。我的习惯是第一遍跑不通先不慌按下面三个方向查。第一个是语法级错误。函数名拼错、括号不匹配、参数名不对这类问题直接把报错信息原样贴给AI就行它自己改得很快。第二个是API版本问题。像OpenSCAD的老版本很多函数不支持d参数只能写rThree.js不同版本构造函数写法也不一样Blender不同版本API差异更大。这时候我会在提示词里补一句“使用较新的稳定版API”或者把当前软件的版本号发给AI。第三个是坐标和几何语义问题。AI生成的代码不会报错但模型不是你想要的——比如孔的位置偏了、挖空方向反了、整体旋转了90度。排查时在OpenSCAD里用不同视角多看看用#前缀临时高亮某个子模块能快速定位是哪一步操作的位置算错了。4.3 单位和尺寸的坑AI脑海里的“毫米”不是你的毫米单位问题是程序化建模里翻车率最高的坑。OpenSCAD本身是一个抽象单位系统你在代码里写cube([10, 10, 10])它并不知道这是10毫米还是10英寸完全看你切片时怎么解释。AI训练数据里既有毫米也有英寸还有像素它可能在你要求“外径60”的时候给你一个看起来完全不对的模型。解决办法是强制约定。我习惯在提示词第一行就写“所有尺寸的单位是毫米”同时在参数注释里写清每个变量代表什么。导出STL后再在切片软件里确认一下模型实际尺寸用卡尺量一下比什么都准。还有一个细节是打印公差FDM打印有材料收缩和层厚限制孔做小了后期要扩孔轴做粗了插不上。建模时会按惯例加0.1~0.2mm的间隙但AI根本不知道这件事需要你在提示词里主动提“孔径按实际需求加0.2mm余量”。4.4 几何“看起来对”但永远无法打印干涉、破面、非流形这是最隐蔽的一类问题AI生成的代码在预览器里看起来完全正常一进切片报错或者切片出来是残缺的。常见原因是布尔运算里有重叠面、零厚度薄片、内部残留碎面。比如用difference()挖孔时被减的圆柱刚好和实体表面贴合形成共面渲染看不出来但导出STL时就会产生非流形边。排查和规避手段有三个第一让挖空和被挖的几何体在尺寸上留出重叠量比如挖空区域的高度比实体多出0.1mm而不是和表面平齐。这样布尔运算更干净。第二开启OpenSCAD里的manifold渲染引擎或导出后导入Windows自带的3D Builder做一次自动修复这些工具能帮你定位非流形位置。第三让AI自己检查。提示词里加一行“检查是否存在共面、零厚度、非流形”虽然AI不能真的跑几何检查但它在生成代码的时候会更小心地错开重叠面实测能减少一半这类问题。4.5 与硬件设计流程衔接的一个小提醒做电子产品结构件的时候很多人会从立创EDA这类工具的库里下载现成元件的3D模型再导入Altium Designer这类PCB软件里做装配验证。这么做本身没问题但要注意这些模型是固定尺寸的STEP文件没有参数也没有建模历史。元件封装尺寸版本更新后你得重新下载一个文件重新导一遍装配位置还可能对不上。如果这个电子元件的外壳、支架是你自己在做的那就更应该走程序化建模——把元件关键尺寸、安装孔距、连接器位置定义成参数版本一更新改变量重新生成所有关联结构同步更新。这样整个硬件结构件的设计链路才是活的、可控的而不是靠一个一个手动对位改一处就要全盘返工。我个人折腾下来最大的体会是AI直出3D模型的上限取决于生成模型的工具本身而AI写代码生成3D模型的上限取决于你对模型的理解和描述能力。后者是能持续积累的一个写好的参数化脚本改几个数字又是一块新零件。最后再分享一个我自己的习惯每次让AI改完代码我都会把旧版本和新版本同时在OpenSCAD里打开用视图交叉对比的方式快速确认改动只影响了目标区域。这个习惯帮我拦下了不少AI“顺手改坏其他地方”的情况。这篇上先讲到这。下一部分我准备用一个更完整的案例——从产品需求到多零件组装的完整流程——把OpenSCAD的布尔运算、装配约束、工程图导出这些细节一次性讲透核心依然没变让AI把模型翻译成可维护的代码而不是让它替你做决定。