2012/02/12

thinkingParticles重要的Operator


學習thinkingParticles有段時間了, 整理一下重要的operator供各位參考. 相關測試效果:










---以下為翻譯---
譯自: cebas wiki
翻譯: Hammer Chen



ValueToTimeOperator
Value To Time 讓你可以把任何數值(scalar)轉換成time數值. 任何丟到裡面的數值都會轉換成time (frames/ticks). 這工具很強大, 想像一下, 你可以把距離轉換成時間, 這樣, 你就可以控制一個動態物件的移動速度了. 例如: 你把Speed接到這個Operator裡面, 而速度是20, Value To Time就會把這個轉換成20個frame或是tick .

AlignmentOperator
進階的粒子動畫必須要能夠把讓粒子在空間中對齊某方向. Alignment Operator一般可以用在飛行的鳥群, 可以讓鳥永遠面向他飛行的方向.

BubbleMotionOperator
Bubble Motion Operator有其特殊用途, 能夠增加粒子的二級動態效果, 例如可以製作海中泡泡升起扭動的效果.

HFragmenterModifier
thinkingParticles提供真實的階層物件拆解工具, 很容易地製作複雜的崩壞效果. 要知道物理的精確性與視覺上的複雜建築物破壞效果. (例如一棟摩天大樓, 一架飛機, 一棟房屋) 這些不管對軟體來說或是美術人員來說都很複雜. 為了要完全地利用TP的威力, 必須要進行預先爆破的功能與規畫.

如同真實世界一般, 爆破建築物必須要經過周詳的計畫與實行. 即使是在一開始的時候的微小錯誤, 都有可能造成大災難. TP也一樣, 不對的鋼骨結構最後會導致再怎樣模擬都是無效的物理模擬結果.

結構受到的混亂外力
Hfragmenter其實就是把複雜的物理結構, 變成單一容易使用的介面, 讓你可以在任何時候都能完全地控制. HFragmenter是一種階層式的破壞 (爆破)結構工具, 不只是thinkingParticles裡面的單一結點而已, 它其實是多個工具組, 能夠相互協同工作. TP裡面有提供三組工具, 三者要協同工作, 提供自動化的相互連結, 以下:

  • HFragmenter thinkingParticles Node
  • HFragmenter Modifier
  • TP Collapse (Utility)

整體的結構
這裡列出這些工具的目的是要幫助你建立結構的骨架, 讓你可以自由地調整物理參數, 用層級式的方式對不同物件作排序, 然後摧毀之. 這種獨特的方式讓你可以自由地定義破碎的部位, 以及何時要讓該部位破碎, 一但結構性骨架定義好了以後, 你可以在任何時候改變效果.

產生這個之後會被打破的物件有一套規則, 不能式單一物件, 所有的面或是部位需要塌陷成一個mesh 請看以下的規則:

例如
你想要摧毀一棟完整的建築物, 而這棟建築物裡面含有:
  • 屋頂的瓦片
  • 屋頂的樑柱
  • 牆面
  • 窗戶
  • 窗框
  • 椅子
  • 沙發
  • 煙囪
  • 桌子
這些東西加起來可能會達到上百甚至上千個. 請記住, 這些物件最後需要變成單一個mesh, 而神奇的HFragmenter就可以發揮這個功能. 一但模型建立了, 它會定義出破壞群組, 根據命名方式選取元件 採用適當的層級架構, 讓你可以輕易地定義整個破壞的順序與依序產生的碎片.
如果我根本就不想要設定整個結構呢?
把上千個物件塌陷成單一個模型, 然後指定各個元件, 定義成特定的群組, 這樣的工作真的很耗工. HFragmenter Modifier提供必要的工具, 定義結構性的架構, 而且瞬間就完成了. 還有另外一個工具能夠幫助你更快速地製作複雜設定----3ds Max utility TP Collapse會自動準備複雜的3ds max rig, 利用HFragmenter Modifier. 事實上, 它會自動塌陷多個連結的物件變成單一的模型, 然後指定適當的Fragmenter Groups .要學習更多關於TP Collapse Utility請點這裡.

