使用碰撞

 
 
 

如果要使粒子对象与某个对象发生碰撞,可以编写表达式以在碰撞之后触发表达式语句。例如,可以更改碰撞粒子的颜色或不透明度。

若要准备编写表达式,请执行下列操作:

  1. “大纲视图”(Outliner)“Hypergraph”中选择粒子的“粒子形状”(particle shape)节点。
  2. “动力学”(Dynamics)菜单栏选择粒子 > 粒子碰撞事件编辑器(Particles > Particle Collision Event Editor)

    将显示“粒子碰撞事件”(Particle Collision Events)窗口。

  3. 单击“创建事件”(Create Event)

    这会将事件属性添加到选定“粒子形状”(particle shape)节点。“表达式编辑器”(Expression Editor)会在“属性”(Attributes)列表中显示添加的事件属性。

    关闭“粒子碰撞事件”(Particle Collision Events)窗口。

若要编写表达式,请执行下列操作:

  1. 选择碰撞粒子的“粒子形状”(particle shape)节点。
  2. 使用碰撞粒子形状节点的这些任意属性的值编写运行时或创建表达式:
    长名称 短名称 说明 数据类型

    事件

     

    包含对象中的每个粒子已碰撞某物的次数(基于每粒子)。

    浮点数组

    eventCount

    evc

    对象的所有粒子发生的事件总数量。

    整数

    eventTest

    evt

    如果自上次表达式或 MEL getAttr 命令读取 eventTest 值后事件已出现,则为 True。

    布尔

    eventCounteventTest 是静态属性。在您创建粒子对象后,“粒子形状”(particle shape)节点会立即包含它们。尽管它们不会出现在“表达式编辑器”(Expression Editor)中,但您可以在表达式中使用其值。必须首先按如上所述创建事件属性。

示例

假定您已创建了一个名为“Peas”的五粒子对象,该对象在重力作用下降落并与平面发生碰撞。

可以在第一个粒子撞击平面时使这些粒子变为红色。

  1. 选择“着色 > 对所有项目进行平滑着色处理”(Shading > Smooth Shade All)

    为在以后使用表达式设置粒子颜色时显示正确的粒子颜色,需要此步骤。

  2. “大纲视图”(Outliner)“Hypergraph”中选择“PeasShape”
  3. “动力学”(Dynamics)菜单栏中,选择粒子 > 粒子碰撞事件编辑器(Particles > Particle Collision Event Editor)
  4. “粒子碰撞事件”(Particle Collision Events)窗口中,单击“创建事件”(Create Event),然后关闭此窗口。

    这会将一个事件属性添加到“PeasShape”中。

  5. “属性编辑器”(Attribute Editor)“添加动态属性”(Add Dynamic Attributes)部分,单击“颜色”(Color)

    将显示“粒子颜色”(Particle Color)窗口。

  6. 选择“添加每粒子属性”(Add Per Particle Attribute),然后单击“添加属性”(Add Attribute)

    这会添加一个名为“rgbPP”的每粒子属性。此属性控制每个粒子的红、绿和蓝颜色方案。

    粒子在您添加“rgbPP”属性后变为黑色。添加“rgbPP”属性会禁用粒子的默认颜色,并为其提供值 <<0,0,0>>。

  7. “表达式编辑器”(Expression Editor)中选择了“PeasShape”后,创建此运行时表达式(在动力学计算之前或之后):
    if (event == 1)
    	rgbPP = <<1,0,0>>;
    else if (event == 2)
    	rgbPP = <<0,1,0>>;
    else if (event >= 3)
    	rgbPP = <<0,0,1>>;
    else rgbPP = <<1,1,1>>;
    
  8. 回放动画。

    在回放时,粒子是黑色的。粒子具有默认的黑色 rgbPP 颜色,因为该对象不存在任何创建表达式。

  9. 播放动画。

    粒子朝向平面降落。运行时表达式在每个帧播放时执行。事件属性是每粒子属性。这并不明显,因为其名称的最后两个字符不是 PP。

    由于事件包含每个粒子的运行时碰撞计数,因此在第一次与平面发生碰撞前,事件为每个粒子包含 0。在第一次发生碰撞后,最终 Else 语句才会执行:

    else rgbPP = <<1,1,1>>;
    

    因为事件不等于 1、2、3 或大于 3 的数字,所以该语句会执行。RGB 颜色方案中的向量 <<1,1,1>> 表示白色。

    “PeasShape”的第一个粒子撞击平面时,Maya 将该粒子的事件属性设置为 1。这将触发执行第一个指定,以将碰撞粒子的 rgbPP 值设置为 <<1,0,0>>。在 RGB 颜色方案中,该向量值表示红色。(当红色等于 1,绿色等于 0,蓝色等于 0 时,结果颜色为红色)。

    该事件属性的值反映每次碰撞后帧中的碰撞计数。例如,如果粒子在第 10 帧与平面发生碰撞,则事件会在第 11 帧中更新。

    当其他粒子首次撞击平面时,它们也会在碰撞后变为红色。

    当事件等于 2 时,粒子在与平面发生第二次碰撞前保持红色。在第二次碰撞后,粒子会变为绿色。

    在第三次碰撞后,当事件等于或大于 3 时,粒子变为蓝色。在动画播放时,每个粒子在所有后续碰撞中保持蓝色。

  10. 回放动画。

    粒子会再次变为黑色,因为它们收到默认的“rgbPP”值 <<0,0,0>>。再次播放动画时,与以前一样,这些粒子以相同顺序变为白色、红色、绿色和蓝色。

    通过为粒子指定除黑色之外的颜色,可以优化在回放时显示的帧的动画。例如,可以使用以下两种方法在回放时为粒子指定白色: