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 会使用当前时间滑块播放范围从头到尾播放一次场景,然后写出缓存文件。在该播放过程中,Maya 不会重新绘制屏幕。如果要缓存一个不同的范围,可以更改时间滑块的当前范围,或者启用“使用渲染设置范围”(Use render settings range)(请参见使用渲染设置范围)。
Maya 必须从头到尾播放一次场景才能创建缓存。如果不希望等待播放完成,可以通过按 Esc 键中断它,但这样不会创建缓存。
使用上述方式创建缓存时,Maya 会为场景中的所有粒子创建缓存。如果要缓存某些粒子对象而非其他粒子对象,请参见缓存单个粒子对象。
可以使用粒子磁盘缓存来为同一个场景创建不同的缓存。这样可以创建并快速播放场景上的变化。
创建了缓存之后,Maya 会一直使用该缓存,直到通知它不要使用为止。它会忽略该粒子对象上的发射、力等方面的所有更改。
如果要更改场景中改变每粒子属性的事物,则必须重新创建缓存,才能获得正确的渲染。仅当选择“创建粒子磁盘缓存”(Create Particle Disk Cache)时,Maya 才会写出磁盘缓存。该菜单项不会启用“缓存状态”。这是内存缓存与磁盘缓存之间的重要区别。Maya 不会自动更新或重新创建磁盘缓存。
如果所做的更改不会改变每粒子属性,则不需要重新创建缓存。例如,可以将粒子形状的渲染类型从滴状更改为云,保存文件,然后重新渲染。或者可以更改已设定关键帧的 colorRed/colorBlue/colorGreen 属性。在这两个示例中,并不需要重新创建缓存,因为所涉及的属性不是每粒子属性。
但是,请务必小心,因为诸如 colorRed 之类的属性可能会间接影响每粒子属性。在先前的示例中,如果在某些粒子对象上有每粒子表达式,且这些对象利用了渲染类型或 colorRed 作为输入,则表达式的结果会受到影响,因此会需要重新创建缓存。
Maya 会为每个帧保存每个粒子形状的缓存文件。如果启用过采样,则会根据过采样速率在一个帧内不同的时间保存多个磁盘缓存。这些二进制文件的扩展名为 .pdc,它代表粒子数据缓存。Maya 使用 dynExport 命令来编写这些文件。
无法阅读 .pdc 文件。如果要输出可以阅读的粒子数据文件,请参见联机文档中的 dynExport 命令了解有关输出 .pda 和 .pdb 文件的信息。有关编写自己的阅读器的信息,请参见附录使用 PDC 文件格式。
如果要按渐变设置每粒子渲染属性的动画,并且更改这些渐变,则即使已启用缓存,也将在播放中看到该更改。这同样适用于诸如 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 命令的信息,请参见联机命令文档)。