為何要轉換成單一個模型?
單一模型當初要設計成這樣的原因是, 是要讓shape collision的引擎能夠處理大量複雜的物件, 讓彼此之間互動. 刻意安排出(Carving out)的碎片, 讓引擎能夠指計算物件的某一部件, 在特定時間產生想要的效果. 另外一個關鍵優點是單一模型的方式保留了零件質量的特性. 想像一下, 一個巨大的建築物的3D模型, 有好幾樓層, 每層都有好幾個房間, 房間內又有很多物件, 例如椅子, 桌子, 門, 地毯, 燈具...等等. 為了要模擬整棟大樓的倒塌, 就好像發生地震般, 這對物理引擎是一個相當巨量的任務. 如果要處理大樓裡面的每個單一物件的話, 其如如果是對每個元件處理破碎, 當破碎慢慢在建築物中擴散, 這樣的作業方式比較有效率.

ThinkingParticlesUtilities
TP Collapse是一個工具, 你可以在3ds Max的Utility裡面找到. TP Collapse是一個很簡單卻又很強大的工具, 它本身並沒有UI的控制選項, 工作流程如下:
  1. 選取一個rigged (也就是鏈結的)物件
  2. Call/Activate 啟動TP Collapse工具
這個工具會合併所有任何鏈結的物件, 把它變成單一個mesh, 然後自動地套用HFragment Modifier . 裡面帶有適當的階層設定與命名, 這些是根據原本鏈結的方式.

就像下面的插圖, 簡單的3ds Max設定用來表現TP Collapse Utility的功能, 左邊的物件包含了多個物件, 所有的物件都鏈結在一起. 右邊則是套用TP Collapse產生出來的 (單一個mesh 帶有HFragmenter修改器).

以下是鏈結物件的階層關係. 請注意! joints關節都會連接到根的dummy物件, 為了要讓TP Collapse utility能夠正常運作, TP的joint helpers能夠幫助能夠鏈結到任何的層級. 而joint helpers得實際位置其實沒有關係, 但是為了要更容易找到或處理物件, 把所有物件連結到root會比較好.

當你用link的方式在3ds max建立階層關係的物件, 會自動地轉移到HFragmenter modifier裡頭. 這個修改器會產生單一的模型, 把物件拆解成適當的FGroups.

PhysXOperator
thinkingParticles提供另外一種的剛體物理運算Operator. 它真的會判斷物件的形狀, 除了精確性以外, PhysX operator還提供對AGEIA Dynamics system完整的支援, 也會支援將來的PhysX晶片 . 這個硬體會大大地加速剛體碰撞的運算!

儘管你可以在單一個DynamicSet 裡面放多個PhysX collision operators, 我們還是建議你盡量用少一點的operators, 因為這會消耗大量的記憶體.

TexMapColorOperator
這是一個很先進的helper nodes, 要與MatterWaves operator以起運作, 取得當前物件的表面貼圖顏色. 當與pyrocluster一起使用時, TexmapColor會使用UVW 或Position input 決定顏色, 讓你可以控制volumetrics color的顏色, 根據物件表面的顏色來決定.

另外一種應用是根據物件的貼圖顏色來產生粒子效果.

TimeBaseOperator
TimeBase Helper讓你可以控制連接到的operators動畫處理的時機.

在非線性動畫的最基本的概念是: 物件的動畫不是固定在特定的frame或是時間數值上, 一旦動畫建立了, 你可以在之後的適當時機再播放該動畫或是設定適當的縮放與動作的混合.

最好的例子大概就是飛鳥群了! 鳥的翅膀動畫會跟他飛行的速度有關. 我們想像一下, 標準的翅膀運動會花費30個frame好了, 但是如果你要製作發狂的鳥兒, 翅膀應該要拍打很快, 對於飛行比較慢的鳥也會遇到這種狀況, 翅膀的動作應該要放慢.

這就是非線性動畫的最佳範例, 使用thinkingParticles與TimeBase Helper, 你就可以縮放鳥翅膀飛行的時間, 根據您需求來調整.

