我们在 Maya DVD 的 ExploreMe/particles 目录下提供了 MEL 脚本 (applySprite.mel),以便更轻松地为精灵指定图像序列。若要使用 MEL 脚本,请参见精灵。
如果要手动为精灵指定图像序列(而不使用 MEL 脚本),可以使用下列过程。
这些属性指定可在序列中使用的文件。这些属性不会选择实际缓存文件。可以通过在稍后的步骤中设定“精灵数量”(Sprite Num)或“spriteNumPP”属性来完成该操作。
“序列开始”(Sequence Start)和“序列结束”(Sequence End)指定可用于序列的第一个和最后一个文件的文件扩展名编号。“序列增量”(Sequence Increment)设定每个帧可用于序列的频率,例如每隔一帧、每隔两帧等等。
例如,若要使用以 Smoke.0 开始且其中包含 30 个文件的序列中的每个文件,则可将“序列开始”(Sequence Start)设定为 0,将“序列结束”(Sequence End)设定为 29,并将“序列增量”(Sequence Increment)设定为 1。若要按每隔一个文件的方式使用相同文件序列中的文件,则可将“序列增量”(Sequence Increment)设定为 2。换句话说,可以循环使用 Smoke.0、Smoke.2、Smoke.4 等。
如果在之前的步骤中为精灵添加了默认的“粒子渲染类型”(Particle Render Type)属性,Maya 将为粒子对象添加“精灵数量”(Sprite Num)属性。“精灵数量”(Sprite Num)设定了从“序列开始”(Sequence Start)、“序列结束”(Sequence End)和“序列增量”(Sequence Increment)指定的文件池中循环的文件。更具体地说,精灵数量是文件池的一个索引。
例如,假设您有一个以 Smoke.0 开始的文件序列。如果将“序列开始”(Sequence Start)设定为 0,将“序列结束”(Sequence End)设定为 29,并将“序列增量”(Sequence Increment)设定为 1,图像池和表示这些图像的“精灵数量”(Sprite Num)值将如下所示。
如果将“序列开始”(Sequence Start)设定为 0,将“序列结束”(Sequence End)设定为 29,并将“序列增量”(Sequence Increment)设定为 2,图像池和表示这些图像的“精灵数量”(Sprite Num)值将如下所示:
可以设定关键帧或编写表达式来对“精灵数量”(Sprite Num)设置动画,从而循环所有图像。对于每一帧,所有精灵会显示相同的图像。
例如,如果场景的开始帧为帧 0,并且您拥有 30 个图像(名称从 Smoke.0 到 Smoke.29),则可以使用创建表达式:
particleShape1.spriteNum = (frame % 30);
particleShape1.spriteNum = (frame % 30);
播放动画时,所有精灵会循环所有 30 个图像。从帧 0 到 29,精灵会显示 Smoke.0、Smoke.1、Smoke.2,直到 Smoke.29。在帧 30,循环会重复接下来的 30 个帧。
这会为粒子形状节点添加“逐粒子的 spriteNumPP”(per particle spriteNumPP)属性。“spriteNumPP”属性的工作原理与“精灵数量”(Sprite Num)类似,但您能够以每粒子为基础设定“spriteNumPP”。有关精灵数量的详细信息,请参见为所有精灵指定相同的图像序列。
例如,如果场景的开始帧为帧 0,并且您拥有 30 个图像(从 Smoke.0 到 Smoke.29),则可以使用创建表达式:
particleShape1.spriteNumPP = rand(0,30);
particleShape1.spriteNumPP = (particleShape1.spriteNumPP + 1) % 30;
回放动画(或发射精灵)时,创建表达式会为“particleShape1.spriteNumPP”属性指定一个介于 0 到 30 的随机数。因此,每个粒子会以从 30 个图像中随机选择的图像开始其精灵显示。
播放动画时,运行时表达式会执行每个帧(在动态计算之前或之后),并按照 1 的增量增加每个精灵的编号。这样,每个精灵就会循环图像的整个范围。为精灵显示 Smoke.29 后,动画将再次从 Smoke.0 开始循环图像。