粒子磁盘缓存

 
 
 

指定存储缓存文件的位置

Maya 有一个用于粒子的工作区目录。默认情况下,该目录的名称为 particles。可以使用“项目编辑器”(Project Editor)指定工作区粒子目录,就像指定所有其他工作区目录一样。

如果使用的是早期版本 Maya 中的旧工作区,那么 Maya 会在您第一次创建粒子磁盘缓存时创建粒子目录。

磁盘缓存文件存储在粒子目录的子目录中。通过在“创建粒子磁盘缓存选项”(Particle Render Cache Options)窗口的“缓存目录”(Cache Directory)框中输入名称,可以指定要使用的子目录名称(请参见设置粒子磁盘缓存选项)。在执行每个新缓存操作之前,Maya 会自动删除存在于指定子目录中的所有缓存文件。

确定帧范围

如果 Maya 找不到给定帧的缓存文件,但找到大于和小于它正计算的当前帧的那些帧的缓存文件,则它会在这些帧之间插值。如果帧差很大,则会看到插值的结果,而不是逐帧解算的结果。

在简单情形下,为了计算给定帧,Maya 通常仅需要该帧的粒子缓存文件。但是,为了解析表达式、刚体运动、运动模糊等,Maya 可能需要访问某个其他帧处粒子的状态。如果不确定,建议缓存出所有帧。例如,如果要在帧 100 处开始渲染,请同时缓存帧 100 之下的所有帧。

创建粒子磁盘缓存

在创建了粒子磁盘缓存之后,Maya 会使用缓存的粒子数据,而不管对场景进行了哪些更改,直到显式通知它不要使用为止

例如,如果缓存场景,然后对粒子对象应用重力场,则不会从该场看到任何效果,因为 Maya 使用缓存的粒子运动。若要看到该效果,必须禁用“使用粒子磁盘缓存”(Use Particle Disk Cache)(请参见编辑粒子磁盘缓存设置)。

但是,如果所做的更改不会改变每粒子属性(例如,将渲染类型从滴状更改为条纹),则将看到所做的更改,而无需禁用“使用粒子磁盘缓存”(Use Particle Disk Cache)

提示创建粒子磁盘缓存之前,请确保粒子形状名称是不同于其他粒子形状名称的唯一名称。因为磁盘缓存文件将使用粒子形状名称,所以如果将相同的名称用于其他粒子形状,则创建磁盘缓存时,将无法获得正确的结果。

建议在创建粒子磁盘缓存之前为场景命名;否则,Maya 会将粒子保存在名为 untitled 的目录中。

创建粒子磁盘缓存

  1. 选择解算器 > 创建粒子磁盘缓存(Solvers > Create Particle Disk Cache)

    Maya 会使用当前时间滑块播放范围从头到尾播放一次场景,然后写出缓存文件。在该播放过程中,Maya 不会重新绘制屏幕。如果要缓存一个不同的范围,可以更改时间滑块的当前范围,或者启用“使用渲染设置范围”(Use render settings range)(请参见使用渲染设置范围)。

    Maya 必须从头到尾播放一次场景才能创建缓存。如果不希望等待播放完成,可以通过按 Esc 键中断它,但这样不会创建缓存。

  2. 创建缓存之后,请保存场景,以便对“粒子渲染缓存选项”(Particle Render Cache Option)窗口所进行的所有设置能够随场景一起保存。否则,Maya 可能不知道要查找缓存,或者可能找不到缓存。

    使用上述方式创建缓存时,Maya 会为场景中的所有粒子创建缓存。如果要缓存某些粒子对象而非其他粒子对象,请参见缓存单个粒子对象

    注意

    请确保在创建缓存后保存场景。否则,Maya 在批渲染时不会知道该缓存。

设置粒子磁盘缓存选项

可以在创建缓存之前设置下列粒子磁盘缓存选项。这些选项会影响所有后续的缓存操作。

若要设置粒子磁盘缓存选项,请执行下列操作:

  1. 选择解算器 > 创建粒子磁盘缓存(Solvers > Create Particle Disk Cache) >
  2. 设置下列选项:

编辑粒子磁盘缓存设置

编辑粒子磁盘缓存设置

  1. 选择解算器 > 编辑过采样或缓存设置(Solvers > Edit Oversampling or Cache Settings)

    将显示“dynGlobals”节点对应的“属性编辑器”(Attribute Editor)

  2. “粒子磁盘缓存”(Particle Disk Cache)区域中,设置这些设置。请参见粒子磁盘缓存
    注意

    请确保编辑其中任何值之后保存场景。否则,Maya 在批渲染时不会知道这些编辑。

播放不同的缓存

可以使用粒子磁盘缓存来为同一个场景创建不同的缓存。这样可以创建并快速播放场景上的变化。

创建和播放不同的缓存

  1. 创建场景并为其命名。
  2. 选择解算器 > 创建粒子磁盘缓存(Solvers > Create Particle Disk Cache) >
  3. “缓存目录”(Cache Directory)输入名称,或保留默认的名称,即场景名称。
  4. 单击“创建”(Create)以创建缓存。
  5. 对粒子进行任何更改。
  6. 选择解算器 > 创建粒子磁盘缓存(Solvers > Create Particle Disk Cache) >
  7. “缓存目录”(Cache Directory)输入新名称,然后单击“创建”(Create)
  8. 继续该过程以创建所需数量的缓存。
  9. 若要为播放选择缓存,请选择解算器 > 编辑过采样或缓存设置(Solvers > Edit Oversampling or Cache Settings),然后在“缓存目录”(Cache Directory)框中输入缓存名称。
  10. 按播放按钮可从指定的缓存处查看场景播放。

