朱峰社區(qū)首頁 朱峰社區(qū)

搜索資源 注冊|登陸

等待

返回 展開菜單

Houdini常用函數(shù)的介紹

MotionBuilder中文教程 觀看預(yù)覽

MotionBuilder中文教程

包含9節(jié)視頻教程
關(guān)注16.3萬

從零開始講解MotionBuilder的詳細(xì)教程,配合朱峰社區(qū)的模型詳細(xì)講解如何進(jìn)行運(yùn)動捕捉的動作裝配

關(guān)閉

1、取整函數(shù):

ceil()  floor() int() rint() trunc()  round()


ceil()取整函數(shù),將小數(shù)部分省略,取整數(shù)值大一的值。   eg:ceil(6.1)=7;
floor()取整函數(shù),將小數(shù)部分省略,只取整數(shù)部分。   eg:floor(6.1)=6 or floor(6.9)=6;
int()取整函數(shù),將小數(shù)部分省略,只取整數(shù)部分。   eg:int(6.5)=6;
trunc()取整函數(shù),將小數(shù)部分省略,只取整數(shù)部分。   eg:trunc(6.5)=6;
rint()取整函數(shù),遵循四舍五入的取值原則。 rint(6.5)=7 or rint(6.1)=6;
round()取整函數(shù),遵循四舍五入的取值原則。 round(6.5)=7 or round(6.1)=6;

取整函數(shù)大致分為這三種類型:  1)、ceil()將小數(shù)部分省略,取整數(shù)值大一的值。
2)、floor()、int()、trunc()取整函數(shù),將小數(shù)部分省略,只取整數(shù)部分。
 3)、rint()、round()取整函數(shù),遵循四舍五入的取值原則。

取整函數(shù)還有一種是sign()函數(shù)
    sign()函數(shù)是但參數(shù)變量為0時,取值為0,當(dāng)參數(shù)變量取值為負(fù)數(shù)時,則取值-1,當(dāng)參數(shù)
變量取值為正數(shù)時,則取值為1。她的取值空間就是-1,0,1。這個函數(shù)只能取三個狀態(tài)值。

2、wrap()周期函數(shù):

wrap()函數(shù):可以做一個周期效果,產(chǎn)生周期性的分布效果,與求余有一樣的效果。

   wrap()函數(shù)的基本使用:wrap(變量,周期最小取值,周期最大取值)
                               eg:wrap($F,0,20)
它的取值空間在1-20之間,當(dāng)變量值大于20時,進(jìn)入下一個周期,從1開始繼續(xù)取值。

注意下wrap()函數(shù)和clamp()函數(shù)的函數(shù)曲線。唯一的區(qū)別在于wrap()函數(shù)擁有周期性的特點(diǎn)。


3、fit()函數(shù),適配函數(shù):


   fit()函數(shù)擁有三種不同的適配方式

1)、fit01()函數(shù)

        fit01(變量,新的范圍最小值,新的范圍最大值)
案例說明下
    創(chuàng)建line節(jié)點(diǎn),為line添加屬性,這里創(chuàng)建一個attribcreate節(jié)點(diǎn),添加一個以aaa命名的點(diǎn)屬性,class:point(點(diǎn)屬 性),value這里使用$BBX作為屬性aaa的值,這也說明了屬性aaa只能在0-1之間任意取值,當(dāng)這里加入fit01()函數(shù) 時,fit01($BBX)這里的取值從0-1擴(kuò)大到0-10的取值,fit01()函數(shù)對原有的取值范圍進(jìn)行均勻的映射。
     只有在變量參數(shù)的取值范圍在0-1之間是才可以使用fit01()函數(shù)進(jìn)行映射取值。
fit01()函數(shù)針對的事原有變量是0-1的范圍才可以是fit01()這個函數(shù)進(jìn)行映射,按變量值在范圍值內(nèi)均勻取值。

2)、fit10(),fit01(),fit11()的映射取值的方式