TimeLoopOperator
Time Loop Helper提供了另一個非線性動畫的功能, 讓你可以控制動畫, 不必讓動畫固定在特定的時間點. 所有連接到這個的operators將會在特定的時間範圍內進行loop循環.

TimerOperator
thinkingParticles提供先進的非線性動畫的功能, 讓你用完全不同的方式控制時間. Timer Helper其實就像是一個計時器, 讓你控制時間起始範圍, 根據特定的條件.

Timer1Operator
如同其他的timer Helpers一樣. Timer1 Helper會使用現有的動畫, 然後以非線性動畫的方式控制其播放時間. 請仔細閱讀以下範例, 你就會更了解其運作方式:

想像一下你有個具有動畫的門, 時間有31個frame才會到達打開的狀態. 而動畫有兩個keyframes, 其中一個在frame 0 (門關閉), 另外一個在frame 30 (門開啟). 標準的動畫軟體例如3ds max, 理解這種線性的動畫, 所以在按下播放鍵, 很自然地就會由frame 0播放到frame 30. 但是如果用Timer1 Helper來控制, 讓你萃取這31個frame的動畫, 然後用不同的時間方式來控制它的播放. 你可以觸發它的起始與停止的時間, 或是讓它暫停, 或是重複播放.

要使用Timer1 Helper 你一定知道block animation區段動畫裡面的常數(constants) ,這裡面有哪幾個frame有key. 在本例裡面只有兩個key frames ,來開啟關閉門, 既然知道這樣, 你就可以自由地以Timer1 Helper觸發你想要的門動畫.

Start parameter就代表第一個絕對的keyframe. 在本例裡面就是frame 0, 也就是門關閉的狀態.Frames1就代表播放完整個動畫 (frame 0-30) 的時間, Hold1 代表了最後的播放frame. 本例裡面就是frame 30, 也就是門開啟的狀態.

我們再複習一遍開門動畫. 讓我們將start設定為 0 , Frames1設定成15, 而Hold1設定成30. 這樣的設定, 整個動畫會在15個frame裡面播放完成.

Time2 sequence會在Time1播放完後接著下去, 這會控制添加的動畫的長度, 基本的觀念跟Time1是一樣的. Time3會定義到達整個動畫的最後位置所需要的時間, 請注意這邊最後(end)的時間並不是Timer1, 而是整個動畫的最後一個frame .在開門動畫的例子裡, End的數值設定為0 這表示門會回到它關閉的狀態, 也就是(frame 0) .為了要讓動畫結束的時候門能夠微微打開, 你可以設定成frame 5 或 10 ,這會對應到門的完整動畫(Frame 0-30)裡面的開啟狀態.

上面的說明聽起來很複雜, 但是別擔心, 如果你第一次還沒辦法完全聽懂的話, 請再閱讀一次, 你將會更了解非線性動畫. 請看看門開啟的範例檔, 它在thinkingParticles安裝資料夾裡面可以找到.

GetDirectionOperator
Get Direction Helper是個數學相關的operator, 當你需要取得粒子方向的資訊舊可以用到他, 這個operator的主要目的是給你能從單一個Alignment input資料串流取得確實的方向資訊.

IntersectOperator
intersect Helper Node是用來取得粒子在空間中運動的交錯點, 這個交錯的計算是藉由發出射線, 根據粒子移動的方向, 或是使用者定義的向量來決定. 這個Node常被用來計算在表面的衝擊點的位置.

ShapeJointOperator
Shape Joint Node會動態地在兩個粒子之間產生鏈結, 這個node可以利用Shape Collision node的碰撞資料, 有就是能支援完整的自身碰撞與其他物件的碰撞.

RepulsionBounceOperator
Repulsion Bounce能夠讓你產生兩個不同Group粒子之間的動態效果, 當這個Operator或得true的串流的時候, 就會啟動粒子的反彈或是旋轉. 很多狀況你會拿來作為PPassAB Initiator當中的Distance Condition搭配Repulsion Bounce operator所使用.

