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

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

Houdini學(xué)習(xí)筆記040_Reaction Diffusion Pattern(反應(yīng)擴散圖案)

2022-10-12 18:41 作者:獨孤嘌呤  | 我要投稿

背景知識參考:

http://www.karlsims.com/rd.html

https://www.lanevol.org/resources/gray-scott

今天我們要學(xué)習(xí)的是反應(yīng)擴散圖案的制作,關(guān)于該圖案的背景知識可參考上面兩個網(wǎng)站。下面列舉了幾個不同參數(shù)下得到的結(jié)果——

Reaction Diffusion Patterns

關(guān)于這個圖案的程序生成思路可以參考油管上的Coding Challenges系列視頻,只不過視頻里用的是Java,我用的是Houdini VEX而已。

其實過程的描述很簡單,如下圖所示:體系中有兩種物質(zhì)A和B,擴散速度分別為dA和dB。兩個B可以將一個A轉(zhuǎn)化為B,同時物質(zhì)A以速率“feed”加入,物質(zhì)B以速率“kill”消失。最終顯示的是物質(zhì)A在體系中的分布。

www.karlsims.com/rd.html

A和B的濃度范圍為0~1。為了簡便起見,最后的可視化可以選擇在一個平面中呈現(xiàn)。用不同的顏色來表示物質(zhì)的濃度。初始創(chuàng)建一個grid節(jié)點(Size:1×1;Rows/Columns:250),給每個point設(shè)置屬性A和屬性B,A的初始值設(shè)為1,B的初始值設(shè)為0。

添加Point Wrangle節(jié)點,VEX代碼如下:

下一步是往體系中隨機添加一些B物質(zhì),使用的是Attribute Wrangle節(jié)點,Run Over設(shè)置為Detail (only once)。

VEX代碼如下:

利用隨機數(shù)生成點,用nearpoints函數(shù)搜索一定距離(maxdist)范圍內(nèi)的點,根據(jù)距離設(shè)置屬性B的值。對于每個生成的隨機點,距離為0的點B值設(shè)為1,距離為maxdist的點B值設(shè)為0。若按照屬性B的值添加顏色顯示,可得到如下所示的斑點圖案,從斑點中心到邊緣,B值從1漸變到0。

初始設(shè)置完成后,接下來就是反應(yīng)擴散的過程了。創(chuàng)建solver節(jié)點,里面還是用point wrangle節(jié)點來實現(xiàn)每一步屬性A和B值的變化。變化按照下面的公式進行,A和B是當前的值,dA、dB、f、k以及δt都是自定義的參數(shù)。唯一稍難理解的是倒三角符號,這是一個Laplace算符,用來表示濃度梯度的變化。

其實,這里的Laplace算符計算方式很簡單。在grid平面中,除了邊緣的點,每個點都會被另外8個點包圍。這些點都有屬性A和B。計算新的屬性值時,只要將周圍點對應(yīng)的屬性值乘上某個系數(shù),然后相加即可。相鄰的點乘以系數(shù)0.2,對角的點乘以0.05,自身乘以-1。

這里我們有兩個屬性值要計算,可以自定義一個laplace函數(shù),最后返回A和B兩個值。先設(shè)置幾個基本參數(shù)如下:

laplace函數(shù)返回的數(shù)據(jù)類型為vector2,步驟說明如下:

由點編號可知,對于npt號點,左右分別是npt-1npt+1,上下分別是npt-250npt+250(250是這里的網(wǎng)格細分數(shù),為方便起見,這里我用的是固定數(shù)值,如果要設(shè)為可調(diào)節(jié)的值,這里的代碼也應(yīng)相應(yīng)做出調(diào)整)。還有四個點的編號分別為npt-251,npt-249,npt+249,npt+251。

顯而易見的是,邊緣的點不滿足上述關(guān)系。為了不麻煩,我們只對非邊緣的點執(zhí)行l(wèi)aplace函數(shù)計算。

先寫出laplace函數(shù):

在解算之前添加Group節(jié)點,將邊緣的點加到“boundary”組中。

inpointgroup函數(shù)判斷,只對不在組內(nèi)的點進行l(wèi)aplace變換計算。公式如下:

最后添加color節(jié)點,用屬性A作為著色依據(jù)。

最后增加solver節(jié)點的Sub Steps,播放就可以看到反應(yīng)擴散圖案的變化,如下圖所示——

dA = 1.0; dB =0.45; f = 0.03; k = 0.062; dt = 1.0;

改變參數(shù)就可以得到不同的擴散圖案,具體可以參考本片開頭給出的網(wǎng)址。

今天的分享到此結(jié)束,感謝各位的閱讀,下回見~

Houdini學(xué)習(xí)筆記040_Reaction Diffusion Pattern(反應(yīng)擴散圖案)的評論 (共 條)

分享到微博請遵守國家法律
苍梧县| 衡阳县| 阜康市| 汤阴县| 苏尼特右旗| 华蓥市| 敖汉旗| 翁牛特旗| 高平市| 和政县| 嵊泗县| 枣庄市| 松阳县| 淮安市| 娄底市| 宣威市| 祁东县| 太康县| 上栗县| 长春市| 高清| 盈江县| 明溪县| 关岭| 嘉禾县| 普陀区| 临邑县| 汽车| 江阴市| 巴马| 北安市| 河北省| 景宁| 正阳县| 绥棱县| 富平县| 资中县| 股票| 达孜县| 平邑县| 四子王旗|