Houdini學(xué)習(xí)筆記042_樹枝狀polymer

今天的學(xué)習(xí)內(nèi)容如下,這是一個(gè)樹枝狀高分子的平面化表達(dá)示意圖。整體形狀呈現(xiàn)為圓形,由內(nèi)到外逐級(jí)分叉。

動(dòng)手之前我們先思考:需要設(shè)置哪些可調(diào)節(jié)參數(shù)?比較直觀的有圖形的層數(shù)(也稱為分子的代數(shù)generation),每一層的寬度d,最內(nèi)層的分叉數(shù)n。

然后每次分叉可以設(shè)定一個(gè)角度θ(theta),隨著代數(shù)的增加,這個(gè)θ角會(huì)越來(lái)越小,所以還需要設(shè)置一個(gè)角度的衰減系數(shù)α(alpha)。

這里我先創(chuàng)建了一個(gè)null節(jié)點(diǎn),自定義如下參數(shù)(主要是前面5個(gè))——

最內(nèi)層(g=0)可以用一個(gè)Attribute Wrangle節(jié)點(diǎn)搞定,Run Over設(shè)為Detail (only once)。

VEX代碼如下:
所用函數(shù)之前的筆記中都講過,不再贅述。這里最內(nèi)層分叉數(shù)n默認(rèn)設(shè)置為3。
接下來(lái)逐層分叉使用一個(gè)For-Loop with Feedback節(jié)點(diǎn)來(lái)循環(huán)繪制。對(duì)于“active”組內(nèi)的點(diǎn),獲取其坐標(biāo),并據(jù)此得到下一步分叉后新的點(diǎn)坐標(biāo),并與之連線。然后重新設(shè)置“active”組。

繪制分叉可以用Point Wrangle實(shí)現(xiàn),由于需要用到循環(huán)迭代次數(shù)(iteration),選擇Block Begin節(jié)點(diǎn),點(diǎn)擊Create Meta Import Node,為其創(chuàng)建Detail屬性。然后連接到Point Wrangle節(jié)點(diǎn)的1號(hào)端口。

先用如下代碼獲取各參數(shù)值,theta定義的是角度,需要轉(zhuǎn)為弧度值。迭代次數(shù)用detail函數(shù)獲取。注意各個(gè)參數(shù)的數(shù)據(jù)類型。
求分叉點(diǎn)坐標(biāo)我采用的是旋轉(zhuǎn)法,因?yàn)?span id="s0sssss00s" class="color-pink-03">rotate函數(shù)是繞著原點(diǎn)旋轉(zhuǎn),所以先將旋轉(zhuǎn)軸心(P)平移到原點(diǎn)(O),旋轉(zhuǎn)θ角度后再平移回去,得到點(diǎn)P1(或P2)。

這次Run Over是對(duì)“active”內(nèi)的點(diǎn)進(jìn)行的,所以選擇Point。Group選擇active。A點(diǎn)的坐標(biāo)可以按如下方式計(jì)算得到:
ident函數(shù)可以設(shè)置初始化矩陣,角度theta跟迭代次數(shù)有關(guān),每迭代一次,就乘以系數(shù)alpha。rotate函數(shù)對(duì)矩陣進(jìn)行旋轉(zhuǎn),獲得旋轉(zhuǎn)矩陣。4表示繞Z軸旋轉(zhuǎn),也可以用{0,0,1}。
接下來(lái)就是創(chuàng)建新的點(diǎn),然后連線。
將新建的分叉點(diǎn)添加到“active”組內(nèi),原來(lái)的點(diǎn)移出。連線的primitive屬性可以設(shè)置為代數(shù)generation,具體數(shù)值為iter+1。
根據(jù)primitive屬性可以計(jì)算一個(gè)從0到1的浮點(diǎn)屬性,命名為@ratio。根據(jù)該屬性進(jìn)行著色。


后面怎么設(shè)置粗細(xì)變化這里就不講了,感興趣自己研究。值得一提的是,如果要根據(jù)generation數(shù)進(jìn)行分段著色,直接用polywire節(jié)點(diǎn)顯示不出來(lái),需要先將primitive屬性轉(zhuǎn)為point屬性,之后再將point屬性轉(zhuǎn)回primitive屬性。屬性的轉(zhuǎn)移用的是Attribute Promote節(jié)點(diǎn)。





今日分享到此為止,感謝各位閱讀,下回再見~