SetRefOperator
SetRef是TP裡面三個跟Reference operator參照系統相關的其中一個. SetRef用來建立粒子與粒子之間的關係的參照, 在參照建立以後, GetRef operator是用來取得參照關係的資訊. 而ClearRef operator則是用來移除粒子之間的參照關係.

TP裡面的Reference參照系統跟3ds max的參照有點不太一樣, 在TP裡面參照指的是兩個粒子之間 其中一個粒子是定義成To particle 其他的粒子則是定義成From particle, 這彼此之間並沒有階層的關係. 只有To/From方向的關係. 常常會誤解說From particle就是To particle它的父母層級, 其實不是的!

請記住參照關係是有方向性的, 有就是由From到To的粒子. 當你使用SetRef會定義出方向性的參照關係, 所以當你使用GetRef的時候, 你在問From或是To的粒子, 誰是你的參照, 你一定要指定出你要的是To 還是 From的參照粒子.

PsearchOperator
PSearch node可以用在很多進階的特效, 當你需要找到最接近或是最遠的粒子, 根據你設定的搜尋範圍, 而這個node也提供了許多的output, 讓你可以取得所有重大的資料, 用在進階的特效.

PPassOperator
PPass Operator的功能就像Group operator一樣, 而Group operator是從thinkingParticles 1.0就有的. 但是, 不像舊的Group operator, PPass提供先進的功能, 容易控制粒子的群組, 它會有下拉式的選單, 讓你在任何時候改變粒子群組, 讓你不需要重新串接或是刪除原本的設定.

PPassABOperator
PPassAB Operator其實就跟TP的Group operator很像. PPassAB的最大優點是能夠計算不同群組的粒子之間的互動, 這是在TP裡面唯一能夠產生非常最佳化的粒子互動, 碰撞效果. 計算兩個不同群組的粒子的距離, 也就只能用PPassAB來計算.

PathPositionOperator
Path Position helper很適合用在你需要把粒子放在path上的時候, 這個path可以是spline或是mesh上選取的edge.

ShapeCollisionOperator
thinkingParticles提供獨特的Shape Collision Operator 它真的會去考慮粒子的形狀動態的碰撞偵測引擎, 當與TP知名的動態碎裂系統一起使用的時候, 你可以產生驚人的動態效果, 快速且有效.

Shape Collision operator最強力的背書就是知名的賣座電影2012 電影裡面有很多爆破特效

PAttachOperator
PAttach是一個很有用的動態物理的operator 讓你可以把粒子附著到另外的粒子

要理解From/To的關係的意思最簡單的方法就是把它當成Child/Parent的關係, 其中From就是Child 而To就是Parent. 這就跟3ds max標準的階層關係一樣, 當Parent的位置/旋轉/縮放會直接地影響到連結到它的children. 所以From的粒子會連結到To的粒子, 而且也會遺傳到其移動旋轉的資訊.

要小心的是, 當使用PAttach with SC 與 ShapeCollision可能會發生錯誤!

如果你以前有用過Particle Flow PAttach就跟Lock/Bond operator很像!

MatterWavesOperator
MatterWaves Operator讓你根據多個材質產生驚人的粒子特效, 透過材質你可以控制粒子. MatterWaves是非常先進的粒子系統, 這種功能你只會在高階的動畫軟體裡面找到.

為了保證能無縫地與3ds max整合在一起, 我們用了很多新的程式撰寫技術, 其中一個技術稱為Multi-Layer Particle Control (MLPC). 這個技術讓你可以產生粒子, 基於多個材質貼圖, 就是這個技術讓MatterWaves Operator與其他產品有所不同.

PaintOperator
thinkingParticles提供進階的繪製的功能---- Paint Operator, 讓你可以在物件表面繪製粒子, 每個在物件表面產生的粒子都會產生顏色或是材質效果, 碰撞偵測的運算是精確的, 它也會判斷是否有碰撞到. 如果是串接到on的話, 為了要在物件表面繪製, 你必須要使用特殊的TP_TexMap texture map, 這個紋理貼圖是專為在物件表面處理粒子碰撞所設計的.

MemoryOperator
當你要設定非常複雜的粒子系統時, 儲存資料是最重要的工作. Memory node就是要滿足這樣的需求.

