包含30節(jié)視頻教程
(本教程houdini技術(shù)已老請(qǐng)購(gòu)買(mǎi)之后houdini更新課程)Houdini是一款功能強(qiáng)大的3D合成軟件,曾經(jīng)效力于300部以上經(jīng)典電影的特效制作,比如煙火,水等復(fù)雜的后期合成都少不了它。
![]()
|
![]() 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ǔ)言有好幾種,就我目前了解到的有如下幾種:
![]()
![]() 由于作者目前水平所限,只能談一下自己對(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): ![]()
幾種變量類(lèi)型類(lèi)似于圖書(shū)館的管理員一樣,VEX中用到的變量也是分等級(jí)的;主要分為以下幾種:
屬性 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é)得下圖可以很好地解釋屬性的概念。 ![]() ![]() 認(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)行處理。 ![]() 關(guān)于Atrribute的操作比較繁雜,但總結(jié)起來(lái)大致就是增刪查改四種操作;
![]()
![]() 前面提到的是相同層級(jí)的屬性讀取,不同層級(jí)之間的屬性讀取則可以使用point(...), prim(...), detail(...)函數(shù)完成,具體用法我就寫(xiě)在下面了。 ![]()
![]() 然后在代碼編輯器中輸入 ![]() 但是如果寫(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"。 贊0 踩0 |
未知用戶(hù)
2005-2025 朱峰社區(qū) 版權(quán)所有 遼ICP備2021001865號(hào)-1
2005-2025 ZhuFeng Community All Rights Reserved
VIP