fit10()函數(shù)的取值與fit01()函數(shù)的取值范圍正好相反。



fit11()函數(shù)是從-1-1的取值范圍進(jìn)行取值。


這些fit()函數(shù)相對比較麻煩。現(xiàn)在用fit()函數(shù)代替以上幾種fit()函數(shù)的形式

fit()函數(shù)的格式:fit(變量,原有的范圍最小值,原有的范圍最大值,新的范圍最小值,新的范圍最大值)

eg:
    fit($PT,$NPT-1,0,1)  這樣可以將取值規(guī)范化處理。
    fit($PT,$NPT-1,0,10)  這樣將取值的范圍擴(kuò)大了10倍。

4、distance()  Houdini所特有的內(nèi)置函數(shù),用于測量兩個點(diǎn)之間的距離。


    先說明下distance()函數(shù)的使用:
           先創(chuàng)建兩個點(diǎn)用于測量,我們用Add節(jié)點(diǎn),創(chuàng)建隨機(jī)的兩個點(diǎn),計算了下兩個點(diǎn)之間的距離值,將測量的距離值用font節(jié)點(diǎn)打印出來。
distance()函數(shù)的格式:

         distance(X1,Y1,Z1,X2,Y2,Z2)也就是寫入所需要測量的兩個點(diǎn)的XYZ空間坐標(biāo)。

我們這里通過前面的案例說明下distance()函數(shù)的使用:在font節(jié)點(diǎn)的text屬性中寫入distance(),將測量的距離結(jié)果打印出來。

表達(dá)式:

`distance(point("../add1",0,"P",0),point("../add1",0,"P",1),point("../add1",0,"P",2),point("../add1",1,"P",0),point("../add1",1,"P",1),point("../add1",1,"P",2))`


5、length()函數(shù)用于求線段的長度值或者向量的值。

 這里用一個案例說明下lenght()函數(shù)來求速度的大小。

      創(chuàng)建一條線段,給予線段一定點(diǎn)數(shù)量,方便做spring彈簧的解算效果。為通過spring解算過的線段添加屬性,創(chuàng)建一個attribcreate節(jié)點(diǎn),添加一個命名為speed的新屬性,
value:length($VX,$VY,$VZ)使用lenght()函數(shù)計算。
創(chuàng)建sphere小球,通過copy節(jié)點(diǎn),將小球拷貝到解算的線段上。在copy節(jié)點(diǎn)的Uniform scale的屬性上調(diào)用前面新添加的屬性:$SPEED/30 讓小球根據(jù)lenght()函數(shù)計算出來的結(jié)果,對小球進(jìn)行整體的縮放。

6、Normalize()函數(shù)的使用(標(biāo)準(zhǔn)化函數(shù))

    1、normalize()是一個標(biāo)準(zhǔn)化函數(shù),使向量的長度值為“1”,只為了對向量的長度做一個標(biāo)準(zhǔn)化的控制。它不對方向進(jìn)行控制,只是對長度保持一致,做規(guī)范化的處理,(向量由長度和方向構(gòu)成的,Normalize()函數(shù)只是對長度值做修改)。
    現(xiàn)在用案例說明下:


     這里利用polygon sphere發(fā)射粒子,通過為粒子添加法線,將速度方向顯示出來add normal :($VX,$VY,$VZ),添加一個新屬性對速度的做一個標(biāo)準(zhǔn)化的處理。創(chuàng)建一個attribcreate節(jié)點(diǎn),
