包含9節(jié)視頻教程
關(guān)注16.3萬次
從零開始講解MotionBuilder的詳細(xì)教程,配合朱峰社區(qū)的模型詳細(xì)講解如何進(jìn)行運(yù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)。
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)值。
朱峰社區(qū)網(wǎng)頁版(手機(jī)掃描-分享-添加到屏幕)
朱峰社區(qū)微信公眾號(微信掃一掃-關(guān)注)
未知用戶
2005-2025 朱峰社區(qū) 版權(quán)所有 遼ICP備2021001865號-1
2005-2025 ZhuFeng Community All Rights Reserved
VIP