重新创建缓存

创建了缓存之后,Maya 会一直使用该缓存,直到通知它不要使用为止。它会忽略该粒子对象上的发射、力等方面的所有更改。

如果要更改场景中改变每粒子属性的事物,则必须重新创建缓存,才能获得正确的渲染。仅当选择“创建粒子磁盘缓存”(Create Particle Disk Cache)时,Maya 才会写出磁盘缓存。该菜单项不会启用“缓存状态”。这是内存缓存与磁盘缓存之间的重要区别。Maya 不会自动更新或重新创建磁盘缓存。

重新创建缓存

  1. 选择解算器 > 创建粒子磁盘缓存(Solvers > Create Particle Disk Cache)

如果所做的更改不会改变每粒子属性,则不需要重新创建缓存。例如,可以将粒子形状的渲染类型从滴状更改为云,保存文件,然后重新渲染。或者可以更改已设定关键帧的 colorRed/colorBlue/colorGreen 属性。在这两个示例中,并不需要重新创建缓存,因为所涉及的属性不是每粒子属性。

但是,请务必小心,因为诸如 colorRed 之类的属性可能会间接影响每粒子属性。在先前的示例中,如果在某些粒子对象上有每粒子表达式,且这些对象利用了渲染类型或 colorRed 作为输入,则表达式的结果会受到影响,因此会需要重新创建缓存。

粒子磁盘缓存文件

Maya 会为每个帧保存每个粒子形状的缓存文件。如果启用过采样,则会根据过采样速率在一个帧内不同的时间保存多个磁盘缓存。这些二进制文件的扩展名为 .pdc,它代表粒子数据缓存。Maya 使用 dynExport 命令来编写这些文件。

无法阅读 .pdc 文件。如果要输出可以阅读的粒子数据文件,请参见联机文档中的 dynExport 命令了解有关输出 .pda 和 .pdb 文件的信息。有关编写自己的阅读器的信息,请参见附录使用 PDC 文件格式

删除缓存文件

无法从 Maya 内删除缓存文件或目录。请使用操作系统删除它们。

缓存提示

渐变

如果要按渐变设置每粒子渲染属性的动画,并且更改这些渐变,则即使已启用缓存,也将在播放中看到该更改。这同样适用于诸如 pointSize 之类的硬件显示/渲染属性中的更改。为了避免混淆,请在禁用“使用粒子磁盘缓存”(Use Particle Disk Cache)属性之后再对场景进行更改,而且就在渲染之前重新创建缓存。

如果要使用表达式设置任何属性的动画,或者使用渐变设置 rampPosition、rampVelocity 或 rampAcceleration 的动画,那么只要已启用缓存,在播放中将看不到对这些表达式或渐变所做的任何更改。禁用“使用粒子磁盘缓存”(Use Particle Disk Cache)

粒子与刚体的碰撞

如果具有一个由粒子碰撞驱动的刚体,并对粒子进行磁盘缓存,则刚体将不再能正确地进行求值。实际上,缓存会去掉动力学属性,这使刚体能够进行求值,且它们无法再检测到碰撞。若要缓存这样的场景,请首先烘焙刚体(请参见下面的烘焙刚体),然后对粒子进行磁盘缓存。相同的限制和相同的解决方法也适用于内存中的缓存。

烘焙刚体

粒子磁盘缓存始终仅适用于粒子。它不适用于刚体。大多数情况下,刚体可以计算其位置,而无需执行预备运行。如果在该区域中遇到任何问题,可以通过使用 bakeResults 命令烘焙刚体来解决它们。

例如,要烘焙帧 1 到 100 的 rigidBody1,请执行以下操作:

bakeResults -t "1:100" -simulation true rigidBody1;

不能使用 bakeResults 命令烘焙粒子运动。它烘焙动画通道(如 translateX/Y/Z),而非粒子位置。

即使未烘焙的刚体确实会导致预备运行,那么如果已缓存粒子,该预备运行将进行得更快,因为粒子是从磁盘缓存加载的,而不是重新计算出来的。

分两部分缓存序列

可能会发现单独地缓存序列的两个部分很有必要。例如,如果在一个位置缓存帧 1 到 45,并在另一个位置缓存帧 46 到 90,则必须确保两个缓存“排成一行”,这样从 45 到 46 就不会存在不连续。

确保第一次缓存的动画和动力学与第二次的一致。确保您未添加或更改任何内容,或为您更改了某些内容。

特别是,如果有使用 MEL rand() 函数的表达式,则必须确保正确地重新生成表达式的种子(请参见手册的“MEL 和表达式”部分中的重新生成随机性重新生成随机性)。

缓存单个粒子对象

使用解算器 > 创建粒子磁盘缓存(Solvers > Create Particle Disk Cache)可缓存场景中的所有粒子对象。可以从命令行使用 dynExport 命令缓存指定对象(有关 dynExport 命令的信息,请参见联机命令文档)。

通过使用操作系统删除不需要从缓存读取的所有对象的缓存文件,也可以获得相同的结果。

仅缓存某些属性

默认情况下,会缓存所有属性。但是,可以使用 dynExport 命令仅缓存某些属性(有关 dynExport 命令的信息,请参见联机命令文档)。