2009年5月8日


首先,先創立一個長條板子。這就是未來我們變化的基準。
First, I create a box and change its form.

給他一點簡單的動畫,基本上用sin()來玩動態是比較好看的。
Let's give it a simple animation. I use a sine function here.

也給他一點旋轉,隨著時間而變化。$FF是時間的浮點數,$F則是整數,我不想他轉起來像是秒針一樣,所以給他浮點數吧。
Also give it some rotation, following time. $FF is a float number and $F is an integer number. If you don't want it rotate like a clock, just give it a $FF variable.

接著要選擇即將噴發力子的點,把點的資訊顯示之後,可以看到每個點的編號。先想好要從哪個點噴射,把該點的編號記起來。
Now I wanna choose an emitter for my particles. Display point's number, you can see point's number there. You should better think what point will be an emitter of particles first.

創立一個Group,把Pattern改為0,就是說這個Group是包含0這個點。當然你可以設定很多個點。此Group為grp_a。
Create a group, change Pattern to 0. Which means this point, 0, was included in this new group. Of cause, you can set a lot of points here.

再用另一個點設立為grp_b。
Set another point to grp_b.

再來就是創造一個POP Network,將grp_b連到input1。不用擔心grp_a因為他們是串再一起的,資訊都有被接收到的。因為要使用板子的資訊,所以使用source來做發射器。
Then I wanna create a POP Network, link with grp_b. Don't worry about grp_a, they were connected. Here I use source to be the primary emitter.

使用第一個input之資訊,並指定我要用grp_a。
Use first context geometry, set source group from grp_a.

這時候play可以看到動態,相當不錯。但是似乎點太多了,這並不是我要的。
Now we can see the animation, pretty nice but it's not what I want.

在source上,設定出生率為$FPS,使他跟隨時間發射。不知道$FPS的意思可以按F1查詢,結果為: Playback speed in frames per second (as set with the Playbar controls).
Back to source and set const. birth rates to $FPS, make it emit following time. If you don't know what is it, you can try to press F1 to find its function.

再來給他color去添加particle的顏色。Lookup就要改了,因為我希望顏色是跟隨生命值而改變的,所以這邊我們要寫$LIFE。
Then I have to give a color node for it, change lookup to follow its life, so set it $LIFE.

在Ramp的地方給他點顏色瞧瞧。
Also, add it in Ramp.

給了顏色當然也要給他點Alpha瞧瞧囉!
Don't forget its alpha.

依照想要的Alpha給他拖拖拉拉,左邊是0,右邊是1,也意味著出生和死亡。這邊也是指出生的透明度和死亡的透明度。
Change it what you want. Left means 0, right means 1 in alpha.

現在就是進入比較關鍵的地方了,我們要將剛剛的點連線成為一條曲線。給予add節點即可,並且將popnet和add複製一份指定給grp_b。
Now I want these point line. Here I use an add node for popnet, and copy them for grp_b.

記得將add節點內的polygon切換成By Group。
Chanhe the parameter of polygon to By Group.

將grp_a, grp_b給merge起來並且skin,如此一來就可以根據兩條curve織成一塊surface囉。不過看圖可以知道我的節點有問題了,紅色斜線意味著有Error,讓我們來看看吧。

對著Node按著滑鼠中鍵可以知道他的內容。我們可以看到Error log是說有些primitive出錯了。

回到前面的node檢查,在merge中有四個primitive、兩個polygon和兩個particle system,先記著。

回到add node發現並沒有問題。(根據merge)

再回到popnet檢查,發現他只有一個primitive。那應該是這邊出問題了,是在add節點多了一個primitive的緣故。

既然多了東西,就創造一個delete把它殺掉吧,預設是primitive沒錯。接著就是要處理到底是哪個primitive多出來了,不過運氣很好的是我們只有兩個primitive,也就是說,不是0有問題就是1有問題。先拿0來試試看吧!

想不到一試就成功,看來是0出了問題沒錯,他就是兇手!!!!

到delete檢查,都正確了沒錯。

這邊再試試另一種方法製作,先創造一個line。

