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

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

Houdini學(xué)習(xí)筆記027_VEX和梯度

2022-09-16 12:07 作者:獨孤嘌呤  | 我要投稿

今天我們來學(xué)習(xí)下梯度的用法。梯度屬于一個比較寬泛的概念,本質(zhì)上是數(shù)值按照某種趨勢變化的過程。比如高度梯度、顏色梯度、密度梯度等。這里我們用最簡單的高度梯度為例進(jìn)行講解。

VEX代碼如下——

首先,給grid對象添加mountain節(jié)點,調(diào)節(jié)HeightElement Size參數(shù)得到起伏。

Attribute Wrangle節(jié)點為其添加梯度屬性,VEX寫法很簡單:@grad = @P.y;

(可在Geometry Spreadsheet窗口中查看點屬性)

如果想在視圖中顯示,可用measure節(jié)點進(jìn)行查看。選擇measure節(jié)點,Measure方式選擇Gradient,Source Attribute輸入grad,在視圖中按【Enter】鍵查看。

下面我們這樣操作,對于平面上的每個點,找到其相鄰點并比較grad屬性大小(這里其實就是P.y)。找到grad最小的那個鄰點,并與之連線。如果周圍點的grad屬性都比中心點大,則不連線。使用的是Point Wrangle節(jié)點,首先用neighbours函數(shù)獲取相鄰點的編號,返回值用整型數(shù)組pts[ ]接收。

int pts[] = neighbours(0, @ptnum);

比較所有鄰點的grad屬性,找到最小值。這里可使用for循環(huán),寫法如下:

for(int i = 0; i < len(pts); i++){

}

比較大小需要有一個參照值,直接用當(dāng)前點的grad值作為初始最小值:

float mingrad = @grad;

鄰點的grad屬性值則可用point函數(shù)獲取:

float val = point(0, "grad", pts[i]);

如果鄰點的grad屬性小于當(dāng)前點,則取代當(dāng)前的最小grad值。使用的是if函數(shù),VEX代碼如下:

同時我們要獲得grad值最小點的編號,可以先定義

int num = @ptnum;

找到滿足條件的鄰點后,再用pts[i](鄰點編號)取代num的值:

num = pts[i];、


最后對當(dāng)前點和滿足條件的鄰點進(jìn)行連線,因為有些點本身就是局部最低點(grad值局部最?。瑳]有滿足條件的鄰點,所以不必進(jìn)行連線。如果有滿足條件的鄰點,那么num的值肯定和初始的@ptnum不同,因此可作為if語句的判斷條件:

if(num != @ptnum){

????addprim(0,"polyline",num,@ptnum);

}

最后移除原來的grid面,VEX代碼為:

removeprim(0,@primnum,1);

最終得到如下圖所示的結(jié)果——

后面的顏色添加可以用grad屬性來著色,Color Type選擇Ramp from Attribute即可。Range范圍即從grad的最小值到最大值。

你也可以將梯度設(shè)為其他的值,如

@grad =?@P.x + @P.y + @P.z;

結(jié)果如下所示——

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

Houdini學(xué)習(xí)筆記027_VEX和梯度的評論 (共 條)

分享到微博請遵守國家法律
尚义县| 榆社县| 天峻县| 大埔县| 红原县| 江北区| 武汉市| 嘉善县| 临汾市| 治多县| 句容市| 育儿| 修文县| 临高县| 峨眉山市| 新兴县| 常山县| 白沙| 蕉岭县| 达日县| 兴文县| 宜兴市| 剑川县| 平阳县| 米林县| 丰县| 巫山县| 晋中市| 彭州市| 商都县| 英德市| 迁西县| 武城县| 罗甸县| 涞源县| 龙门县| 万宁市| 驻马店市| 高密市| 米易县| 镇巴县|