国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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和梯度的評論 (共 條)

分享到微博請遵守國家法律
新田县| 承德县| 政和县| 冀州市| 马龙县| 永春县| 吴桥县| 读书| 山丹县| 滨海县| 涞水县| 中牟县| 阿巴嘎旗| 祁东县| 唐海县| 长乐市| 彭水| 衡水市| 奉贤区| 丰城市| 前郭尔| 苗栗县| 池州市| 铜陵市| 仪陇县| 汉源县| 兴隆县| 涟源市| 临桂县| 德兴市| 兴仁县| 陆川县| 和硕县| 仪陇县| 许昌市| 东海县| 九江市| 肇庆市| 濮阳县| 鄂伦春自治旗| 宣武区|