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

搜索資源 注冊(cè)|登陸

等待

返回 展開(kāi)菜單
按功能 按軟件

Houdini基礎(chǔ)

Houdini基礎(chǔ)

包含30節(jié)視頻教程

(本教程houdini技術(shù)已老請(qǐng)購(gòu)買(mǎi)之后houdini更新課程)Houdini是一款功能強(qiáng)大的3D合成軟件,曾經(jīng)效力于300部以上經(jīng)典電影的特效制作,比如煙火,水等復(fù)雜的后期合成都少不了它。

關(guān)閉

Houdini ch的作用

關(guān)注:2115 留言:0 樓主:﹎ネ斤ネ壽 發(fā)帖時(shí)間:21年7月23日

﹎ネ斤ネ壽

普通會(huì)員

﹎ネ斤ネ壽

社區(qū)兄弟:4級(jí)

關(guān)注2842人

  • 性別

  • 年齡

    22

  • 積分

    109

  • 登陸

    1

  • 發(fā)帖

    2

  • 作品

    1

間隔線

chi,chs,chv,chf,chramp
引言

暑假到了,因?yàn)樽约哼M(jìn)的實(shí)驗(yàn)室主要做的DGP(Digital Geometry Processing,數(shù)字幾何處理),借鑒自己之前通過(guò)Substance Designer入門(mén)圖像處理領(lǐng)域,通過(guò)Unity入門(mén)圖形學(xué)渲染領(lǐng)域的經(jīng)驗(yàn),打算學(xué)一下自己垂涎已久的Houdini來(lái)入門(mén)幾何處理。

順便一提,本文中所使用的Houdini版本為Houdini Apprentice 17.5.293。跟的教程是有名的湖邊小屋,手頭有余裕的朋友們可以到gumroad上面購(gòu)買(mǎi)支持一下這位藝術(shù)家。

建議有意向閱讀此文的讀者選個(gè)有空的時(shí)候,坐在電腦前再來(lái)閱讀本文。原因其一,排版是按PC來(lái)排的,手機(jī)上不好閱讀;其二,內(nèi)容比較硬核,干貨比較多,需要坐下來(lái)慢慢讀。

腳本語(yǔ)言

與SD一樣,Houdini也是基于節(jié)點(diǎn)編程;比SD更強(qiáng)大的地方在于它也支持腳本編程(SD的腳本編程目前還處于非常原始的階段),并且腳本編程的威力非常強(qiáng)大。Houdini所使用的腳本語(yǔ)言有好幾種,就我目前了解到的有如下幾種:

  • 參數(shù)腳本語(yǔ)言(表達(dá)式):
    • HScript Expression 傳統(tǒng)的默認(rèn)腳本語(yǔ)言,主要用來(lái)做控制參數(shù)的腳本;
    • Python HOM 新的腳本語(yǔ)言,比Hscript更強(qiáng)大,但是寫(xiě)起來(lái)很啰嗦;
如圖,用戶(hù)可以在2種不同參數(shù)表達(dá)式之間切換,并且可以同時(shí)混合使用它們。
  • 泛用型腳本語(yǔ)言:
    • Vex 高性能的C譜系腳本語(yǔ)言,用來(lái)寫(xiě)自定義的節(jié)點(diǎn)或者Shader。
    • Python HOM 似乎是全能的編程語(yǔ)言,比較復(fù)雜所以還有待進(jìn)一步探索。
VEX 語(yǔ)言

由于作者目前水平所限,只能談一下自己對(duì)VEX和SOP一些粗淺的了解,有不準(zhǔn)確或錯(cuò)誤之處望讀者指正。

幾何對(duì)象的層次

Houdini中,SOP處理的是幾何對(duì)象(Object)。幾何對(duì)象的數(shù)據(jù)在SOP節(jié)點(diǎn)中得到處理,并在SOP網(wǎng)絡(luò)中流動(dòng)。那么問(wèn)題來(lái)了,應(yīng)該如何處理這些繁雜的數(shù)據(jù)?Houdini將幾何對(duì)象(Object)中的幾何數(shù)據(jù)進(jìn)行了分層。理解這一部分是至關(guān)重要的。

即使讀者沒(méi)有系統(tǒng)的圖形學(xué)背景,也應(yīng)當(dāng)能理解幾何體的組成部分可以拆分為點(diǎn)-線-面;而Houdini中的分類(lèi)要更復(fù)雜一點(diǎn):