Memory node最大的功能是提供DynamicSet的擷取功能, 讓你隨時都能使用DynamicSet, 也可以針對每個粒子儲存數值.

IteratorOperator
Iterator node 是TP的次世代類型的節點, 它讓粒子的設定能夠有迭代器(iterator) 或是loop的效果 ,很類似程式語言裡面的Do 或是For Loop. 這個節點讓你可以call節點網絡好幾次.

這個節點的應用面很廣, 可以用在非常複雜的設計.

BlurpOperator
Blurp Operator的功能是要讓你快速產生粒子的morph animations. 這個Operator最主要的概念是建立複雜的分解與重組的效果, 這個特效常常在吸血鬼這類的角色上面出現, 例如吸血鬼分解成一群的蝙蝠飛走, 然後又重組變成咆哮的惡犬.

這類的效果用其他的operator很難做到, 但是如果用Blurp Operator就完全沒有問題, 這能大大加速您的流程.

CollisionMapOperator
Collision Map碰撞貼圖是一個特殊的node 用法也很特殊, 這是TP第一個工具node (Tool-Node) 而他與其他的node也很不同.

Tool-Node的意思是說他可以獨立使用, 不需要串接複雜的節點
Collision Map可以獨立使用 或者跟Particle groups一起使用

這個node的功能是?
這個工具節點的目的是要用在進階的破碎或是爆破的效果, 這個節點會自動地產生動態的map 裡面,包含了必要的破碎或是碎裂的資訊. 這些資訊可以用來接上下一個node 進行下一次碎裂的處理.

運作方式是什麼? 能用在哪裡?
Collision Map會自動產生動態的交錯map, 呈現出兩個或是多個物件之間交錯的狀況. 所有被選中的物件都會被記錄其碰撞的資訊, 所有的交錯, 或是碰撞都會產生灰階的map. 表示面與面之間的距離, 這些灰階的圖片可以作為fragmentation map之用.

要注意的是, 這是靜態的效果. 這表示如果你如果你的動畫改變了, 那表示你的collision map也必須重新產生.

ParamBlockOperator
ParamBlock Operator可能是最強大的 最有變化性的operator

這個operator讓你有無數次的存取每個單一參數, 更重要的事, 它讓你可以建立任何數量的input data 或是output data 根據你選取的物件參數, 這些參數可以接著用在其他的operators或是conditions條件, 用來驅動其他的operators.

這個operator一個有用的地方是能夠根據粒子的位置或是半徑改變顏色或大小. 另外一個例子是, 利用選取物件的材質顏色或是高光強度來驅動粒子的發射率....有無限種的可能性.

ABombOperator
ABomb是一個獨特的粒子operator, 讓你可以添加類似流體的動態效果. 當使用預設值時, 這個operator會產生經典的蕈狀雲的效果. 但是, 如果修改一下參數也可以產生複雜的流體動態效果, 可以用來模擬出煙霧或是煙塵在地面互動的感覺.

InGroupCondition
In Group Condition是測試粒子是不是包含在某個group裡面, 當這個條件為真, 就回送出一個true的output.

PSelectionOperator
由時候你會需要選取一個或是好幾個粒子, 套用某種效果, 或是刪除這些粒子. TP提供幾種方法進行這項需求, 其中一種方法就是PSelection Operator.

為了要用這個operator 使用者必須要選取一個或是多個particle IDs. 當這個operator啟動時, 所有連接到這個PSelection的operator都會針對這幾個被選到的粒子進行操作.

VolumeActivateOperator
這個操作子是thinkingParticles的新血, 把TP的整體功能強化! 這是第一次你可以在TP裡面進行跨DynamicSets的, 把資料由一個操作子餵到另外一個操作子的功能. 這個特殊的功能, VolumeActivate operator可以取代並且蓋過 VolumeBreak operator的activation data. 如此, 你就可以用TP做出多點衝擊(多個撞擊點)的效果了!

