阮崇浩,汝 欣,彭來湖,胡旭東
(浙江理工大學(xué)浙江省現(xiàn)代紡織裝備技術(shù)重點(diǎn)實(shí)驗(yàn)室,浙江 杭州 310018)
Mr.ChonghaoRuan@gmail.com;ruxin@zstu.edu.cn;laihup@zstu.edu.cn;xdhu@zstu.edu.cn
襪品作為一年四季不可或缺的服飾品,除了滿足人們?nèi)粘5拇┲枨笸?,其在醫(yī)療、運(yùn)動(dòng)、塑形等領(lǐng)域的應(yīng)用范圍不斷擴(kuò)大,例如醫(yī)療壓力襪、跑步襪、瘦腿襪等。這些襪品在設(shè)計(jì)上需要符合使用者的足部特征,在生產(chǎn)時(shí)需要進(jìn)行精細(xì)的外形控制。而傳統(tǒng)的襪品生產(chǎn)技術(shù)受商業(yè)CAD軟件的限制,并不能很好地適應(yīng)這些新需求。傳統(tǒng)襪品開發(fā)流程包括設(shè)計(jì)、打樣、測(cè)試、批量生產(chǎn)。工人需要根據(jù)襪品設(shè)計(jì)稿手動(dòng)計(jì)算出生產(chǎn)所需的編織參數(shù),并輸入款式文件中。同時(shí)傳統(tǒng)的編織參數(shù)計(jì)算方法存在一定缺陷,例如各部段的橫列數(shù)是取固定的橫向密度進(jìn)行計(jì)算的,其結(jié)果并不準(zhǔn)確,往往需要通過反復(fù)打樣對(duì)參數(shù)進(jìn)行調(diào)整才能達(dá)到設(shè)計(jì)要求,這個(gè)過程繁復(fù)冗雜。
近年來,隨著計(jì)算機(jī)圖形學(xué)技術(shù)的蓬勃發(fā)展,針織織造技術(shù)以數(shù)字化、智能化為發(fā)展主線,不斷對(duì)針織設(shè)備與工藝流程等進(jìn)行智能化改造。WU等人提出了一種可將三維模型轉(zhuǎn)化為仿真織物模型的方法,但該織物模型的一行網(wǎng)格對(duì)應(yīng)于實(shí)際針織物中一行沒有端點(diǎn)的閉合紗線橫列,不具備可編織性。IGARASHI等人設(shè)計(jì)了一個(gè)可以將三維模型轉(zhuǎn)化成編織指導(dǎo)圖的系統(tǒng),使用者可以根據(jù)圖案的指導(dǎo)手工編織各個(gè)小塊,最后組裝成完整織物。MCCANN等人開發(fā)了一種編譯器,可以將經(jīng)過排版的形狀基元的組合圖案轉(zhuǎn)換為V型橫機(jī)的機(jī)器指令。NARAYANAN等人首次實(shí)現(xiàn)了將三維網(wǎng)格模型通過網(wǎng)格重構(gòu)轉(zhuǎn)換為針織機(jī)指令。但是,這些方案僅適用于可進(jìn)行自由加減針的橫機(jī)。
圓襪機(jī)相比于橫機(jī)具有更高的生產(chǎn)效率,是生產(chǎn)襪品的首選機(jī)型。本文針對(duì)傳統(tǒng)襪品生產(chǎn)中存在的問題,利用圖形學(xué)技術(shù),并結(jié)合圓襪機(jī)的工作原理,設(shè)計(jì)了一款襪品三維輔助設(shè)計(jì)系統(tǒng)。用戶可以使用常規(guī)建模軟件進(jìn)行建?;蚶萌S掃描的方式對(duì)襪品的外形進(jìn)行設(shè)計(jì)。系統(tǒng)會(huì)根據(jù)特定規(guī)則在模型表面進(jìn)行頂點(diǎn)采樣,快速、準(zhǔn)確地獲取機(jī)器生產(chǎn)所需的編織參數(shù)。本文的研究旨在減少襪子款式開發(fā)中復(fù)雜的工藝計(jì)算,為機(jī)織技術(shù)從工業(yè)化向大眾化轉(zhuǎn)變提供思路。
三維設(shè)計(jì)相較于平面設(shè)計(jì)更加直觀立體,同時(shí)其在復(fù)雜精細(xì)的外形設(shè)計(jì)方面具有得天獨(dú)厚的優(yōu)勢(shì)。為了能夠顯示、處理三維設(shè)計(jì)模型,本系統(tǒng)主要分為四個(gè)模塊,分別是模型加載模塊、約束環(huán)繪制模塊、網(wǎng)格采樣模塊及路徑編譯模塊,如圖1所示。這四個(gè)模塊正好對(duì)應(yīng)系統(tǒng)將設(shè)計(jì)模型轉(zhuǎn)化為編織參數(shù)的四個(gè)主要步驟。首先系統(tǒng)會(huì)通過模型加載模塊將設(shè)計(jì)模型的數(shù)據(jù)讀取到內(nèi)存中,并對(duì)模型信息進(jìn)行一些預(yù)處理。然后,用戶需要在模型表面通過繪制約束環(huán)的方式標(biāo)記模型的襪口、襪頭位置。系統(tǒng)會(huì)從繪制的約束環(huán)出發(fā),沿著模型表面,根據(jù)特定的規(guī)則對(duì)模型的頂點(diǎn)進(jìn)行采樣,繪制出一條類似真實(shí)紗線軌跡的編織路徑。最后通過路徑編譯模塊,將編織路徑轉(zhuǎn)化成圓襪機(jī)的編織參數(shù)并進(jìn)行輸出。
圖1 系統(tǒng)結(jié)構(gòu)Fig.1 System structure
如圖2所示為系統(tǒng)技術(shù)框架。由于系統(tǒng)需要對(duì)三維模型進(jìn)行渲染、處理,因此選用VC++進(jìn)行開發(fā)。SDL2是一款跨平臺(tái)開發(fā)庫,旨在通過OpenGL和Direct3D提供對(duì)音頻、鍵盤、鼠標(biāo)、操縱桿和圖形硬件的低級(jí)訪問。本系統(tǒng)使用SDL2庫進(jìn)行基礎(chǔ)窗口搭建,使用OpenGL進(jìn)行三維圖像渲染,使用ImGUI進(jìn)行用戶交互界面開發(fā)。用戶可通過在窗口內(nèi)操作UI組件或鼠標(biāo)、鍵盤來調(diào)用程序執(zhí)行相應(yīng)動(dòng)作,實(shí)現(xiàn)頂點(diǎn)采樣等操作。同時(shí)系統(tǒng)會(huì)實(shí)時(shí)建立程序中對(duì)象的OpenGL緩存,通過GPU將圖像渲染,輸出到窗口中,實(shí)現(xiàn)用戶操作的視覺反饋。
圖2 系統(tǒng)技術(shù)框架Fig.2 Technical framework of the system
模型加載模塊主要有讀取模型基本數(shù)據(jù)、讀取約束文件、計(jì)算頂點(diǎn)法向量、計(jì)算邊信息四項(xiàng)功能。
(1)讀取模型基本數(shù)據(jù):系統(tǒng)按行讀取obj文件中的數(shù)據(jù),然后根據(jù)行首的標(biāo)識(shí)符將數(shù)據(jù)存放到相應(yīng)的數(shù)組中。讀取的模型數(shù)據(jù)包括頂點(diǎn)坐標(biāo)、頂點(diǎn)法向量及三角面索引。
(2)讀取約束文件:若輸入模型所在目錄下存在同名的約束文件,系統(tǒng)會(huì)在加載模型時(shí)自動(dòng)讀取約束文件中的信息,即已保存的約束環(huán)的約束點(diǎn)在頂點(diǎn)坐標(biāo)數(shù)組中的索引(數(shù)組下標(biāo))。
(3)計(jì)算頂點(diǎn)法向量:兩點(diǎn)構(gòu)成一條直線,系統(tǒng)會(huì)根據(jù)讀取的頂點(diǎn)法向量、頂點(diǎn)坐標(biāo)及設(shè)置的法向量長(zhǎng)度計(jì)算出法線另一端點(diǎn)的坐標(biāo),并將法線的兩端點(diǎn)坐標(biāo)兩兩一組存儲(chǔ)到一個(gè)pair容器數(shù)組中以用于頂點(diǎn)法向量渲染。
(4)計(jì)算邊信息:系統(tǒng)遍歷三角面索引數(shù)組,整理出所有的邊,即找出每個(gè)頂點(diǎn)的所有相鄰頂點(diǎn),并計(jì)算出頂點(diǎn)到相鄰頂點(diǎn)的距離(即邊長(zhǎng))。邊信息會(huì)被用于約束環(huán)繪制、網(wǎng)格采樣等操作中。
載入模型后,用戶可以使用鼠標(biāo)、鍵盤在模型表面放置多個(gè)約束點(diǎn),系統(tǒng)會(huì)將這些約束點(diǎn)按順序連接成約束環(huán),如圖3所示。其實(shí)現(xiàn)原理在于本系統(tǒng)使用了Dijkstra最短路徑算法,該算法主要用于求解帶權(quán)圖中一點(diǎn)到其他點(diǎn)的最短路徑,是求解網(wǎng)格頂點(diǎn)最短路徑問題所使用的最廣泛的、經(jīng)典的算法。
圖3 繪制約束環(huán)Fig.3 Drawing constraint rings
(1)算法思想
算法從起始頂點(diǎn)出發(fā)向外擴(kuò)展,從相鄰頂點(diǎn)中選取最合適的頂點(diǎn)加入路徑,確定路徑下一個(gè)“當(dāng)前點(diǎn)”的唯一考慮因素是相鄰的頂點(diǎn)與起點(diǎn)間的距離,直到擴(kuò)展到達(dá)目的頂點(diǎn)。
(2)算法步驟
如圖4所示,查找頂點(diǎn)→的最短路徑的完整步驟如下:
①剛開始={},={、、、、},其中為源點(diǎn),對(duì)應(yīng)的路徑長(zhǎng)度為0。集合中與源點(diǎn)直接相鄰的頂點(diǎn)存在正常的路徑長(zhǎng)度,為兩點(diǎn)間的距離;中與源點(diǎn)不相鄰的頂點(diǎn)對(duì)應(yīng)的路徑長(zhǎng)度為∞。
②將中與源點(diǎn)間距離最短的頂點(diǎn)轉(zhuǎn)移到中,并作為中間點(diǎn),重新計(jì)算中各頂點(diǎn)的路徑長(zhǎng)度。如果源點(diǎn)經(jīng)過中間點(diǎn)到頂點(diǎn)的路徑長(zhǎng)度比之前計(jì)算的路徑長(zhǎng)度短,則更新中頂點(diǎn)的路徑長(zhǎng)度。以圖4步驟2為例,上一步中→的路徑最短,因此將頂點(diǎn)轉(zhuǎn)移到集合中,并作為中間點(diǎn)。以為中間點(diǎn)重新計(jì)算中各頂點(diǎn)的路徑長(zhǎng)度,點(diǎn)和點(diǎn)E的當(dāng)前路徑比之前計(jì)算的∞小,更新從源點(diǎn)到點(diǎn)和點(diǎn)的路徑長(zhǎng)度。
圖4 Dijkstra算法步驟Fig.4 Steps of Dijkstra algorithm
③重復(fù)步驟②直到集合變?yōu)榭铡?/p>
為了避免多次讀取同一模型時(shí)需要重新繪制約束環(huán),系統(tǒng)會(huì)將用戶繪制的約束點(diǎn)以頂點(diǎn)坐標(biāo)索引形式存儲(chǔ)到二維數(shù)組中(約束環(huán)可存在多個(gè),每個(gè)環(huán)由多個(gè)約束點(diǎn)構(gòu)成),并輸出到cons格式文件中,下次讀取該模型時(shí)加載模塊會(huì)自動(dòng)加載對(duì)應(yīng)的cons文件繪制出約束環(huán)。
為了模擬真實(shí)襪品紗線軌跡的形態(tài)特點(diǎn),我們將網(wǎng)格采樣過程細(xì)分為四個(gè)階段:襪筒階段→襪跟階段→襪腳階段→襪頭階段,如圖5所示,步驟如下:
圖5 網(wǎng)格采樣算法流程圖Fig.5 Flow chart of mesh sampling algorithm
(1)執(zhí)行水平采樣,將襪頭環(huán)上的所有頂點(diǎn)添加到目標(biāo)頂點(diǎn)集中。系統(tǒng)沿著紗線的實(shí)際編織方向以均勻的寬度對(duì)目標(biāo)頂點(diǎn)集進(jìn)行采樣,并將采樣節(jié)點(diǎn)水平相連。當(dāng)采樣過程再次回到起始節(jié)點(diǎn)時(shí)就完成了水平采樣,生成一條初始采樣點(diǎn)橫列。
(2)執(zhí)行縱向采樣生成一組新的采樣節(jié)點(diǎn)。系統(tǒng)遍歷當(dāng)前橫列中的所有采樣節(jié)點(diǎn),根據(jù)相鄰節(jié)點(diǎn)頂點(diǎn)法向量的叉積得到當(dāng)前橫列所在面的法向量。然后從當(dāng)前橫列的節(jié)點(diǎn)出發(fā),沿著與面法向量相反的方向找到一個(gè)采樣高度處的頂點(diǎn),作為一組新的采樣節(jié)點(diǎn)。采樣高度并不是固定不變的,縱向采樣會(huì)根據(jù)所處部位的襪品線圈圈高特征去動(dòng)態(tài)地調(diào)整采樣的高度。例如在襪筒階段,系統(tǒng)會(huì)根據(jù)采樣點(diǎn)的頂點(diǎn)法向量和其所在面的面法向量間的夾角對(duì)采樣高度動(dòng)態(tài)地進(jìn)行調(diào)整,以此模擬真實(shí)紗線因受力所產(chǎn)生的形變,如圖6所示。同時(shí)采樣點(diǎn)的數(shù)量也會(huì)變化,在襪跟、襪頭階段,我們?cè)诓蓸铀惴ㄖ屑尤肓思訙p針規(guī)則,使得采樣點(diǎn)個(gè)數(shù)變化符合加減針規(guī)律。
圖6 襪筒階段采樣高度調(diào)整Fig.6 Sampling height adjustment of sock leg
(3)執(zhí)行鏈接,將相鄰的節(jié)點(diǎn)水平鏈接以獲得新橫列。同時(shí)將當(dāng)前橫列的最后一個(gè)節(jié)點(diǎn)與新橫列的第一個(gè)節(jié)點(diǎn)鏈接,使得新橫列與當(dāng)前橫列相連。最后,將新橫列設(shè)置為當(dāng)前橫列。
(4)執(zhí)行平滑處理。如果模型的頂點(diǎn)數(shù)較小,則隨著采樣的迭代進(jìn)行,生成的橫列可能會(huì)變得不平整。因此,系統(tǒng)采用了加權(quán)移動(dòng)平均法對(duì)生成的采樣點(diǎn)橫列進(jìn)行平滑處理,即平滑處理后的節(jié)點(diǎn)坐標(biāo)是該節(jié)點(diǎn)處理前坐標(biāo)與其相鄰節(jié)點(diǎn)的坐標(biāo)的加權(quán)平均值。
(5)重復(fù)步驟(2)—步驟(4),若循環(huán)中滿足了階段切換條件,就切換采樣階段與規(guī)則,直至滿足襪頭階段結(jié)束條件。每個(gè)采樣循環(huán)中都加入了階段切換判斷:例如襪品模型在襪筒與襪跟交界處的頂點(diǎn)具有曲率局部最大的特征。因此在襪筒階段的每個(gè)采樣循環(huán)內(nèi),系統(tǒng)都會(huì)計(jì)算生成的采樣點(diǎn)的曲率,一旦其滿足曲率局部最大特征就切換采樣的階段。
編織路徑就像網(wǎng)格模型與編織參數(shù)之間的橋梁。一方面,編織路徑是在模型表面上采樣生成的,因此其捕獲了設(shè)計(jì)模型的外形特征;另一方面,系統(tǒng)可以從編織路徑中獲取各部段的橫列數(shù)及橫列寬度等編織參數(shù)。其中,橫列的寬度并不能直接在襪機(jī)中進(jìn)行設(shè)置,系統(tǒng)會(huì)將橫列的寬度進(jìn)一步轉(zhuǎn)換成用于控制織物寬度的上機(jī)參數(shù)——線圈長(zhǎng)度。最后,系統(tǒng)會(huì)將這些編織參數(shù)輸入襪品的鏈條文件,襪機(jī)就能夠?qū)υO(shè)計(jì)的襪品進(jìn)行織造。
系統(tǒng)界面和生產(chǎn)硬件如圖7所示。在實(shí)驗(yàn)中,我們使用了WLT-6F全電腦襪機(jī)進(jìn)行織造,針筒的針數(shù)設(shè)置為108 針,紗線材料選用棉紗。如圖8所示,系統(tǒng)輸入的網(wǎng)格模型具有1,090,000 個(gè)頂點(diǎn),采樣過程耗時(shí)35 分38 秒,生成編織路徑,然后通過編譯得到各個(gè)部段的橫列數(shù)及橫列的線圈長(zhǎng)度。各個(gè)部段的橫列數(shù)如表1所示。襪機(jī)根據(jù)輸出的編織參數(shù)織造的襪品如圖8所示。為了更好地呈現(xiàn)襪品的形狀,我們使用了軟泡沫模型進(jìn)行填充,可以看出襪品與模型表面較為貼合。在無任何熱定形處理的情況下,經(jīng)系統(tǒng)指導(dǎo)編織的襪品能夠較好地還原輸入模型的外形。
圖7 實(shí)驗(yàn)環(huán)境Fig.7 Experiment environment
圖8 實(shí)驗(yàn)過程Fig.8 Experiment process
表1 各部段橫列數(shù)Tab.1 Number of rows in different part
本文設(shè)計(jì)和實(shí)現(xiàn)了基于三維網(wǎng)格采樣的襪品輔助設(shè)計(jì)系統(tǒng),該系統(tǒng)初步實(shí)現(xiàn)了使用網(wǎng)格采樣算法指導(dǎo)襪品的織造,將與圖形學(xué)技術(shù)相結(jié)合的新型針織織造技術(shù)拓展到圓襪機(jī)領(lǐng)域。實(shí)驗(yàn)結(jié)果表明,由該系統(tǒng)指導(dǎo)編織的襪品在外形上與設(shè)計(jì)模型基本一致。我們的方案可以有效減少襪品款式開發(fā)中復(fù)雜的工藝計(jì)算,縮減打樣工序。同時(shí)該系統(tǒng)結(jié)合了三維設(shè)計(jì)的優(yōu)勢(shì),可以讓襪品的款式設(shè)計(jì)變得更直觀立體,尤其適用于復(fù)雜精細(xì)外形的設(shè)計(jì)。然而,該系統(tǒng)的實(shí)現(xiàn)方案和計(jì)算效率還可以從以下幾方面進(jìn)行優(yōu)化:
(1)方法改進(jìn):目前,系統(tǒng)通過用戶繪制約束環(huán)的方法來標(biāo)記采樣算法的關(guān)鍵位置。未來我們考慮使用模型各點(diǎn)的SDF(形狀直徑函數(shù))提取模型的骨架,并結(jié)合區(qū)域分割的方法自動(dòng)獲取這些關(guān)鍵位置,以減少人工干預(yù)。
(2)系統(tǒng)擴(kuò)展:我們計(jì)劃添加織物仿真功能,以呈現(xiàn)帶有線圈細(xì)節(jié)的“紗線模型”,而不是簡(jiǎn)單的編織路徑,并計(jì)劃添加一個(gè)編輯工具,允許用戶編輯和修改“紗線模型”,如YUKSEL等人開發(fā)的工具。此外,系統(tǒng)目前只支持平針組織,為系統(tǒng)添加其他組織結(jié)構(gòu)與花型(如羅紋組織、集圈組織)的支持也在我們的計(jì)劃列表中。同時(shí),系統(tǒng)的代碼仍處于開發(fā)級(jí)別,采樣過程的計(jì)算時(shí)間還可以進(jìn)行顯著優(yōu)化。