戰(zhàn):從自然語(yǔ)言到 STEP/GLB/STL 的完整鏈路)
1. 從一段文字到三維模型text-to-cad 到底在解決什么問(wèn)題第一次聽(tīng)到 text-to-cad 這個(gè)詞很多人腦子里浮現(xiàn)的畫面大概是對(duì)著電腦敲一句給我畫一個(gè)法蘭盤然后屏幕上就自動(dòng)出現(xiàn)一個(gè)帶螺栓孔的三維模型。這個(gè)想象不算離譜但真正落地的時(shí)候它解決的問(wèn)題比自動(dòng)畫圖要具體得多也有意思得多。text-to-cad 的核心是把自然語(yǔ)言描述轉(zhuǎn)換成CAD 可識(shí)別的幾何數(shù)據(jù)。這里的CAD 可識(shí)別是關(guān)鍵——不是生成一張好看的渲染圖而是生成一個(gè)帶精確尺寸、帶拓?fù)浣Y(jié)構(gòu)、能被下游軟件繼續(xù)編輯和加工的模型文件。常見(jiàn)的輸出格式包括STEP精確邊界表示適合機(jī)械加工和裝配、GLB適合可視化、網(wǎng)頁(yè)展示、AR 預(yù)覽、STL三角網(wǎng)格適合 3D 打印和快速成型。這三種格式對(duì)應(yīng)的是完全不同的使用場(chǎng)景選錯(cuò)了后面全是麻煩。為什么這件事值得單獨(dú)拿出來(lái)講因?yàn)閭鹘y(tǒng) CAD 建模的門檻卡在人身上。一個(gè)熟練的工程師畫一個(gè)中等復(fù)雜度的零件從草圖約束到拉伸切除少說(shuō)也要十幾分鐘到半小時(shí)而一個(gè)不懂 CAD 的人哪怕只是想要一個(gè)簡(jiǎn)單的支架模型也得先花幾十個(gè)小時(shí)學(xué)軟件。text-to-cad 想做的就是把描述需求和得到模型之間的這段路縮短讓不會(huì)建模的人也能拿到能用的幾何文件讓會(huì)建模的人把重復(fù)勞動(dòng)交給流程。它適合誰(shuí)我梳理下來(lái)大概三類人最需要一是做產(chǎn)品原型、需要快速驗(yàn)證外形的人二是做 3D 打印、經(jīng)常要臨時(shí)改模型尺寸的玩家和小工作室三是做自動(dòng)化流程、想把建模環(huán)節(jié)接進(jìn)自己腳本里的開(kāi)發(fā)者。如果你屬于這三類中的任何一類下面這些內(nèi)容應(yīng)該能幫你少走不少?gòu)澛?。需要先說(shuō)明一點(diǎn)text-to-cad 目前還不是一句話出成品的魔法。它更像一個(gè)翻譯器加參數(shù)化模板引擎——你給的結(jié)構(gòu)化信息越清楚出來(lái)的模型越靠譜你給一句含糊的做個(gè)好看的盒子它給你的大概率是個(gè)沒(méi)法用的東西。理解這個(gè)定位后面的所有操作邏輯就都順了。2. 三種輸出格式的取舍STEP、GLB、STL 各自的地盤很多人第一次接觸 text-to-cad最容易犯的錯(cuò)就是隨便選個(gè)格式導(dǎo)出。結(jié)果拿著 STL 去做裝配發(fā)現(xiàn)根本沒(méi)法約束配合或者拿著 STEP 去傳網(wǎng)頁(yè)預(yù)覽文件大得加載半天。格式選擇不是小事它直接決定了你后面能不能順利干活。2.1 STEP要精度、要后續(xù)編輯就選它STEPStandard for the Exchange of Product Data是工業(yè)界通用的精確幾何交換格式。它保存的是邊界表示B-rep也就是用數(shù)學(xué)曲面和精確的邊、面來(lái)描述實(shí)體。這意味著什么意味著你導(dǎo)出的模型別人在 SolidWorks、中望 CAD、Fusion 360 里打開(kāi)后還能繼續(xù)做倒角、打孔、加約束、做裝配。我實(shí)測(cè)下來(lái)的經(jīng)驗(yàn)是只要你的模型后續(xù)還要被加工——不管是改尺寸、加特征還是拿去做 CNC 編程——STEP 都是首選。它的缺點(diǎn)是文件相對(duì)大而且不同軟件之間的 STEP 轉(zhuǎn)換偶爾會(huì)出現(xiàn)破面曲面丟失或變形尤其是復(fù)雜曲面模型。規(guī)避方法是在導(dǎo)出時(shí)選擇較新的 STEP 協(xié)議版本如 AP214 或 AP242兼容性會(huì)好很多。提示如果你打算把 text-to-cad 生成的模型交給工廠報(bào)價(jià)或加工優(yōu)先導(dǎo)出 STEP并在導(dǎo)出前確認(rèn)單位是毫米。單位錯(cuò)了一個(gè) 50mm 的零件可能變成 50 英寸直接報(bào)廢。2.2 GLB網(wǎng)頁(yè)展示、AR 預(yù)覽的輕量選擇GLB 是 glTF 格式的二進(jìn)制版本專門為實(shí)時(shí)渲染設(shè)計(jì)。它把幾何、材質(zhì)、貼圖打包成一個(gè)文件體積小、加載快瀏覽器和移動(dòng)端都能直接讀。如果你的目標(biāo)是把模型放到網(wǎng)頁(yè)上讓人轉(zhuǎn)著看或者在手機(jī) AR 里預(yù)覽一下擺在家里什么效果GLB 是最合適的。但要注意GLB 里的幾何精度通常不如 STEP。它更偏向看起來(lái)對(duì)而不是尺寸精確。所以別拿 GLB 去做需要精確配合的裝配它適合的是展示和溝通環(huán)節(jié)。我一般的工作流是STEP 存檔和加工GLB 用來(lái)給非技術(shù)同事或客戶看效果兩邊各司其職。2.3 STL3D 打印的老朋友但別拿它做設(shè)計(jì)STL 用三角面片逼近模型表面是 3D 打印切片軟件最常吃的格式。它的優(yōu)點(diǎn)是幾乎所有 3D 打印機(jī)和切片軟件都支持簡(jiǎn)單粗暴。缺點(diǎn)也很明顯它只有表面網(wǎng)格沒(méi)有實(shí)體概念沒(méi)有單位很多 STL 文件是無(wú)單位的靠切片軟件猜也沒(méi)法做參數(shù)化編輯。熱詞里出現(xiàn)的 sw 中 stl 轉(zhuǎn) stp 和 3dsmax2012 修復(fù) stl 模型的 uv其實(shí)都反映了 STL 的這個(gè)痛點(diǎn)——它是個(gè)終點(diǎn)格式進(jìn)去容易出來(lái)難。STL 轉(zhuǎn) STEP 本質(zhì)上是一個(gè)逆向重建過(guò)程需要軟件去擬合曲面復(fù)雜模型轉(zhuǎn)出來(lái)經(jīng)常一堆碎面。所以我的建議是STL 只作為最終打印或展示的輸出不要把它當(dāng)成中間編輯格式。格式幾何類型精度可編輯性典型用途STEPB-rep 精確曲面高強(qiáng)機(jī)械加工、裝配、工程存檔GLB三角網(wǎng)格材質(zhì)中弱網(wǎng)頁(yè)展示、AR、可視化STL三角網(wǎng)格中低極弱3D 打印、快速成型選格式這件事本質(zhì)上是問(wèn)自己一句這個(gè)模型下一步要交給誰(shuí)、干什么用。想清楚這個(gè)格式就不會(huì)選錯(cuò)。3. 把一句話變成可建模的參數(shù)描述結(jié)構(gòu)化才是真功夫text-to-cad 能不能出好結(jié)果八成取決于你輸入的那段文字。很多人以為隨便寫一句就行實(shí)測(cè)下來(lái)完全不是這么回事。系統(tǒng)需要的是可解析的幾何參數(shù)而不是文學(xué)描述。這一節(jié)我把自己摸索出來(lái)的描述方法拆開(kāi)講。3.1 從我想要個(gè)支架到L 形支架底板 80×60×5mm立板高 50mm先看一個(gè)反面例子。如果你輸入幫我做一個(gè)固定攝像頭的支架系統(tǒng)大概率會(huì)給你一個(gè)形狀隨機(jī)、尺寸隨意的模型因?yàn)楣潭〝z像頭這個(gè)描述里沒(méi)有任何可量化的幾何信息。它不知道底板多大、孔位在哪、立板多高。正確的做法是把描述拆成幾個(gè)維度整體形狀 關(guān)鍵尺寸 特征位置 約束條件。比如上面那句話可以改寫成一個(gè) L 形支架底板 80mm×60mm厚度 5mm立板從底板后邊緣垂直向上高度 50mm厚度 5mm底板四角各有一個(gè)直徑 4mm 的安裝孔孔中心距邊緣 8mm立板中央有一個(gè)直徑 6mm 的過(guò)線孔。這樣一段描述幾乎每個(gè)短語(yǔ)都對(duì)應(yīng)一個(gè)可計(jì)算的幾何操作。系統(tǒng)解析起來(lái)就順出來(lái)的模型也基本能用。我一般會(huì)先在紙上把關(guān)鍵尺寸列出來(lái)再組織成句子比直接對(duì)著輸入框硬想要快得多。3.2 尺寸、位置、數(shù)量三類信息缺一不可我把描述里的信息歸成三類缺哪一類都會(huì)出問(wèn)題尺寸類長(zhǎng)、寬、高、厚度、直徑、半徑、角度。這類信息決定模型的大小。位置類孔在哪個(gè)面、距邊緣多少、特征之間的相對(duì)關(guān)系同心、平行、垂直。這類信息決定模型的布局。數(shù)量類幾個(gè)孔、幾段折彎、幾層結(jié)構(gòu)。這類信息決定模型的重復(fù)結(jié)構(gòu)。舉個(gè)實(shí)際踩過(guò)的坑我曾經(jīng)輸入一個(gè)帶孔的圓盤結(jié)果出來(lái)一個(gè)孔位在正中心的圓盤但我其實(shí)想要的是沿圓周均勻分布的六個(gè)孔。問(wèn)題就出在數(shù)量和位置都沒(méi)說(shuō)清楚。后來(lái)改成直徑 100mm、厚 10mm 的圓盤沿直徑 80mm 的圓周均勻分布 6 個(gè)直徑 8mm 的通孔一次就對(duì)了。注意不同工具對(duì)描述的解析能力差異很大。有的支持均勻分布對(duì)稱同心這類關(guān)系詞有的只認(rèn)具體坐標(biāo)。上手一個(gè)新工具時(shí)先用一個(gè)簡(jiǎn)單模型試它的理解邊界再?zèng)Q定描述寫多細(xì)。3.3 單位、公差和基準(zhǔn)容易被忽略但會(huì)要命單位問(wèn)題我在前面提過(guò)一次這里再?gòu)?qiáng)調(diào)因?yàn)樗娴奶菀追?。text-to-cad 工具默認(rèn)單位可能是毫米也可能是英寸甚至可能是無(wú)量綱。你輸入10的時(shí)候系統(tǒng)未必知道你說(shuō)的是 10mm 還是 10cm。我的習(xí)慣是在描述里顯式寫出單位比如底板長(zhǎng) 80mm而不是底板長(zhǎng) 80。多打兩個(gè)字母省掉后面一堆麻煩。公差和基準(zhǔn)在快速原型階段可以先不管但如果你生成的模型要拿去加工就得考慮。比如孔徑和軸徑的配合標(biāo)注個(gè) H7 或者留 0.1mm 間隙這些信息目前 text-to-cad 一般處理不了需要導(dǎo)出 STEP 后在 CAD 軟件里手動(dòng)補(bǔ)。所以我的流程是text-to-cad 負(fù)責(zé)出毛坯形狀精修和公差標(biāo)注交給專業(yè) CAD。4. 一條能跑通的實(shí)操鏈路從描述到可打印文件光講原理不夠這一節(jié)我把完整流程走一遍。假設(shè)我要做一個(gè)桌面線纜夾需求是能卡住三根直徑 5mm 的線底部能粘在桌面上。下面是我實(shí)際操作的步驟和每一步的思考。4.1 第一步把需求翻譯成幾何參數(shù)先拆需求。線纜夾要卡三根線那主體就是一個(gè)帶三個(gè)半圓槽的塊。底部要粘那底面得是平的。我定的參數(shù)是主體長(zhǎng) 60mm、寬 30mm、高 15mm三個(gè)半圓槽直徑 5.5mm留 0.5mm 余量方便卡線沿長(zhǎng)度方向均勻分布槽口朝上槽深 8mm底部平整四角做 R2 圓角避免刮手。把這些整理成一段描述一個(gè)長(zhǎng)方體線纜夾長(zhǎng) 60mm寬 30mm高 15mm頂面沿長(zhǎng)度方向均勻分布三個(gè)直徑 5.5mm、深 8mm 的半圓槽槽間距相等底面為平面四個(gè)豎直棱邊倒 R2 圓角。4.2 第二步生成并檢查基礎(chǔ)幾何把描述丟進(jìn)工具等它出模型。這時(shí)候別急著導(dǎo)出先在預(yù)覽里轉(zhuǎn)一圈重點(diǎn)看三件事尺寸對(duì)不對(duì)用測(cè)量工具量一下總長(zhǎng)總寬確認(rèn)沒(méi)有單位錯(cuò)亂。特征位置對(duì)不對(duì)三個(gè)槽是不是均勻分布槽口朝向?qū)Σ粚?duì)。有沒(méi)有明顯破面曲面連接處有沒(méi)有奇怪的缺口或重疊。我這次生成的結(jié)果前兩項(xiàng)都對(duì)但槽的間距看起來(lái)不太均勻——中間那個(gè)槽偏了一點(diǎn)。原因是我的描述里槽間距相等這個(gè)說(shuō)法太模糊系統(tǒng)按自己的理解分配了。改成三個(gè)槽中心分別位于距左端 15mm、30mm、45mm 處之后位置就準(zhǔn)了。4.3 第三步導(dǎo)出格式的選擇與參數(shù)設(shè)置模型確認(rèn)沒(méi)問(wèn)題后導(dǎo)出。因?yàn)槲乙?3D 打印所以選 STL。導(dǎo)出時(shí)有個(gè)參數(shù)叫網(wǎng)格精度tolerance / resolution這個(gè)值決定了三角面片的密度。設(shè)得太粗圓弧會(huì)變成多邊形打印出來(lái)棱棱角角設(shè)得太細(xì)文件巨大切片慢。我的經(jīng)驗(yàn)值是普通桌面打印弦高公差設(shè) 0.05mm 左右就夠了如果模型有精細(xì)曲面可以調(diào)到 0.02mm。導(dǎo)出后我會(huì)用切片軟件再檢查一遍看看有沒(méi)有非流形邊non-manifold edges或者法線翻轉(zhuǎn)的問(wèn)題——這些在 STL 里很常見(jiàn)切片軟件一般能自動(dòng)修但嚴(yán)重的得回 CAD 里改。4.4 第四步打印驗(yàn)證與迭代第一次打印出來(lái)我發(fā)現(xiàn)槽的開(kāi)口有點(diǎn)緊線卡進(jìn)去費(fèi)勁。原因是 5.5mm 的槽配 5mm 的線理論上有 0.5mm 余量但 3D 打印的擠出膨脹elephant foot吃掉了這部分間隙。第二次我把槽徑改成 5.8mm就順了。這個(gè)迭代過(guò)程說(shuō)明一件事text-to-cad 出的是設(shè)計(jì)模型不是成品。從設(shè)計(jì)到實(shí)物中間還有材料收縮、打印公差、裝配間隙這些現(xiàn)實(shí)因素。把這些因素提前考慮進(jìn)參數(shù)里能省掉好幾輪打印。環(huán)節(jié)關(guān)鍵參數(shù)我的常用值說(shuō)明描述單位顯式寫 mm避免單位歧義生成特征位置用絕對(duì)坐標(biāo)比均勻分布更可靠導(dǎo)出 STL弦高公差0.05mm兼顧精度和文件大小打印配合間隙0.3~0.5mm補(bǔ)償打印膨脹5. 那些沒(méi)人告訴你但一定會(huì)踩的坑這一節(jié)是我最想寫的部分。前面講的都是應(yīng)該怎么做但實(shí)際操作里真正浪費(fèi)時(shí)間的是那些文檔里不寫、只有踩過(guò)才知道的坑。我挑幾個(gè)最有代表性的講。5.1 描述里的相對(duì)詞是最大的陷阱大一點(diǎn)稍微差不多均勻——這些詞在人類交流里很自然但在幾何解析里全是災(zāi)難。系統(tǒng)不知道你的大一點(diǎn)是 1mm 還是 10mm也不知道均勻是按什么基準(zhǔn)均勻。我踩過(guò)最典型的一次輸入在板子中間打個(gè)稍大的孔結(jié)果系統(tǒng)在幾何中心打了個(gè)直徑 10mm 的孔而我想要的中間是距上邊緣 20mm 的視覺(jué)中心稍大是比原來(lái)的 6mm 大 2mm。后來(lái)我學(xué)乖了所有相對(duì)詞全部換成絕對(duì)數(shù)值描述長(zhǎng)度翻了一倍但一次成功率從三成提到了八成。提示寫完描述后自己讀一遍把所有形容詞圈出來(lái)能換成數(shù)字的全換掉。剩下的如果還有說(shuō)明這個(gè)需求本身就沒(méi)想清楚。5.2 復(fù)雜模型的特征順序會(huì)影響結(jié)果text-to-cad 生成模型時(shí)特征的執(zhí)行順序會(huì)影響最終幾何。比如你先打孔再倒角和先倒角再打孔結(jié)果可能不一樣——倒角可能會(huì)把孔邊緣也倒掉。這個(gè)邏輯和傳統(tǒng) CAD 的建模樹(shù)是一樣的。我的做法是在描述里按建模順序組織語(yǔ)言。先描述基礎(chǔ)形體拉伸、旋轉(zhuǎn)再描述切除特征孔、槽最后描述修飾特征倒角、圓角。這樣系統(tǒng)解析出來(lái)的特征樹(shù)更接近我想要的返工率低很多。5.3 導(dǎo)出后的模型看著對(duì)不等于能用這是最隱蔽的坑。預(yù)覽里模型看著完美導(dǎo)出 STL 后切片發(fā)現(xiàn)中間有個(gè)大洞或者壁厚為零。原因通常是模型有自相交或零厚度面——這些在渲染預(yù)覽里看不出來(lái)但切片軟件會(huì)直接報(bào)錯(cuò)。我的檢查清單是導(dǎo)出后一定用網(wǎng)格修復(fù)工具很多切片軟件自帶跑一遍看有沒(méi)有報(bào)錯(cuò)。如果有回 CAD 里檢查是不是有面重疊或者尺寸設(shè)成了 0。特別是做薄壁件的時(shí)候壁厚一定要大于打印機(jī)能實(shí)現(xiàn)的最小值一般 FDM 是 0.8mm 左右否則出來(lái)就是一層紙。5.4 別指望一次生成就完美迭代才是常態(tài)我見(jiàn)過(guò)太多人試了一次 text-to-cad出來(lái)的模型不理想就下結(jié)論說(shuō)這玩意沒(méi)用。其實(shí)傳統(tǒng) CAD 建模也是一樣第一版草圖往往要改好幾輪。text-to-cad 的價(jià)值在于把第一版的生成時(shí)間從半小時(shí)壓縮到一分鐘然后你在這個(gè)基礎(chǔ)上快速迭代。我的實(shí)際節(jié)奏是第一版描述盡量詳細(xì)生成后看哪里不對(duì)針對(duì)性地改描述里的對(duì)應(yīng)部分再生成。一般三到五輪就能得到可用的模型。這個(gè)速度比從頭手繪快太多了尤其是做系列化的相似零件時(shí)改幾個(gè)參數(shù)就能出一批。6. 把 text-to-cad 接進(jìn)自己的工作流幾個(gè)實(shí)用組合單獨(dú)用 text-to-cad 只是第一步真正提升效率的是把它和現(xiàn)有工具串起來(lái)。這一節(jié)分享幾個(gè)我實(shí)際在用的組合方式。6.1 批量生成用腳本驅(qū)動(dòng)參數(shù)變化如果你要做一系列尺寸不同但結(jié)構(gòu)相同的零件比如不同長(zhǎng)度的支架手動(dòng)一個(gè)個(gè)改描述太慢。我的做法是把參數(shù)抽出來(lái)做成表格用腳本讀表格、拼描述、調(diào)工具接口、批量導(dǎo)出。熱詞里提到的 python 批量對(duì) cad 修改 就是這個(gè)思路。具體來(lái)說(shuō)我會(huì)維護(hù)一個(gè) CSV每行是一組參數(shù)長(zhǎng)度、寬度、孔徑等然后用 Python 讀一行、格式化進(jìn)描述模板、調(diào)用生成、導(dǎo)出 STEP。一百個(gè)零件幾分鐘就跑完。這個(gè)流程的關(guān)鍵是描述模板要穩(wěn)定參數(shù)位置固定這樣腳本替換才不會(huì)出錯(cuò)。6.2 和傳統(tǒng) CAD 配合生成毛坯手工精修text-to-cad 目前處理不了復(fù)雜的裝配約束和工程圖標(biāo)注所以我的標(biāo)準(zhǔn)流程是text-to-cad 出基礎(chǔ)形體導(dǎo)出 STEP再導(dǎo)入中望 CAD 或 SolidWorks 做精修——加配合、標(biāo)公差、出工程圖。這樣做的好處是各取所長(zhǎng)text-to-cad 負(fù)責(zé)快速出形狀傳統(tǒng) CAD 負(fù)責(zé)工程化。我試過(guò)完全用 text-to-cad 出一個(gè)能直接加工的零件結(jié)果在公差和表面粗糙度上完全沒(méi)法滿足要求。分工之后整體效率反而更高。6.3 展示環(huán)節(jié)STEP 轉(zhuǎn) GLB 做網(wǎng)頁(yè)預(yù)覽給客戶或同事看模型的時(shí)候發(fā) STEP 文件對(duì)方未必打得開(kāi)。我一般會(huì)用轉(zhuǎn)換工具把 STEP 轉(zhuǎn)成 GLB嵌到網(wǎng)頁(yè)里對(duì)方打開(kāi)瀏覽器就能轉(zhuǎn)著看。這個(gè)環(huán)節(jié)對(duì)精度要求不高GLB 完全夠用。轉(zhuǎn)換時(shí)要注意材質(zhì)和坐標(biāo)系。STEP 里通常沒(méi)有材質(zhì)信息轉(zhuǎn) GLB 后是灰模需要手動(dòng)加個(gè)基礎(chǔ)材質(zhì)。坐標(biāo)系方面不同軟件對(duì)上方向的定義不一樣有的 Z 朝上有的 Y 朝上轉(zhuǎn)的時(shí)候確認(rèn)一下免得模型躺倒。工作流環(huán)節(jié)工具組合解決的問(wèn)題批量生成腳本 text-to-cad 接口系列化零件快速出圖工程精修text-to-cad 傳統(tǒng) CAD公差、裝配、工程圖展示溝通STEP 轉(zhuǎn) GLB 網(wǎng)頁(yè)非技術(shù)方快速查看7. 我對(duì) text-to-cad 的一點(diǎn)實(shí)際體會(huì)用了這段時(shí)間我最大的感受是text-to-cad 不是要取代 CAD而是把建模這件事的門檻往下拉了一截。它讓不會(huì) CAD 的人能拿到能用的幾何文件讓會(huì) CAD 的人把重復(fù)勞動(dòng)省下來(lái)。但它對(duì)描述能力的要求其實(shí)比想象中高——你得能把腦子里的形狀翻譯成系統(tǒng)能懂的參數(shù)語(yǔ)言。我現(xiàn)在的習(xí)慣是每次用之前先在紙上畫個(gè)草圖標(biāo)上關(guān)鍵尺寸再組織成描述。這個(gè)紙上一分鐘的環(huán)節(jié)能省掉后面好幾輪返工。另外別怕描述寫得長(zhǎng)寫得越具體出來(lái)的模型越接近你想要的。含糊的描述省的是打字時(shí)間費(fèi)的是返工時(shí)間這筆賬怎么算都不劃算。還有一點(diǎn)格式選擇一定要跟著用途走。加工用 STEP展示用 GLB打印用 STL這個(gè)對(duì)應(yīng)關(guān)系記牢能避開(kāi)一大半的兼容性問(wèn)題。至于那些導(dǎo)出后的小毛病比如破面、零厚度養(yǎng)成導(dǎo)出后檢查一遍的習(xí)慣基本都能提前發(fā)現(xiàn)。