按G就是以他為中心顯示。

把點增加到50。

但是這個線段要跟著板子跑目前仍有困難,我們要做點手腳。

先到Hscript Textport吧。
.
輸入指令help可以查詢命令,不過這次我要輸入exhelp去查詢用法。這邊蠻好玩的,輸入ex他會自己跳出一串相關的指令,你就選就行了。

我這邊要用npoints,n的意思就是number。

回到line,利用npoints呼叫popnet1中的資訊。然後把line和popnet一起匯入point給參考。

如法炮製另一個popnet2。

將point merge起來,指定給剛剛的skin。

這樣也可以達成我們的需求喔。

接著到VEX來做shader囉。創造一個VEX surface SHOP Type開始製作。這個shader就叫做pcTrail。

大概簡單介紹一下這個Cf是color,Of是opacity,Af是alpha,N是normal information。

現在製作一個parameter用來日後控制這個shader。

把名字都命名成Cd意思就是diffuse color,類型改成Color(color),這是來控制顏色的。

到shop中,按tab竟然可以發現剛剛我們做的pcTrail!實在太讓人興奮了,不是嗎?

接著把這個顏色指定到surface color上。

先看一下,效果還ok。可以注意到白邊的地方應該是消失的才是對的,也證明目前這個shader沒有帶alpha,稍後會製作。

架個攝影機和燈光。

這時候來做alpha的parameter,float是ok的。

連到output內。

再跑一次,切換到alpha模式,就可以看到有alpha了。

這時候需要把這兩個資訊做muliply,來處理實際上有白邊的問題。

這就是白邊問題沒解決的樣子。

再來把alpha資訊轉vector,通常有xyz三個值,所以要分別傳輸三個數據。

先把opacity用一個constant代替,先用來做暫時的opacity。

記得把屬性改成color。

完成的配線圖。

預覽效果就可以看到成果了。

但是事實上opacity資訊應該是由alpha 提供,稍微更改一下吧。

效果也出來了。

我們再將global的color和alpha變數也加入到這個shader系統內。

但是目前這個shader並沒有任何燈光資訊,所以也不會在表面上出現影子,這時候在color上加入light資訊就行了。

可以看到在shader上確實出現影子了!

但是有時候我們可能不需要影子,這對於fx artist來說,變得很難去修改,所以這邊我們做一個控制器讓他們可以去控制這個shader上要不要被投射影子。做一個switch,並且攜帶一個parameter。

這個parameter就是light switch,我們的燈光控制器。

有些人可能會有算圖一片空白的問題,這時候如圖,把normal資訊也叫進light就行了。

將switch製作完畢並且連入shader系統。

我們回到shop看看剛剛我們的pcTrail。哇,可以看到我們的控制器,但是light_switch理當應該是一個開關,不是一個數字bar,要加入布林值的概念才對。

回VEX,改成Toggle就行了。

讓他變成勾選的!果然好多了!

另外我們加入一個控制亮度的parameter。

依樣畫葫蘆。

可以注意到我們也有控制亮度的控制器了。

如果你不想讓一些parameter被使用者改變,你可以將parameter內的invisible打勾,這樣就不會在shader上看到該控制器。

你也可以改變parameter的預設值。

將node稍微整理一下,並且將亮度控制器加入系統。

但是我還想做一個總透明度控制器,一樣的,做一個parameter到alpha上。


預設值改1。


把總控制器設置0.462時,可以明顯看到alpha降低了。

如此一來就大功告成了,可以跑看看動態了!這個結果就讓各位自己來吧!如果有任何問題歡迎提問。呼~第一部分結束!


1 意見 :

哇哇哇 好難找到houdini ueser呀

感謝JC這篇教學呀~ 這篇光碟我也是好不容易要到的

我houdini也稍微學了一陣子

有個問題不解

想請問JC

關於arg & argc 的作用~!?

Reply

留言會在通過機器人審核後才會顯示~留言完畢沒有顯示並不是留言失敗喔!

版權所有 © 2016 Jacys Lin All Rights Reserved. | 轉載請註明出處 |