包含30節(jié)視頻教程
(本教程houdini技術(shù)已老請購買之后houdini更新課程)Houdini是一款功能強大的3D合成軟件,曾經(jīng)效力于300部以上經(jīng)典電影的特效制作,比如煙火,水等復(fù)雜的后期合成都少不了它。
![]()
|
![]() chi,chs,chv,chf,chramp引言暑假到了,因為自己進的實驗室主要做的DGP(Digital Geometry Processing,數(shù)字幾何處理),借鑒自己之前通過Substance Designer入門圖像處理領(lǐng)域,通過Unity入門圖形學(xué)渲染領(lǐng)域的經(jīng)驗,打算學(xué)一下自己垂涎已久的Houdini來入門幾何處理。 順便一提,本文中所使用的Houdini版本為Houdini Apprentice 17.5.293。跟的教程是有名的湖邊小屋,手頭有余裕的朋友們可以到gumroad上面購買支持一下這位藝術(shù)家。 建議有意向閱讀此文的讀者選個有空的時候,坐在電腦前再來閱讀本文。原因其一,排版是按PC來排的,手機上不好閱讀;其二,內(nèi)容比較硬核,干貨比較多,需要坐下來慢慢讀。 腳本語言與SD一樣,Houdini也是基于節(jié)點編程;比SD更強大的地方在于它也支持腳本編程(SD的腳本編程目前還處于非常原始的階段),并且腳本編程的威力非常強大。Houdini所使用的腳本語言有好幾種,就我目前了解到的有如下幾種:
![]()
![]() 由于作者目前水平所限,只能談一下自己對VEX和SOP一些粗淺的了解,有不準確或錯誤之處望讀者指正。 幾何對象的層次Houdini中,SOP處理的是幾何對象(Object)。幾何對象的數(shù)據(jù)在SOP節(jié)點中得到處理,并在SOP網(wǎng)絡(luò)中流動。那么問題來了,應(yīng)該如何處理這些繁雜的數(shù)據(jù)?Houdini將幾何對象(Object)中的幾何數(shù)據(jù)進行了分層。理解這一部分是至關(guān)重要的。 即使讀者沒有系統(tǒng)的圖形學(xué)背景,也應(yīng)當能理解幾何體的組成部分可以拆分為點-線-面;而Houdini中的分類要更復(fù)雜一點: ![]()
幾種變量類型類似于圖書館的管理員一樣,VEX中用到的變量也是分等級的;主要分為以下幾種:
屬性 Geometry Attribute最重要的數(shù)據(jù)類型就數(shù)屬性了,首先,前文提到的每個幾何層級都會把屬于該層的所有對象組織成一張表,比如primitive層的會組織到一張primitive表,point層的所有點會組織成一張點列表; 隨后,每個層級我們都可以為所有屬于該層的對象們定義一些屬性,比如對于Point層,可以為每個點定義位置或者法線屬性;我覺得下圖可以很好地解釋屬性的概念。 ![]() ![]() 認真讀的讀者肯定會意識到,那么vex代碼應(yīng)該用在哪種節(jié)點里面,來幫助我們?yōu)樗悬c定義或者修改屬性呢?Houdini有一組非常強大的節(jié)點,專門用來做這類事情;我這里介紹其中用的最多,最有代表性的Attribute Wrangle節(jié)點。""Wrangle"一詞的翻譯是"放牧",就像牛仔管理他們負責的牛群一樣,我們對各個點或者其它對象的屬性進行“放牧”。換句話說,該節(jié)點對輸入數(shù)據(jù)中每一層級(就是上一小節(jié)講到的層級概念)的所有屬性進行處理。 ![]() 關(guān)于Atrribute的操作比較繁雜,但總結(jié)起來大致就是增刪查改四種操作;
![]()
![]() 前面提到的是相同層級的屬性讀取,不同層級之間的屬性讀取則可以使用point(...), prim(...), detail(...)函數(shù)完成,具體用法我就寫在下面了。 ![]()
![]() 然后在代碼編輯器中輸入 ![]() 但是如果寫成這樣就會報錯: ![]() 屬性在整個節(jié)點網(wǎng)絡(luò)中,一旦你創(chuàng)建了,在人為手動刪除它之前,就是一直存在并且全局都可見的(就是任何時候,只有你想要就可以讀。。因此屬性是非常消耗空間和性能的,應(yīng)當盡可能節(jié)約使用,如果預(yù)計將來再也不需要這個屬性時,就應(yīng)當使用Attribute Delete刪除掉。 變量 Variable那么,一些VEX代碼中的變量,如果它們只會在該節(jié)點的代碼里面用到,那么就沒有必要設(shè)置為屬性了,我們稱之為局部變量,就是它只屬于所在的這個節(jié)點,節(jié)點算完之后就把它所占用的空間釋放了,生不帶來,死不帶去。 局部變量的定義很簡單,和一般的C語言定義方式一致。這里就不再累述。值得注意的是,當你想要用包含變量的一組值來定義一個局部變量時,應(yīng)當使用函數(shù)set(...),比如下面這段代碼 ![]() 編譯器會報錯:“Syntax error, unexpected identifier, expecting '}'.”初學(xué)者肯定會丈二和尚摸不著頭腦,錯在哪了呢?原因就在于賦值的式子里包含了變量@y,而{ a, b, c }僅當a,b,c為常量(具體的數(shù)字)時才有效,我們這里應(yīng)當使用函數(shù)set: ![]() 參數(shù) Parameter除了前面提到的2種數(shù)據(jù)類型之外,還有一個非常重要的,就是paramteter(參數(shù)),參數(shù)一般出現(xiàn)在節(jié)點的paramter窗口,我們可以通過參數(shù)這些對節(jié)點進行調(diào)整。官方網(wǎng)站上比較有用的文檔:創(chuàng)建參數(shù),右擊你要粘貼到的那個參數(shù),選擇"Paste relative reference"。 贊0 踩0 |
未知用戶
2005-2025 朱峰社區(qū) 版權(quán)所有 遼ICP備2021001865號-1
2005-2025 ZhuFeng Community All Rights Reserved
VIP