簡單的說, 你可以控制 VolumeBreak operator裡面的物件何時碎裂, 在哪個地方碎裂, 以及要怎樣碎裂. 請注意, 這個VolumeActivate Operator必須要搭配VolumeBreak operator才能使用, 而且是被用來告訴VolumeBreak operator他哪邊要進行碎裂(透過Position input); 碎裂的範圍有多遠(透過Initial Length控制) ;而這個範圍擴張的速度有多快 (由Spreading Second控制); 甚至也能決定發生的位置類型(World, Object, Normalized).

Position - 起始長度. 設定volumeBreak碎裂效果的起始長度, 這個長度是以 position 參數為中心做為起始, 告訴VolumeBreak內部碎裂的起始範圍, 來決定啟動 VB fragments的範圍有多廣.
Spreading Length - 擴張長度. 定義碎裂由上述參數起始, 最大可延伸到多大的碎裂範圍.

Spreading Second - 擴張秒數. 這設定要釋放所有的碎片要花多久的時間 , 這個參數可以用來模擬出震波效果.

VolumeBreakOperator
VolumeBreak操作子是一個會計算實體模型碎裂的工具. 這個操作子是由 volumeBreaker為基礎, 快速地創造出模型的碎片.這些碎片是真的根據模型體積計算出來的.有了 volumeBreaker , cebas公司帶給您好萊屋特效等級的破壞工具, 而VolumeBreaker的開發有徵詢過顧問以及特效專家們 , 這些專家參與的都是數百萬等級的大電影的人.

VolumeBreak幾乎可以套用在任何類型的模型, 包括那種很懶惰的人做出來的模型 (沒有完全閉合的模型). VolumeBreaker 會試著補償模型本身的錯誤, 例如沒有焊接的點, 或是開啟的邊(open edges). 這個操作子所計算出來的碎片能夠被thinkingParticles其它的操作子所取用.

Activate 啟動碎裂. 定義碎裂的百分比, 100%代表完全碎裂 ; 0%代表完全不碎. 通常會對這個參數設定動畫 當然你也可以用動態的方式控制

Raster

細分的大小 這會計算每個碎片的最小距離 因此可以控制碎片的大小 請注意如果把這個參數設定太小或產生大量模型碎片 會耗費許多計算時間

VolumeCellOperator
這個跟VolumeActivate一樣是一個新的operators. 在TP裡面, 能夠加強運作模式. 這是首次可以在不同的DynamicSets傳送資料的功能.

這樣VolumeCell operator能夠用來取代任何VolumeBreak operator裡面的volume cell的資料. 這樣一來, 你就可以提供多個"cell points"給單一個VolumeBreak operator了.

簡單的說 這個功能讓你能夠控制何時, 何地以及如何粒子會被VolumeBreak operator弄碎. 請注意,這個operator需要跟VolumeBreak operator一起工作, 並且是用來告訴VolumeBreak operator哪邊要啟動VB fragments (透過它的Position input) 或是距離多遠particle shape volume才會啟動碎裂 (透過Initial Length) 或是在這個距離以內多快會啟動(透過Spreading Second) .同樣Position Type (World, Object, Normalized)這些參數也是依此類推.

TPJointSC
Joint SC Helper 是在TP裡面用來定義連結(joint)的屬性, 這個操作是在TP介面之外進行的. 這個helper只在與SC Shape Collision一起使用的時候才有作用, 其TP裡面其他的物理引擎目前都無法處理Joint SC Helper的運算.

因為這是3ds max標準的helper物件, 所以很容易設定. 同時, 也可以透過maxscript控制他的屬性 用來自動產生helper與修改joint helper.

請注意為了要正常地載入物體, 你必須要在TP裡面載入所有參與連結的物件 (不包含joint helper). 這些物體必須要在同一個Object2Particle operator裡面, 而且同時還必須要整定對應的SC operator, 沒有必要載入SC Joint Helpers.

Obj2Particle裡面有一個能輸入"Joint Code"的地方 對應到SC Joint Helper裡面的Joint Break Code 如果你對input code設定動態數值, 當這個數值與SC Joint Helper break code相吻合時, 該joint就會斷開!

[相關文章]