为精灵指定图像序列

 
 
 

我们在 Maya DVD 的 ExploreMe/particles 目录下提供了 MEL 脚本 (applySprite.mel),以便更轻松地为精灵指定图像序列。若要使用 MEL 脚本,请参见精灵

如果要手动为精灵指定图像序列(而不使用 MEL 脚本),可以使用下列过程。

为精灵指定图像序列

  1. 在工作区上方的菜单中,启用“着色 > 对所有项目进行平滑着色处理”(Shading > Smooth Shade All)“着色 > 硬件纹理”(Shading > Hardware Texturing)
  2. 选择粒子对象。
  3. “属性编辑器”(Attribute Editor)中,将“粒子渲染类型”(Particle Render Type)设定为“精灵”(Sprites)
  4. 若要添加默认的用于调整外观的“粒子渲染类型”(Particle Render Type)属性,请单击“为当前渲染类型添加属性”(Add Attributes For Current Render Type)按钮。
  5. 使用着色组创建 Lambert 材质,然后将该材质指定给选定粒子对象。有关详细信息,请参见“渲染”。
  6. “渲染”(Rendering)菜单集中选择“照明/着色 > 指定现有材质”(Lighting/Shading > Assign Existing Material),以在“属性编辑器”(Attribute Editor)中显示“Lambert”节点。
  7. “属性编辑器”(Attribute Editor)“公用材质属性”(Common Material Attributes)区域,单击“颜色”(Color)滑块右侧的贴图按钮。
  8. “创建渲染节点”(Create Render Node)窗口中,单击“文件”(File)按钮创建纹理文件节点。
  9. “属性编辑器”(Attribute Editor)“文件属性”(File Attributes)区域,单击“图像名称”(Image Name)框右侧的文件浏览器按钮。
  10. 选择序列中的第一个文件,然后单击“打开”(Open)
    重要信息

    用作精灵的图像文件必须具有文件扩展名,格式为 file.n,而不是 file.000n(以零填充的扩展名)。

  11. “交互式序列缓存选项”(Interactive Sequence Caching Options)区域,启用“使用交互式序列缓存”(Use Interactive Sequence Caching)
  12. 指定“序列开始”(Sequence Start)“序列结束”(Sequence End)“序列增量”(Sequence Increment)

    这些属性指定可在序列中使用的文件。这些属性不会选择实际缓存文件。可以通过在稍后的步骤中设定“精灵数量”(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 等。

  13. 启用“使用图像序列”(Use Image Sequence)
  14. 如果要为所有精灵指定相同的图像序列,请执行为所有精灵指定相同的图像序列中的步骤。如果要为每个精灵指定不同的图像序列,请执行为每个精灵指定不同的图像序列中的步骤。

为所有精灵指定相同的图像序列

如果在之前的步骤中为精灵添加了默认的“粒子渲染类型”(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)值将如下所示。

图像 精灵数量

Smoke.0

1

Smoke.1

2

Smoke.2

3

Smoke.3

4

Smoke.29

30

如果将“序列开始”(Sequence Start)设定为 0,将“序列结束”(Sequence End)设定为 29,并将“序列增量”(Sequence Increment)设定为 2,图像池和表示这些图像的“精灵数量”(Sprite Num)值将如下所示:

图像 精灵数量

Smoke.0

1

Smoke.2

2

Smoke.4

3

Smoke.6

4

Smoke.28

15

可以设定关键帧或编写表达式来对“精灵数量”(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 个帧。

有关编写表达式的详细信息,请参见“表达式”。

为每个精灵指定不同的图像序列

  1. 选择粒子形状节点后,打开“属性编辑器”(Attribute Editor)“添加动态属性”(Add Dynamic Attributes)区域,然后单击“常规”(General)按钮。
  2. “添加属性”(Add Attribute)窗口中,单击“粒子”(Particle)选项卡,然后选择“spriteNumPP”。单击“确定”(OK)

    这会为粒子形状节点添加“逐粒子的 spriteNumPP”(per particle spriteNumPP)属性。“spriteNumPP”属性的工作原理与“精灵数量”(Sprite Num)类似,但您能够以每粒子为基础设定“spriteNumPP”。有关精灵数量的详细信息,请参见为所有精灵指定相同的图像序列

  3. 编写创建和运行时表达式,以对粒子形状节点的“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 开始循环图像。

    有关详细信息,请参见手册的“MEL 和表达式”部分