發表日(rì)期:5/19/2018 5:09:45 PM 浏覽次數:7509
很(hěn)多初學者會被houdini中各種變量的(de)寫法搞得暈頭轉向,特别是houdini15之後對(duì)vex的(de)大量使用,很(hěn)多看(kàn)老(lǎo)教材的(de)同學發現(xiàn)局部變量不起作(zuò)用了,被弄得無所适從(cóng)。
這(zhè)裏,小(xiǎo)編就盡所能給大家(jiā)解釋一下(xià),其實這(zhè)裏是兩套系統完成同樣的(de)功能而已。
本文(wén)會部分會收錄在即将出版的(de)houdini書(shū)本中,敬請期待
1attribute create不起作(zuò)用了?
這(zhè)個(gè)是最常見的(de)舊(jiù)版本教程裏的(de)問(wèn)題。添加attribute create節點,創建自(zì)定義屬性var,使用$VAR就可以進行局部變量訪問(wèn),但(dàn)是在houdini15之後就不可以了。
這(zhè)裏最核心的(de)問(wèn)題在于舊(jiù)版本的(de)houdini默認是勾選 local variable把創建的(de)屬性轉化(huà)為(wèi)局部變量,而新版本默認是關閉的(de)。
注意
默認開(kāi)啓後,不輸入任何值,那(nà)麽局部變量就是變量的(de)大寫形式 var→$VAR。當然,你(nǐ)也可以手動輸入你(nǐ)需要的(de)局部變量名字(一般不會這(zhè)樣操作(zuò))。
轉化(huà)為(wèi)局部變量後我們在spreads中查看(kàn)
沒有(yǒu)開(kāi)啓local variable的(de)情況下(xià):隻有(yǒu)在對(duì)應層級多了var這(zhè)個(gè)屬性
開(kāi)啓了local variable的(de)情況下(xià):在detail層級還(hái)會多了一個(gè)把var轉化(huà)為(wèi)局部變量VAR的(de)過程
所以,如果大家(jiā)想按照(zhào)舊(jiù)版教程使用attribute create創建局部變量,那(nà)麽記得勾選這(zhè)個(gè)選項就行了。
2局部變量/全局變量的(de)寫法
一般是$符号+大寫字母,但(dàn)是也有(yǒu)不少特殊的(de)寫法
比如位置 $TX,$TY,$TZ,還(hái)有(yǒu)顔色是$CR,$CB,$CG,這(zhè)些特殊的(de)寫法就需要死記硬背了
除了上(shàng)面常用的(de)局部變量和(hé)全局變量外(wài)(從(cóng)幀開(kāi)始,因為(wèi)這(zhè)些變量不需要任何的(de)局部節點和(hé)屬性都(dōu)可以存在的(de),所以稱為(wèi)全局變量)
還(hái)有(yǒu)比較常用的(de)對(duì)于copy節點中的(de)局部變量
$CY 表示當前拷貝的(de)順序(第幾份)
$NCY 表示拷貝的(de)總數量
3vex變量的(de)寫法
@+變量名字(大部分不需要大寫)
當然,vex中也有(yǒu)部分比較特殊的(de)寫法(比如@Frame需要開(kāi)頭大寫,@P需要縮略大寫)
對(duì)于特殊vex變量的(de)記憶
直接創建vop(pointvop,attribute vop等都(dōu)一樣)進入內(nèi)部,找到geometryvop global節點,裏面就是常用vex變量寫法
也可以通(tōng)過添加houdini16中的(de)point_old節點,都(dōu)使用使用了vex變量(舊(jiù)版本point中使用$TX,$TY,$TZ)
4為(wèi)什麽是vex取代局部變量
1更加直接和(hé)簡潔,比如上(shàng)面定義的(de)var,不需要通(tōng)過轉化(huà)為(wèi)$VAR,可以直接使用@var進行調用
2vex電(diàn)腦運行效率更高(gāo)(速度更快)
3vex更加統一,比如之前的(de)位置 @P顔色是@Cd,如果要訪問(wèn)裏面的(de)分量通(tōng)道(dào),使用點格式,比如@P.x,@Cd.r(@Cd.x也是可以的(de))。并且vex除了在sop和(hé)shader中廣泛使用,在dop中的(de)粒子(zǐ)也是非常常用的(de),可以貫穿整個(gè)houdini,實現(xiàn)統一。
4vex除了調用變量,更多的(de)是一些表達式和(hé)函數的(de)調用,使用wrangle節點可以完成絕大部分節點的(de)功能。創建變量非常方便
在houdini中,越來(lái)越多的(de)節點除了局部變量外(wài)也支持vex變量(除了一些比較舊(jiù)的(de)節點)并且有(yǒu)很(hěn)多新的(de)節點隻支持vex變量,所以這(zhè)小(xiǎo)編建議(yì)大家(jiā)盡量使用vex變量(即使看(kàn)到舊(jiù)教材中做法,試着使用vex變量來(lái)實現(xiàn))
5是不是局部變量/全局變量就沒用了?
這(zhè)倒不是,特别是全局變量還(hái)是非常有(yǒu)用的(de)
比如$T,$FF,$HIP,$OS等代表時(shí)間(jiān),工(gōng)程文(wén)件(jiàn)路(lù)徑,節點名字,在控制紊亂變化(huà),輸出路(lù)徑中等都(dōu)非常有(yǒu)用。
某些節點的(de)局部變量比如copy中的(de)$CY和(hé)$NCY也是比較常用。
6如何創建屬性
創建屬性的(de)方法有(yǒu)非常多,這(zhè)裏主要講解最常用的(de)attributecreate和(hé)wrangle節點
attributecreate 注意四個(gè)部分
1name 名字
2class 層級
3type 數據類型
4賦值
當然,這(zhè)裏還(hái)有(yǒu)是否需要轉化(huà)為(wèi)局部變量和(hé)size就是裏面的(de)元素多少需要注意
對(duì)于wrangle中創建屬性同樣需要上(shàng)面的(de)幾個(gè)元素
run over 代表選擇層級,f表示浮點類型,@rot變量名字是rot,賦值是1.0,還(hái)有(yǒu)分号結尾
常用的(de)vex的(de)數據類型有(yǒu)
i整形
f浮點
s字符
v矢量
marix 矩陣
......
7如何把變量轉化(huà)為(wèi)局部變量/全局變量
創建全局變量
除了默認已有(yǒu)的(de)全局變量,我們可以通(tōng)過Edit/ aliases and variable 别名和(hé)變量中進行設定
在這(zhè)裏添加了一個(gè)$MYNAME局部字符變量,用來(lái)存儲我的(de)名字carldrifter
大家(jiā)還(hái)可以存儲自(zì)己常用的(de)工(gōng)程文(wén)件(jiàn)路(lù)徑或者數值等。
把已有(yǒu)的(de)屬性轉化(huà)局部變量方法
方法一 attribute create的(de)方法,勾選local vairable進行轉化(huà),注意輸入同樣的(de)名字,激活local variable,并且關閉write value 創建值(否者會覆原來(lái)的(de)值)
方法二 wrangle中轉化(huà)局部變量的(de)方法
使用函數addvariablename(輸入端口,原來(lái)名字,後來(lái)名字)
方法三 在vop中轉化(huà)成局部變量的(de)方法 add attribute節點
舊(jiù)版教程中使用add attribute節點進行輸出輸出自(zì)定義屬性,現(xiàn)在使用的(de)是bind export節點,而add attribute節點僅保留轉化(huà)為(wèi)局部變量的(de)功能。