[vfxinfo独家]TP 节点大全中文详解

文章一部分是转载在Hammer Chen的Blog(本文获得Hammer的转载许可),一部分是自己的使用心得 感谢Hammer无私的让我们转载他的文章,感谢!!!

Hammer的原始文章链接 http://hammerbchen.blogspot.tw/2012/02/thinkingparticlesoperator.html

原始内容来自于Cebas的wiki页面,或者参阅Cebas官方提供的TP帮助文档

 

时间节点

Value To Time 让你可以把任何数值(scalar)转换成time数值. 任何丢到裡面的数值都会转换成time (frames/ticks). 这工具很强大, 想像一下, 你可以把距离转换成时间, 这样, 你就可以控制一个动态物件的移动速度了. 例如: 你把Speed接到这个Operator裡面, 而速度是20, Value To Time就会把这个转换成20个frame或是tick

TimeBase Helper让你可以控制连接到的operators动画处理的时机.

在非线性动画的最基本的概念是: 物件的动画不是固定在特定的frame或是时间数值上, 一旦动画建立了, 你可以在之后的适当时机再播放该动画或是设定适当的缩放与动作的混合.

最好的例子大概就是飞鸟群了! 鸟的翅膀动画会跟他飞行的速度有关. 我们想像一下, 标準的翅膀运动会花费30个frame好了, 但是如果你要製作发狂的鸟儿, 翅膀应该要拍打很快, 对於飞行比较慢的鸟也会遇到这种状况, 翅膀的动作应该要放慢.

这就是非线性动画的最佳范例, 使用thinkingParticles与TimeBase Helper, 你就可以缩放鸟翅膀飞行的时间, 根据您需求来调整.

Time Loop Helper提供了另一个非线性动画的功能, 让你可以控制动画, 不必让动画固定在特定的时间点. 所有连接到这个的operators将会在特定的时间范围内进行loop循环.

thinkingParticles提供先进的非线性动画的功能, 让你用完全不同的方式控制时间. Timer Helper其实就像是一个计时器, 让你控制时间起始范围, 根据特定的条件.

如同其他的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安装资料夹裡面可以找到.

破碎节点

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的控制选项, 工作流程如下:

选取一个rigged (也就是链结的)物件 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.

这个操作子是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 – 扩张秒数. 这设定要释放所有的碎片要花多久的时间 , 这个参数可以用来模拟出震波效果.

VolumeBreak操作子是一个会计算实体模型碎裂的工具. 这个操作子是由 volumeBreaker為基础, 快速地创造出模型的碎片.这些碎片是真的根据模型体积计算出来的.有了 volumeBreaker , cebas公司带给您好莱屋特效等级的破坏工具, 而VolumeBreaker的开发有徵询过顾问以及特效专家们 , 这些专家参与的都是数百万等级的大电影的人.

VolumeBreak几乎可以套用在任何类型的模型, 包括那种很懒惰的人做出来的模型 (没有完全闭合的模型). VolumeBreaker 会试着补偿模型本身的错误, 例如没有焊接的点, 或是开啟的边(open edges). 这个操作子所计算出来的碎片能够被thinkingParticles其它的操作子所取用.

Activate 啟动碎裂. 定义碎裂的百分比, 100表完全碎裂 ; 0表完全不碎. 通常会对这个参数设定动画 当然你也可以用动态的方式控制

细分的大小 这会计算每个碎片的最小距离 因此可以控制碎片的大小 请注意如果把这个参数设定太小或產生大量模型碎片 会耗费许多计算时间

这个跟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)这些参数也是依此类推.

 

动力学节点

 

thinkingParticles提供另外一种的刚体物理运算Operator. 它真的会判断物件的形状, 除了精确性以外, PhysX operator还提供对AGEIA Dynamics system完整的支援, 也会支援将来的PhysX晶片 . 这个硬体会大大地加速刚体碰撞的运算!

尽管你可以在单一个DynamicSet 裡面放多个PhysX collision operators, 我们还是建议你尽量用少一点的operators, 因為这会消耗大量的内存.

Shape Joint Node会动态地在两个粒子之间產生链结, 这个node可以利用Shape Collision node的碰撞资料, 有就是能支援完整的自身碰撞与其他物件的碰撞.

thinkingParticles提供独特的Shape Collision Operator 它真的会去考虑粒子的形状动态的碰撞侦测引擎, 当与TP知名的动态碎裂系统一起使用的时候, 你可以產生惊人的动态效果, 快速且有效.

Shape Collision operator最强力的背书就是知名的卖座电影2012 电影裡面有很多爆破特效

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就会断开!

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也必须重新產生.

帮助节点

这是一个很先进的helper nodes, 要与MatterWaves operator以起运作, 取得当前物件的表面贴图顏色. 当与pyrocluster一起使用时, TexmapColor会使用UVW 或Position input 决定顏色, 让你可以控制volumetrics color的顏色, 根据物件表面的顏色来决定.

另外一种应用是根据物件的贴图顏色来產生粒子效果.


Get Direction Helper是个数学相关的operator, 当你需要取得粒子方向的资讯旧可以用到他, 这个operator的主要目的是给你能从单一个Alignment input资料串流取得确实的方向资讯.

intersect Helper Node是用来取得粒子在空间中运动的交错点, 这个交错的计算是藉由发出射线, 根据粒子移动的方向, 或是使用者定义的向量来决定. 这个Node常被用来计算在表面的衝击点的位置.

Path Position helper很适合用在你需要把粒子放在path上的时候, 这个path可以是spline或是mesh上选取的edge.

