每粒子属性包含每个对象粒子的属性值。例如,“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 设置粒子的颜色,请执行下列操作:
选择“ColorGrid”。
在“属性编辑器”(Attribute Editor)的“添加动态属性”(Add Dynamic Attributes)部分,单击“颜色”(Color)。
将显示“粒子颜色”(Particle Color)窗口。
选择“添加每粒子属性”(Add Per Particle Attribute),然后单击“添加属性”(Add Attribute)。
该操作会添加名为“rgbPP”的每粒子属性,控制每个粒子的红、绿和蓝颜色方案。
未选择粒子时,这些粒子会在您添加“rgbPP”属性之后变为黑色。添加 rgbPP 属性会禁用粒子的默认颜色,并为它们赋值 <<0,0,0>>。
在“属性编辑器”(Attribute Editor)中,从“粒子渲染类型”(Particle Render Type)菜单中选择“数值”(Numeric)。
显示每个粒子的 particleId,而不是球体:
在“表达式编辑器”(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”的颜色。
在“属性编辑器”(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 属性控制属性的常用方法。
若要将一半粒子的颜色设置为红色,另一半粒子的颜色设置为蓝色,请执行以下操作:
输入以下运行时表达式:
if ((particleId % 2) == 0) rgbPP = <<1,0,0>>; else rgbPP = <<0,0,1>>;
播放场景。
运行时表达式在播放动画时执行每个帧。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 为奇数的粒子变为蓝色。
回放动画。
执行创建表达式。正如针对上述表达式的描述,粒子变为红色、白色和蓝色。
播放动画。
运行时表达式执行每个帧。播放动画时粒子为红色和蓝色。
注意程序员注意事项:
无法通过编程语言中常用的阵列索引表示法将值指定给各个粒子。
例如,假设您已为由三个粒子组成的对象创建“opacityPP”属性。您不能按该示例所示指定这些值:
opacityPP[0] = 0.3; opacityPP[1] = 0.5; opacityPP[2] = 1;