Houdini學(xué)習(xí)筆記023_VEX平面編織
今天分享一個(gè)簡(jiǎn)單平面編織結(jié)構(gòu)的VEX畫法。主要步驟是畫交錯(cuò)的折線。

直接上VEX腳本(Attribute Wrangle節(jié)點(diǎn)中,Run Over方式為Detail (only once))——

這里我定義了幾個(gè)變量:period是周期長度,height是高度,均為浮點(diǎn)型。

float period = chf('period_length');
float?height =?chf('height');
還有就是編織的行列數(shù),分別用rows和columns表示,類型為整型。
int?row?=?chi('rows');
int?column =?chi('columns');
ch是通道channel的意思,后面加的字母表示數(shù)據(jù)類型,如f-浮點(diǎn)型、i整型等。點(diǎn)擊右側(cè)箭頭所指的圖標(biāo)即可創(chuàng)建出參數(shù)通道。

首先,從一條波浪折線開始畫起,使用的是addpoint和addprim函數(shù)。前者只需要點(diǎn)坐標(biāo),后者還需要返回的點(diǎn)編號(hào)。這里可以用一個(gè)空數(shù)組來接收addpoint返回的編號(hào)。resize函數(shù)可以讓數(shù)組的長度和rows或columns一致。
int ptr [ ];
resize(ptr, row);
用for循環(huán)語句來循環(huán)創(chuàng)建點(diǎn),變量ptid用來接收addpoint函數(shù)的返回值,然后將其添加到ptr數(shù)組中。第i個(gè)點(diǎn)對(duì)應(yīng)的編號(hào)為i。set函數(shù)用于設(shè)置每個(gè)點(diǎn)的坐標(biāo),對(duì)于一條波浪折線而言,x方向上第i個(gè)點(diǎn)的坐標(biāo)為i*period/2,y方向上第i個(gè)點(diǎn)的坐標(biāo)為height*(1+pow(-1,i+1))/2。pow是冪函數(shù),-1的i+1次冪為-1或1,最終計(jì)算結(jié)果為0或height。

VEX表達(dá)式窗口不夠大時(shí),可按快捷鍵【Alt+E】彈出編輯窗口進(jìn)行書寫。如下圖所示。for循環(huán)之后用addprim函數(shù)創(chuàng)建線條,創(chuàng)建類型為'polyline'。確認(rèn)書寫無誤后點(diǎn)擊Apply按鈕。

現(xiàn)在調(diào)節(jié)參數(shù)就可以生成波浪折線了。

然后將上述過程進(jìn)行重復(fù),得到多組波浪線。使用for循環(huán)嵌套。寫法如下。set函數(shù)中的點(diǎn)坐標(biāo)為:
set(period*i/2.0, height*(1+pow(-1,i+1))/2.0, period*j/2.0);

現(xiàn)在有個(gè)小問題是,相鄰的波浪線起伏的位置應(yīng)該是互相交錯(cuò)的。解決的辦法也很簡(jiǎn)單,將pow函數(shù)中的i+1改為i+j即可。

另一個(gè)方向的線條也是同樣的生成方法。只需要將坐標(biāo)調(diào)換即可。還有就是要定義一個(gè)新的數(shù)組,長度為column。其余均不變。

為了讓縱橫兩組波浪線交錯(cuò)編織,pow函數(shù)中的冪次可由i+j變?yōu)閕+j+1。

后面的步驟就比較簡(jiǎn)單了,先用resample節(jié)點(diǎn)重新采樣,再用smooth節(jié)點(diǎn)平滑。

然后用sweep節(jié)點(diǎn)掃描得到截面,截面可以用circle節(jié)點(diǎn)創(chuàng)建(polygon類型)。掃描的End Cap Type選擇Grid。如果法線不對(duì),可以用reverse節(jié)點(diǎn)翻轉(zhuǎn)。

最后,如果不想要最邊緣的4根波浪線,可以在循環(huán)時(shí)從1循環(huán)到row-1或column-1。


就寫到這里吧,感謝閱讀,下回再見~