PPass节点

PSearch node可以用在很多进阶的特效, 当你需要找到最接近或是最远的粒子, 根据你设定的搜寻范围, 而这个node也提供了许多的output, 让你可以取得所有的能查询到的数据, 用在下一步的特效.

PPass Operator的功能就像Group operator一样, 而Group operator是从thinkingParticles 1.0就有的. 但是, 不像旧的Group operator, PPass提供先进的功能, 容易控制粒子的群组, 它会有下拉式的选单, 让你在任何时候改变粒子群组, 让你不需要重新串接或是删除原本的设定.

PPassAB Operator其实就跟TP的Group operator很像. PPassAB的最大优点是能够计算不同群组的粒子之间的互动, 这是在TP裡面唯一能够產生非常最佳化的粒子互动, 碰撞效果. 计算两个不同群组的粒子的距离, 也就只能用PPassAB来计算.

Iterator node 是TP的次世代类型的节点, 它让粒子的设定能够有迭代器(iterator) 或是loop的效果 ,很类似程式语言裡面的Do 或是For Loop. 这个节点让你可以call节点网络好几次.

这个节点的应用面很广, 可以用在非常复杂的设计.

由时候你会需要选取一个或是好几个粒子, 套用某种效果, 或是删除这些粒子. TP提供几种方法进行这项需求, 其中一种方法就是PSelection Operator.

為了要用这个operator 使用者必须要选取一个或是多个particle IDs. 当这个operator啟动时, 所有连接到这个PSelection的operator都会针对这几个被选到的粒子进行操作.

粒子节点(粒子间会相互作用)

Repulsion Bounce能够让你產生两个不同Group粒子之间的动态效果, 当这个Operator或得true的串流的时候, 就会啟动粒子的反弹或是旋转. 很多状况你会拿来作為PPassAB Initiator当中的Distance Condition搭配Repulsion Bounce operator所使用.

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的参照粒子.

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很像!

当你要设定非常复杂的粒子系统时, 储存资料是最重要的工作. Memory node就是要满足这样的需求.

Memory node最大的功能是提供DynamicSet的拾取功能, 让你随时都能使用DynamicSet, 也可以针对每个粒子储存数值.

Tip:这个节点相当于4.0以前的DataChannel升级版,虽然现在还是可以去使用DC但是官方还是推荐使用Memory.这两个节点有很大的.
DC能够存储的类型比较少,而且是直接存储于粒子组上的,会存在一个层级的关系.而升级后的Memory会运行用户存储基本上TP里面所有种类的数据,然后再整所有Set里面来回传递.
他们还有一个很大的区别在于,DC是能够缓存出去的,而Memory是不可以的,也就是说,当你缓存了一个有Memory的DynSet在读取缓存来使用的时候,之前通过Memory存储的数据会丢失掉

其他节点

MatterWaves Operator让你根据多个材质產生惊人的粒子特效, 透过材质你可以控制粒子. MatterWaves是非常先进的粒子系统, 这种功能你只会在高阶的动画软体裡面找到.

為了保证能无缝地与3ds max整合在一起, 我们用了很多新的程式撰写技术, 其中一个技术称為Multi-Layer Particle Control (MLPC). 这个技术让你可以產生粒子, 基於多个材质贴图, 就是这个技术让MatterWaves Operator与其他產品有所不同.

thinkingParticles提供进阶的绘製的功能—- Paint Operator, 让你可以在物件表面绘製粒子, 每个在物件表面產生的粒子都会產生顏色或是材质效果, 碰撞侦测的运算是精确的, 它也会判断是否有碰撞到. 如果是串接到on的话, 為了要在物件表面绘製, 你必须要使用特殊的TP_TexMap texture map, 这个纹理贴图是专為在物件表面处理粒子碰撞所设计的.

Blurp Operator的功能是要让你快速產生粒子的morph animations. 这个Operator最主要的概念是建立复杂的分解与重组的效果, 这个特效常常在吸血鬼这类的角色上面出现, 例如吸血鬼分解成一群的蝙蝠飞走, 然后又重组变成咆哮的恶犬.

这类的效果用其他的operator很难做到, 但是如果用Blurp Operator就完全没有问题, 这能大大加速您的流程.

ParamBlock Operator可能是最强大的 最有变化性的operator

这个operator让你有无数次的存取每个单一参数, 更重要的事, 它让你可以建立任何数量的input data 或是output data 根据你选取的物件参数, 这些参数可以接着用在其他的operators或是conditions条件, 用来驱动其他的operators.

这个operator一个有用的地方是能够根据粒子的位置或是半径改变顏色或大小. 另外一个例子是, 利用选取物件的材质顏色或是高光强度来驱动粒子的发射率….有无限种的可能性.

ABomb是一个独特的粒子operator, 让你可以添加类似流体的动态效果. 当使用预设值时, 这个operator会產生经典的蕈状云的效果. 但是, 如果修改一下参数也可以產生复杂的流体动态效果, 可以用来模拟出烟雾或是烟尘在地面互动的感觉.

InGroupCondition In Group Condition是测试粒子是不是包含在某个group裡面, 当这个条件為真, 就回送出一个true的output.

进阶的粒子动画必须要能够把让粒子在空间中对齐某方向. Alignment Operator一般可以用在飞行的鸟群, 可以让鸟永远面向他飞行的方向.

Bubble Motion Operator有其特殊用途, 能够增加粒子的二级动态效果, 例如可以製作海中泡泡升起扭动的效果.