如圖,幾何數(shù)據(jù)分為四層
  1. Detail 最高層級(jí)的數(shù)據(jù),對(duì)應(yīng)整個(gè)Object;
  2. Primitive 幾何對(duì)象中的組成部件,比如一個(gè)三角面片,一張NURBS曲面,或Volume;
  3. Point 幾何對(duì)象上面的一個(gè)點(diǎn);
  4. Vertex 一個(gè)Point可能同時(shí)存在于多個(gè)相鄰的Primitive上,因此共享同一個(gè)Point的 多個(gè)primitive會(huì)各自存一份對(duì)Point的引用,稱(chēng)為Vertex。
幾種變量類(lèi)型

類(lèi)似于圖書(shū)館的管理員一樣,VEX中用到的變量也是分等級(jí)的;主要分為以下幾種:

  • Attribute 屬性
  • Parameter 參數(shù)
  • variable 變量
屬性 Geometry Attribute

最重要的數(shù)據(jù)類(lèi)型就數(shù)屬性了,首先,前文提到的每個(gè)幾何層級(jí)都會(huì)把屬于該層的所有對(duì)象組織成一張表,比如primitive層的會(huì)組織到一張primitive表,point層的所有點(diǎn)會(huì)組織成一張點(diǎn)列表;

隨后,每個(gè)層級(jí)我們都可以為所有屬于該層的對(duì)象們定義一些屬性,比如對(duì)于Point層,可以為每個(gè)點(diǎn)定義位置或者法線屬性;我覺(jué)得下圖可以很好地解釋屬性的概念。

如圖,1033到1044號(hào)對(duì)象的屬性都各自裝在自己的小匣子里面如圖 左邊Geometry Spreadsheet顯示了每個(gè)點(diǎn)的位置信息

認(rèn)真讀的讀者肯定會(huì)意識(shí)到,那么vex代碼應(yīng)該用在哪種節(jié)點(diǎn)里面,來(lái)幫助我們?yōu)樗悬c(diǎn)定義或者修改屬性呢?Houdini有一組非常強(qiáng)大的節(jié)點(diǎn),專(zhuān)門(mén)用來(lái)做這類(lèi)事情;我這里介紹其中用的最多,最有代表性的Attribute Wrangle節(jié)點(diǎn)。""Wrangle"一詞的翻譯是"放牧",就像牛仔管理他們負(fù)責(zé)的牛群一樣,我們對(duì)各個(gè)點(diǎn)或者其它對(duì)象的屬性進(jìn)行“放牧”。換句話說(shuō),該節(jié)點(diǎn)對(duì)輸入數(shù)據(jù)中每一層級(jí)(就是上一小節(jié)講到的層級(jí)概念)的所有屬性進(jìn)行處理。

“wrangle”一詞非常形象,原意為放養(yǎng)牛馬等牲畜,因此有個(gè)牛仔帽作為標(biāo)志

關(guān)于Atrribute的操作比較繁雜,但總結(jié)起來(lái)大致就是增刪查改四種操作;

  • 刪除屬性
    找了很久,VEX中好像沒(méi)有刪除屬性的函數(shù),不過(guò)有一個(gè)節(jié)點(diǎn)可以用來(lái)做這件事:Attribute Delete
  • 讀取/修改屬性
    使用已經(jīng)定義的同層級(jí)屬性的方式為:@變量名。比較特殊的情況下,Attribute Wrangle節(jié)點(diǎn)可能有多個(gè)輸入(從左到右,序號(hào)為0~3,沒(méi)有編程經(jīng)驗(yàn)的同學(xué)注意,從0開(kāi)始!),比如我想要用第二個(gè)輸入數(shù)據(jù)的點(diǎn)層級(jí)位置屬性@P,那么以下3種方式都能獲取到數(shù)據(jù)。 值得注意的有2點(diǎn)。
    第一,SideFX官方的講座中提到,在性能上來(lái)說(shuō),使用方法(3)是最好的,應(yīng)當(dāng)盡可能使用它;但(3)也是有局限的,如圖:
如圖,Attribute Wrangle節(jié)點(diǎn)接受2個(gè)輸入


第二,如果你使用的屬性是非浮點(diǎn)數(shù)類(lèi)型的,比如vector型的向量,第二種方式必須記得在@之前寫(xiě)上屬性數(shù)據(jù)類(lèi)型的簡(jiǎn)寫(xiě),否則編譯器會(huì)默認(rèn)為浮點(diǎn)數(shù)。具體各種變量類(lèi)型和簡(jiǎn)寫(xiě)的對(duì)應(yīng)見(jiàn)下圖:

前面提到的是相同層級(jí)的屬性讀取,不同層級(jí)之間的屬性讀取則可以使用point(...), prim(...), detail(...)函數(shù)完成,具體用法我就寫(xiě)在下面了。

  • 增加屬性 在VEX中定義屬性的方式為:數(shù)據(jù)類(lèi)型 @變量名;舉個(gè)例子,我想給所有點(diǎn)定義一個(gè)叫做myval的浮點(diǎn)數(shù)屬性,然后對(duì)這個(gè)屬性加一,那么就在Attribute Wrangle中選定要處理的層次為點(diǎn),