name:(新屬性的名稱)normalvel ;type:(新屬性的數(shù)據(jù)類型)vector創(chuàng)建一個向量類型;
value:(變量的數(shù)值)vector3($VX,$VY,$VZ);這里將分量寫在vector3()的函數(shù)內(nèi),將三個分量合為一個向量,整體的表述出來。

    2、法線,速度都是三元向量,使用 vector3()函數(shù)一次性的將向量表述出來,現(xiàn)在在對速度進(jìn)行標(biāo)準(zhǔn)化處理。他表述的向量:normalize(vector3($VX,$VY,$VZ))

    而在value中寫入的是三個分量,那么如何將一個向量寫入分量中。這里在向量的后面加入[0]將分量提取出來,這樣就可以將向量以分量形式寫入value中了。
    value:
               normalize(vector3($VX,$VY,$VZ))[0]
               normalize(vector3($VX,$VY,$VZ))[1]
               normalize(vector3($VX,$VY,$VZ))[2]
    3、現(xiàn)在驗(yàn)證下速度的規(guī)范化處理,我們要的是要創(chuàng)建自定義向量屬性normalvel的分量形式,才可以寫入normal的三個框中。
    在attribcreate的節(jié)點(diǎn)下再次創(chuàng)建point節(jié)點(diǎn),添加法線屬性,add normal:($NORMALVELX,$NORMALVELY,$NORMALVELZ),在變量之后加入X,Y,Z進(jìn)行向量轉(zhuǎn)分量的輸入。

    4、在houdini中,對于粒子速度的調(diào)整,要在particle節(jié)點(diǎn)之前使用,現(xiàn)在在particle節(jié)點(diǎn)之后使用$NORMALVEL向量修改速 度,顯然是無法實(shí)現(xiàn)的,因?yàn)檫@是通過point節(jié)點(diǎn)對速度的修改,而不是通過節(jié)點(diǎn)解算得到的速度結(jié)果。在sop模塊下,對速度的修改要在解算之前,不對解 算后的速度節(jié)點(diǎn)進(jìn)行修改更新。

7、mindist()或者 pointdist()兩個函數(shù)等價。都是求點(diǎn)到面的距離。

    1、XYZdist()是空間點(diǎn)到面上的距離,這是與上面的兩種函數(shù)的區(qū)別;
pointdist()函數(shù)的基本格式:
   pointdist(“點(diǎn)所在節(jié)點(diǎn)的路徑”,點(diǎn)序號,“面所在節(jié)點(diǎn)的路徑”,面序號,通道號)

   pointdist()函數(shù)輸入的是點(diǎn)序號,算的是實(shí)際點(diǎn)到面上的距離值。這里的通道號,表示所求的屬性,“0”代表的是求的點(diǎn)到面上的距離值,“1”代表的是所求面上落點(diǎn)的u方向的坐標(biāo)值,“2”代表的是所求面上落點(diǎn)的v方向的坐標(biāo)值。


clarisse搭建3D天空之城拉普達(dá)全過程 clarisse搭建3D天空之城拉普達(dá)全過程

朱峰社區(qū)網(wǎng)頁版
朱峰社區(qū)網(wǎng)頁版(手機(jī)掃描-分享-添加到屏幕)


朱峰社區(qū)公眾號
朱峰社區(qū)微信公眾號(微信掃一掃-關(guān)注)

資源說明圖文教程無法下載,只能觀看圖片和文字。
版權(quán)規(guī)則本站圖文皆來自互聯(lián)網(wǎng)共享資源,如涉及到版權(quán)請查看版權(quán)規(guī)則。本平臺提供圖文僅可用于個人學(xué)習(xí),如用于商業(yè)請購買正版。您必須遵守的版權(quán)規(guī)則

未知用戶

未知用戶

2005-2025 朱峰社區(qū) 版權(quán)所有 遼ICP備2021001865號-1
2005-2025 ZhuFeng Community All Rights Reserved

VIP

朱峰社區(qū)微信公眾號

回頂部

1.復(fù)制文本發(fā)給您的QQ好友或群、微信等;好友點(diǎn)擊鏈接以后,轉(zhuǎn)發(fā)就成功了。 2.如朋友點(diǎn)擊您的鏈接,您需要需刷新一下才行;同一個好友僅能點(diǎn)擊一次。
購買VIP,觀看所有收費(fèi)教程!