最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Houdini學(xué)習(xí)筆記034_擴(kuò)散限制凝聚(DLA)

2022-09-22 14:23 作者:獨(dú)孤嘌呤  | 我要投稿

今天給大家?guī)淼氖墙?jīng)典的Diffusion-Limited Aggregation算法(簡(jiǎn)稱DLA),最終效果如下——

DLA算法是由T. A. Witten和L. M. Sander于1981年提出的,其基本思路是:

(1)選擇一個(gè)初始粒子作為種子,在遠(yuǎn)離種子的任意位置隨機(jī)生成一個(gè)粒子,并讓其做無規(guī)行走;

(2)直到運(yùn)動(dòng)的粒子和種子接觸后停止,成為聚集體的一部分;

(3)隨機(jī)生成新的粒子,重復(fù)上述過程。

最后就可以得到一個(gè)DLA團(tuán)簇。

具體在Houdini中實(shí)現(xiàn)時(shí),最終形狀會(huì)受到三個(gè)因素的影響,分別是:①種子的位置;②生成粒子的位置;③無規(guī)行走的算法。這里我采取的思路如下——

在一片區(qū)域內(nèi)散布點(diǎn)作為初始粒子(稱之為food),種子位于區(qū)域的中心(稱之為seed)。對(duì)于food,每走一步都會(huì)隨機(jī)產(chǎn)生新的行走方向,并判斷它和聚集體的最近距離。如果該距離小于某個(gè)臨界值,則自動(dòng)成為聚集體的一部分。直到所有food都成為聚集體的一部分為止。

為簡(jiǎn)便起見,我們從一個(gè)二維平面開始。

scatter節(jié)點(diǎn)散布點(diǎn)(如100個(gè)),group節(jié)點(diǎn)設(shè)定點(diǎn)組為food(Group Type選擇points)。

另外用add節(jié)點(diǎn)在原點(diǎn)位置處添加一個(gè)種子,將其點(diǎn)組設(shè)為seed。準(zhǔn)備工作就完成了。

兩組點(diǎn)merge后,用solver節(jié)點(diǎn)開始解算。

solver節(jié)點(diǎn)中創(chuàng)建point wrangle節(jié)點(diǎn),先自定義幾個(gè)參數(shù):

其中,steplength是粒子每步行走的距離,critical是判斷粒子是否成為聚集體一部分的臨界距離,randseed是產(chǎn)生隨機(jī)方向的種子(為避免與seed點(diǎn)組混淆,前面加rand以示區(qū)分)。

這個(gè)節(jié)點(diǎn)是用來讓food組內(nèi)的點(diǎn)隨機(jī)移動(dòng),并判斷和聚集體的距離的。所以Group可選擇food。先用rand函數(shù)生成一個(gè)隨機(jī)方向,之所以減去{0.5, 0.5, 0.5}是因?yàn)閞and產(chǎn)生的隨機(jī)數(shù)值范圍在0~1,減去0.5后范圍變成-0.5~0.5,粒子朝各個(gè)方向運(yùn)動(dòng)的隨機(jī)概率才一致。normalize函數(shù)用來將其歸一化。

這里讓randdir.y = 0,保證點(diǎn)只在xz平面上移動(dòng)。隨機(jī)移動(dòng)后,點(diǎn)的位置變?yōu)椋?/p>

回到solver節(jié)點(diǎn)播放后結(jié)果如下,粒子朝各個(gè)方向隨機(jī)擴(kuò)散。

為了防止粒子越跑越遠(yuǎn),可以添加如下條件,當(dāng)粒子超出grid的邊界框時(shí),會(huì)從另一邊重新進(jìn)入grid的范圍。相當(dāng)于grid相對(duì)的邊界是連通的,粒子永遠(yuǎn)也跑不出去。

這里用到了getbbox函數(shù),分別獲取每個(gè)方向上最大、最小邊界,以及各方向的尺寸。括號(hào)內(nèi)的1表示獲取的是1號(hào)輸入端的對(duì)象,這里需要將grid連接到solver節(jié)點(diǎn)的1號(hào)端口。然后將節(jié)點(diǎn)內(nèi)部的Input_1連接到point wrangle節(jié)點(diǎn)的1號(hào)端口。

下面的代碼是用來限定粒子的運(yùn)動(dòng)區(qū)域的,if語句后面只有一句時(shí),可以省略花括號(hào)。

然后需要判斷粒子到聚集體的最近距離,因?yàn)榫奂w是在不斷增加的,需要有一個(gè)屬性或變量來記錄聚集體中點(diǎn)的編號(hào)??梢栽谇懊婕右粋€(gè)attribute wrangle節(jié)點(diǎn),設(shè)置一個(gè)seeds[ ]數(shù)組。VEX代碼如下:

后面就可以用detail函數(shù)來調(diào)用該屬性:

先假設(shè)seeds[0]是距離粒子最近的點(diǎn),求出距離mindis作為最小距離。

然后對(duì)聚集體中所有點(diǎn)求與粒子的距離,找到最近的那一個(gè)。計(jì)算出真正的最小距離mindis。

最后,將mindis和臨界距離critical進(jìn)行比較,如果小于臨界距離,那么該粒子就成為聚集體的一部分。對(duì)應(yīng)的,將其點(diǎn)組從food轉(zhuǎn)移到seed,并且在該點(diǎn)與距離聚集體最近的點(diǎn)之間生成連線。

現(xiàn)在,我將自定義參數(shù)step length和critical distance的值均設(shè)為0.1,scatter節(jié)點(diǎn)散布的點(diǎn)數(shù)量改為2000,solver節(jié)點(diǎn)每次解算的步數(shù)Sub Steps設(shè)為20,運(yùn)行結(jié)果如下:

根據(jù)距初始種子(這里為原點(diǎn))的距離給每個(gè)點(diǎn)加一個(gè)col屬性:

再根據(jù)該屬性進(jìn)行著色:

拓展成三維的也很簡(jiǎn)單,大家可以自己嘗試~

以上我所用的方法是先生成全部粒子,然后讓其做隨機(jī)運(yùn)動(dòng)。也有逐步生成粒子的方法,以及其他額外的限制條件,以后我們有機(jī)會(huì)再講。今天的內(nèi)容到此為止,感謝大家的閱讀,下回見~

Houdini學(xué)習(xí)筆記034_擴(kuò)散限制凝聚(DLA)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
高淳县| 永康市| 长武县| 会东县| 如东县| 怀集县| 界首市| 保康县| 峨边| 阳朔县| 桂林市| 汤原县| 桦南县| 嘉鱼县| 措勤县| 故城县| 扎兰屯市| 济源市| 宜州市| 洛南县| 咸阳市| 河南省| 赞皇县| 阿拉善左旗| 三台县| 苏尼特右旗| 灵石县| 南投市| 盐山县| 鞍山市| 宣汉县| 湖口县| 云浮市| 屯昌县| 富平县| 武平县| 南城县| 尚志市| 富裕县| 顺平县| 凤阳县|