使用特定粒子

 
 
 

每粒子属性包含每个对象粒子的属性值。例如,“rgbPP”属性包含每个粒子的“rgbPP”值的值。

每个粒子都具有唯一的数值粒子标识符。粒子的标识符存储在粒子对象的每粒子“particleId”属性中。创建粒子对象的粒子时,Maya 按连续顺序(从 0 开始)为每个粒子指定 particleId。

例如,假设通过单击工作区中的位置来使用“粒子工具”(Particle tool)创建五粒子对象。第一次单击鼠标会创建 particleId 为 0 的粒子,第二次单击时会创建 particleId 为 1 的粒子,第三次单击时会创建 particleId 为 2 的粒子,以此类推。

发射器发射粒子时,Maya 按连续顺序(从第一个发射的粒子开始)指定 particleId 编号。第一个发射的粒子的 particleId 为 0,第二个发射的粒子的 particleId 为 1,第三个发射的粒子的 particleId 为 2,以此类推。

可以使用 particleId 属性将每粒子属性值指定给特定粒子。

示例

假设您已使用“粒子工具”(Particle tool)创建 9 个粒子的栅格,名为“ColorGrid”。在“属性编辑器”(Attribute Editor)中,您已将粒子的“粒子渲染类型”(Particle Render Type)设定为“球体”(Spheres)。您已选择“着色 > 对所有项目进行平滑着色处理”(Shading > Smooth Shade All)来显示着色的粒子。

您可以根据它们的 particleId 为粒子设置不同的颜色。

若要根据 particleId 设置粒子的颜色,请执行下列操作:

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

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

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

    该操作会添加名为“rgbPP”的每粒子属性,控制每个粒子的红、绿和蓝颜色方案。

    未选择粒子时,这些粒子会在您添加“rgbPP”属性之后变为黑色。添加 rgbPP 属性会禁用粒子的默认颜色,并为它们赋值 <<0,0,0>>。

  4. “属性编辑器”(Attribute Editor)中,从“粒子渲染类型”(Particle Render Type)菜单中选择“数值”(Numeric)

    显示每个粒子的 particleId,而不是球体:

  5. “表达式编辑器”(Expression Editor)中选择“ColorGridShape”,输入该创建表达式:
    if (particleId <= 2) 	rgbPP = <<1,0,0>>; else if ((particleId > 2) && (particleId < 6)) 	rgbPP = <<1,1,1>>; else rgbPP = <<0,0,1>>;
    

    创建表达式在回放动画时执行。粒子尚未显示颜色指定。“数值”(Numeric)“粒子渲染类型”(particle render type)会忽略指定给“rgbPP”的颜色。

  6. “属性编辑器”(Attribute Editor)中,再次将粒子的“粒子渲染类型”(Particle Render Type)设定为“球体”(Spheres)

    粒子的左列、中间列和右列的颜色分别为红色、白色和蓝色:

    表达式的第一个语句指定 particleId 小于或等于 2 的所有粒子为红色。在 RGB 颜色方案中,值 <<1,0,0>> 为红色。

    第二个语句指定 particleId 大于 2 且小于 6 的所有粒子为白色。在 RGB 颜色方案中,值 <<1,1,1>> 为白色。

    第三个语句指定不满足以上两个语句条件的所有粒子为蓝色。也就是说,particleId 大于或等于 6 的所有粒子变为蓝色。在 RGB 颜色方案中,值 <<0,0,1>> 为蓝色。

    以下步骤介绍了另一种根据 particleId 属性控制属性的常用方法。

若要将一半粒子的颜色设置为红色,另一半粒子的颜色设置为蓝色,请执行以下操作:

  1. 输入以下运行时表达式:
    if ((particleId % 2) == 0) 	rgbPP = <<1,0,0>>; else rgbPP = <<0,0,1>>;
    
  2. 播放场景。

    运行时表达式在播放动画时执行每个帧。particleId 为偶数的粒子为红色。particleId 为奇数的粒子为蓝色。

    第一个语句使用模除运算符 (%) 计算 particleId 除以 2 的余数。然后,将余数和 0 进行比较。如果余数等于 0,那么语句指定粒子为红色。值 <<1,0,0>> 为红色。

    如果模除操作的余数不等于 0,那么第二个语句指定粒子为蓝色。值 <<0,0,1>> 为蓝色。例如,particleId 0 除以 2 等于 0,余数为 0。由于余数为 0,因此 particleId 为 0 的粒子接收红色。

    particleId 1 除以 2 等于 0,余数为 1。由于余数为 1,因此 particleId 为 1 的粒子接收蓝色。

    particleId 2 除以 2 等于 1,余数为 0。由于余数为 0,因此 particleId 为 1 的粒子接收蓝色。对对象中的每个粒子执行该表达式。

    结果是,particleId 为偶数的粒子变为红色,particleId 为奇数的粒子变为蓝色。

  3. 回放动画。

    执行创建表达式。正如针对上述表达式的描述,粒子变为红色、白色和蓝色。

  4. 播放动画。

    运行时表达式执行每个帧。播放动画时粒子为红色和蓝色。

    注意程序员注意事项:

    无法通过编程语言中常用的阵列索引表示法将值指定给各个粒子。

    例如,假设您已为由三个粒子组成的对象创建“opacityPP”属性。您不能按该示例所示指定这些值:

    opacityPP[0] = 0.3;
    opacityPP[1] = 0.5;
    opacityPP[2] = 1;