然后在代碼編輯器中輸入  即可。值得注意的一點(diǎn),在定義一個(gè)
新的屬性時(shí),等號(hào)右邊(即我們賦予該屬性的初始值)必須是常量,也就是說(shuō)只能是具體的數(shù)值, 不能包含任何函數(shù)或運(yùn)算。例如下面一段代碼是有效的:

但是如果寫(xiě)成這樣就會(huì)報(bào)錯(cuò):

屬性在整個(gè)節(jié)點(diǎn)網(wǎng)絡(luò)中,一旦你創(chuàng)建了,在人為手動(dòng)刪除它之前,就是一直存在并且全局都可見(jiàn)的(就是任何時(shí)候,只有你想要就可以讀取)。因此屬性是非常消耗空間和性能的,應(yīng)當(dāng)盡可能節(jié)約使用,如果預(yù)計(jì)將來(lái)再也不需要這個(gè)屬性時(shí),就應(yīng)當(dāng)使用Attribute Delete刪除掉。

變量 Variable

那么,一些VEX代碼中的變量,如果它們只會(huì)在該節(jié)點(diǎn)的代碼里面用到,那么就沒(méi)有必要設(shè)置為屬性了,我們稱(chēng)之為局部變量,就是它只屬于所在的這個(gè)節(jié)點(diǎn),節(jié)點(diǎn)算完之后就把它所占用的空間釋放了,生不帶來(lái),死不帶去。

局部變量的定義很簡(jiǎn)單,和一般的C語(yǔ)言定義方式一致。這里就不再累述。值得注意的是,當(dāng)你想要用包含變量的一組值來(lái)定義一個(gè)局部變量時(shí),應(yīng)當(dāng)使用函數(shù)set(...),比如下面這段代碼

編譯器會(huì)報(bào)錯(cuò):“Syntax error, unexpected identifier, expecting '}'.”初學(xué)者肯定會(huì)丈二和尚摸不著頭腦,錯(cuò)在哪了呢?原因就在于賦值的式子里包含了變量@y,而{ a, b, c }僅當(dāng)a,b,c為常量(具體的數(shù)字)時(shí)才有效,我們這里應(yīng)當(dāng)使用函數(shù)set:

參數(shù) Parameter

除了前面提到的2種數(shù)據(jù)類(lèi)型之外,還有一個(gè)非常重要的,就是paramteter(參數(shù)),參數(shù)一般出現(xiàn)在節(jié)點(diǎn)的paramter窗口,我們可以通過(guò)參數(shù)這些對(duì)節(jié)點(diǎn)進(jìn)行調(diào)整。官方網(wǎng)站上比較有用的文檔:創(chuàng)建參數(shù)右擊你要粘貼到的那個(gè)參數(shù),選擇"Paste relative reference"。

同一節(jié)點(diǎn)內(nèi),同一節(jié)點(diǎn)網(wǎng)絡(luò)內(nèi)不同節(jié)點(diǎn),不同節(jié)點(diǎn)網(wǎng)絡(luò)
  • 在窗口上,手動(dòng)創(chuàng)建參數(shù);
    流程見(jiàn)下圖,注意在"Parameter Description"一欄,我們新創(chuàng)建的變量有2個(gè)名稱(chēng):Name和Label,Name是參數(shù)“真正”的名字,我們?cè)谑褂胏h("參數(shù)名")或者VEX內(nèi)引用該參數(shù)時(shí),都用的是Name,注意,Name不能包含空格;
    但是Label可以包含空格,作為參數(shù)在用戶(hù)界面上顯示的名稱(chēng)。
  • 在Wrangle節(jié)點(diǎn)里,用VEX代碼創(chuàng)建窗口上的參數(shù);
    使用chi, chf, chv, chs函數(shù)在VEX中定義,隨后在界面上點(diǎn)擊一個(gè)按鈕即可,如圖;蛘哌可以用chramp來(lái)定義一個(gè)ramp,非常方便。
  • 在Wrangle節(jié)點(diǎn)里,用VEX代碼讀取窗口上的參數(shù);
    同上,使用chi, chf, chv, chs即可。
  • 在窗口上,讀取VEX代碼創(chuàng)建的屬性作為參數(shù)使用;
    這個(gè)話題比較復(fù)雜,因?yàn)槭遣荒苤苯佑聾屬性名的,現(xiàn)在我還不是很確定,所以以后再來(lái)補(bǔ)上吧。。。

贊0 踩0

未知用戶(hù)

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

VIP

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

回頂部

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