TP 與 Rayfire 製作複雜切面的鏡子破碎變速動態

2014/5/7 上午10:39:04

因為案子比較趕,Houdini的破碎還沒很了解,加上Rayfire最新版的功能Asperity一直很想嘗試看看,於是就用3ds MAX做。

本來想全程用Rayfire,但Rayfire的製作流程太過於生硬不太能適應修改和流程化,另外物理引擎跟TP比起來也比較不適宜這次的狀況,尤其在大量碎裂與強調摩擦性的時候,所以就以Rayfire做碎裂與模擬完的切面細緻化,TP模擬動態的方式來製作。

很久沒用3ds MAX,會發現做模擬的過程跟Houdini比較之下,3ds MAX比較不穩定容易死當或者某些流程往往都是單核心在跑,故此需要找一些script來操作避掉一些內建指令的癥結點。


做碎裂時先疊了多層不同的Rayfire Fragmenter,有Cube、Uniform、Radial等不同型態去做疊加嘗試,另外都把碎面的Material ID都設成2,最後需要再上個Edit Poly去把非ID2的面都設成ID1。

再利用Rayfire Tool把Element都Detach出來,之後給個Multi/Sub-Object材質,因為TP將物件轉成Particle的時候不會自己分辨ID,不知道為什麼,務必要先上Multi/Sub-Object他才會辨認。


接著在TP簡單的做個模擬動態,確定好模擬的動態後Export成物件,要再用Rayfire Asperity加工切面。Export的時候要注意如果模擬時有Cache MasterDynamic要先把Cache unset,不然Bake不出東西。

TP Export出的碎塊在這邊有4878個,不可能每個都做切面的加工,一來太耗費效能甚至會當機(3ds MAX嘛),二來太過細小的碎塊做加工反而會變畸形,所以我是取體積在一定大小以上的碎塊才做加工。


當然,這邊就要靠Script,3ds MAX的強大之一就在於大量的Script支援。
(Select By Size / Volume)

篩選完之後,通常會給這些篩選完的物件一個Selection Set以防萬一。

TP Export出來的物件Scale是很雜亂的,在一般情況下是沒有關係,但因為我們這邊要套上Rayfire Asperity細分切面,而Asperity的操作參數是基於點線面的距離跟面積,所以在加工之前還要先做Transform歸零的動作(Reset XForm和Collapse)。

接著準備套上Asperity,先複製其中一塊碎塊加上Asperity調整參數當作樣本,等等再把這個樣本的Asperity Modifier複製給其他碎塊,不然一次套上兩千來個再來調整參數會慢得很可怕。


不過3ds MAX預設中是無法一次把Modifier貼給複數物件的,所以這裡也需要Script。
(Modifier Instancer)

題外話,在3ds MAX處理大量物件時,特別是選起來的時候,最好右側的Command Panel的Tab是處在Create而不是Modify,節省效能避免當機。

Rayfire Asperity的參數中,把Border Weight調高增加碎裂邊緣不規則,並視座標軸方向把XYZ其中一個的Strength調0避免影響鏡面的平整(通常是Y)。但這樣調有些鏡面還是會有一些三角面的現象,這時候就要把有問題的面選起來,做Tessellate解決這個問題。


最後,把調整完的碎塊轉成單一Xmesh,一來節省效能,二來還可以再做變速,變速記得Xmesh的Loading Mode要改成Frame Interpolation。

Render的部分是用Vray,針對切面的材質有在Bump加VrayEdgeTex讓切面三角面不至於太明顯銳利。