使用碎片和膨胀创建爆炸

该动画显示了一颗深水炸弹沉向一艘潜水艇,然后发生爆炸。一个粒子系统用于生成碎片,另一个粒子系统用于生成膨胀。按照之前粒子系统教程中所述,多个空间扭曲有助于控制粒子运动。

本教程中使用的动画技术:

完成时间:60 分钟

设置场景:

爆炸深水炸弹

将使用“粒子阵列”来从深水炸弹的表面发射粒子。“粒子阵列”具有一个选项,可用于从发射器对象的碎片生成粒子,因此它适用于建造爆炸模型。

创建粒子阵列:

  1. 在“创建”面板上,单击“几何体”,然后从下拉列表中选择“粒子系统”。

  2. 单击“粒子阵列”,然后在“顶”视口中拖动以创建“粒子阵列”图标。

    在“顶”视口中靠近深水炸弹创建的“粒子阵列”

调整粒子阵列参数:

  1. 在选定粒子阵列的情况下,转到“修改”面板。

  2. 在“基本参数”卷展栏的顶部,单击“拾取对象”按钮,然后通过在视口中单击 DepthCharge 对象来选择它。

    现在粒子阵列已设置为使用 DepthCharge 对象作为发射器。需要调整发射参数以使其与动画同步。

  3. 在“粒子生成”卷展栏中,将“发射开始”值设置为 200,“显示时限”设置为 301(正好在动画最后一帧之后),“寿命”设置为 101

    这些值保证发射的粒子会在动画期间保留在场景中。

  4. 在“粒子类型”卷展栏中,将粒子类型设置为“对象碎片”。

  5. 在下方的“对象碎片控制”组中,选择“碎块数目”(与默认值“所有面”相对),然后将“最小值”设置为 50

    此时,如果在视口中预览动画,可看见在第 200 帧处粒子从深水炸弹炸出,但是看不见任何碎片。粒子阵列仍然使用默认视口显示设置“十字叉”。可将其更改为“网格”来查看视口中的几何体。

  6. 转到“基本参数”卷展栏,并在“视口显示”组中,选择“网格”。

现在,如果在视口中播放动画,将看见粒子发射时显示的实际碎片。这是一个相当好的预览,从中可以知道渲染时碎片显示的情况。

线框视图中的碎片粒子

尽管在线框视口中并不是很明显,但是深水炸弹对象具有可见性轨迹,在第 200 帧之后会关闭炸弹。这是爆炸对象的标准技术。

此时的碎片运动适合于空间场景,但不适合于水下。它们并不旋转或下沉,而且发射后也不减速。这是一个细微点,但是它破坏了场景中的比例感。

若要解决这些碎片运动的问题,需要使用三个空间扭曲:“阻力”空间扭曲用于减慢粒子的速度,“重力”空间扭曲用于使粒子在水中下沉,以及已链接至深水炸弹对象的“重力”空间扭曲用于在爆炸后暂时将粒子向内吸入。

添加阻力空间扭曲以减慢深水炸弹碎片的速度:

  1. 在“创建”面板上,单击“空间扭曲”,然后从下拉列表中选择“力”。

  2. 单击“阻力”,然后在“顶”视口中拖动以创建“阻力”空间扭曲。

    在“顶”视口中创建的“阻力”空间扭曲

调整阻力空间扭曲参数:

  1. 在选定“阻力”空间扭曲的情况下,转到“修改”面板。

  2. 在“计时”组中,将“开始时间”设置为 200(粒子出生时间)、“结束时间”设置为 300(场景结束时间)。

  3. 在“阻尼特性”组中,默认情况下应选定“线性阻尼”。将“X 轴”、“Y 轴”和“Z 轴”值调整为 5.0%。

添加“重力”空间扭曲以使碎片下沉:

  1. 转回到“创建”面板的“空间扭曲”部分。单击“重力”,然后在“顶”视口中拖动以创建“重力”空间扭曲。

    默认情况下,该重力空间扭曲是平面。

  2. 将重力空间扭曲的“强度”值设置为 0.01

    在“顶”视口中创建的“重力”空间扭曲(指向远离用户的方向)

将空间扭曲绑定到粒子阵列:

  1. 单击“绑定到空间扭曲”。

  2. 从粒子阵列粒子系统拖至阻力空间扭曲,然后释放鼠标按钮。阻力空间扭曲应暂时高亮显示以表明绑定完成。

  3. 从粒子阵列粒子系统拖至平面重力空间扭曲,然后释放鼠标。类似于阻力扭曲,重力扭曲应暂时高亮显示。

  4. 从粒子阵列粒子系统拖至包围深水炸弹对象的球形重力空间扭曲,然后释放鼠标按钮。

    提示:如果不确定绑定操作是否成功,始终可以检查粒子阵列的修改器堆栈。完成这些绑定后,粒子阵列堆栈应类似下图所示:

现在如果预览动画,可看见粒子从深水炸弹向外炸开,但速度迅速下降(水比空气密度大)。然后它们向内朝深水炸弹吸入(爆炸由于周围水的压力而压缩),并最终开始下沉。

为动画使用关联

粒子朝爆炸源向内吸入,但仅持续短暂的时间。这是因为已对球形“重力”空间扭曲的“强度”参数设置了动画。

“强度”参数的功能曲线

利用参数关联功能,可使用“强度”动画控制爆炸本身(燃烧的气体),以及爆炸产生的光。使用“重力强度”控制所有三个成分(碎片运动、爆炸和光)可确保它们在动画中同步。

创建实际爆炸的几何体,并将其关联至“强度”参数:

  1. 转到“创建”面板并单击“几何体”。从下拉列表中选择“标准基本体”。单击“球体”,然后在“顶”视口中拖动以创建任意大小的球体。

  2. 转到第 200 帧,如果需要,移动球体使其在 DepthCharge 对象上居中。

  3. 右键单击该球体,并从四元参菜单选择“关联参数”(在右下方的“变换”区域中)。出现一系列弹出菜单。

  4. 从第一个弹出菜单中选择“对象(Sphere)”,然后选择“半径”。

    弹出菜单消失,光标现在连接到了一条关联线。

  5. 将鼠标从球体对象移动到球形重力空间扭曲(关联线随之移动),然后单击。出现另一个弹出菜单。

  6. 从新的弹出菜单中选择“对象(Gravity)”,然后选择“强度”。

    出现“参数关联”对话框。在此对话框中,可创建参数间的关系。这些关系可以为单向,即一个值影响另一个值,或为双向,即允许每个参数都影响另一个参数。

    将球体的“半径”关联至重力空间扭曲的“强度”后,此对话框将在左上方窗口显示第一个参数,在右上方窗口显示第二个参数。

需要做的第一件事是定义关系的方向;在本例中,方向为从重力空间扭曲的“强度”值到球体的“半径”值。还需要修改数值。从功能曲线中可以看到,“强度”值的范围为从零到 1。建造爆炸模型的球体必须大于此范围。通过参数关联,可倍增“强度”值以获取更大的值。

选择关联方向并调整值:

  1. 单击指向左侧(从“半径”到“强度”)的“控制方向”箭头。

    在对话框底部的 Gravity02 表达式文本框中,“半径”呈现灰色。“强度”将控制“半径”,但是“半径”不会影响“强度”。

  2. 在表达式的文本字段(在左下方,即球体轨迹下面)中,将文本 *25 附加至“强度”变量。此窗口中的最终文本应如下所示:强度*25。

  3. 单击“连接”。

    通过向“强度”值添加倍增,在“强度”达到 1 时球体的半径为 25 个单位。当“强度”等于 0 时,球体半径为 0 且球体不可见。在第 200 帧处,它会快速增大,然后到第 220 帧时缩小为 0。

  4. 关闭“参数关联”对话框。

设置照明的动画:

将使用同一种技术对链接至深水炸弹对象的泛光灯设置动画。目前其“倍增”值为 0,并且没有投射光。通过将“强度”值关联至泛光灯的“倍增”,灯光将随球体的增长与收缩而增强与衰减。

  1. H 键显示“选择对象”对话框。选择列表中的 Omni01,然后单击“选择”。

  2. 右键单击泛光灯,然后从四元菜单中选择“关联参数”。

  3. 从第一个弹出菜单中选择“对象(泛光灯)”,然后选择“倍增”。

  4. 将关联线从泛光灯拖至球形重力空间扭曲 (Gravity02),然后单击此空间扭曲。

  5. 从第二个弹出菜单中选择“对象(Gravity)”,然后选择“强度”。

  6. 在“参数关联”对话框中,单击指向左侧的“控制方向”箭头。

    现在已经把“强度”值连接到了“倍增”值。

  7. 在倍增表达式窗口中,将 *200 附加至“强度”变量,如下所示:强度*200。

  8. 单击“连接”。

    与球体的半径一样,现在泛光灯的“倍增”连接至重力空间扭曲的“强度”。当“强度”增加时,灯光的功率也随之增大。

    注意:作为常规照明技术,通常不希望将灯光的“倍增”增加过大,因为这会使颜色褪色。但是,对于爆炸而言,使颜色褪色正是希望得到的效果。

  9. 关闭“参数关联”对话框。

如果在着色视口中预览动画,则会看见深水炸弹炸开为碎片,球体向外扩张然后收缩至消失,泛光灯闪亮然后熄灭。

创建源自爆炸的膨胀

爆炸产生的膨胀冲击波可以增强动画的真实感。为了创建膨胀,需要使用粒子云,一种从对象体积或发射器图标发射粒子的粒子系统。

创建粒子系统以对膨胀建模:

  1. 在“创建”面板上,单击“几何体”,然后从下拉列表中选择“粒子系统”。

  2. 单击“粒子云”,然后在“顶”视口中拖动以创建粒子云发射器。释放鼠标按钮后,再次单击以设置发射器高度(如同创建长方体)。

  3. 在选定粒子云的情况下,转到“修改”面板。在“基本参数”卷展栏的“视口显示”组中,将“粒子数百分比”更改为 10%。

    默认情况下,粒子云显示其所有粒子,但如前所述,在视口中显示这么多粒子会大幅度减慢 3ds Max 的速度。

  4. 转到球体可见的帧。

  5. 在“粒子分布”组中选择“基于对象的发射器”(默认设置为“长方体发射器”)。

  6. 在“基于对象的发射器”组中,单击“拾取对象”,然后选择球体。

    现在已将球体指定为粒子云发射器。粒子将从对象的体积内部发射,而不是从对象的表面发射。

    将球体指定为其发射器后,在“顶”视口中创建的粒子云

接下来,需要设置几个基本参数。

调整膨胀设置:

  1. 在“粒子生成”卷展栏 >“粒子数量”组中,确保“粒子数量”单选按钮设置为“使用速率”。

  2. 在“粒子运动”组中,将“速度”值设置为 1.0。选择“方向向量”(而非“随机方向”),然后将“X”值设置为 0.0、“Z”值设置为 0.5

    这是告知膨胀粒子以恒定速率(在后面步骤中将更改)发射并沿 Z 轴移动:即在场景中垂直运动。

  3. 在“粒子计时”组中,将“发射开始”设置为 210,“发射停止”设置为 260。将“显示时限”值设置为 301,将“寿命”值设置为 101

    从第 210 帧(即爆炸的高峰期)到第 260 帧(爆炸已经结束后)发射粒子,它们在剩余动画中继续存在。

设置膨胀几何体:

  1. 在“粒子生成”卷展栏上的“粒子大小”组中,将“大小”设置为 3.0,“变化”设置为 25.0%,“增长耗时”设置为 30

    这会使粒子在其寿命的前 30 帧中,大小从 0 增至 3,并具有 25% 随机变化。

  2. 在“粒子类型”卷展栏中,将“标准粒子”设置更改为“球体”。

    这会将粒子设置为按球体进行渲染。

使用参数关联来控制膨胀粒子的发射速率:

  1. 转到第 211 帧以使球体可见。右键单击粒子云图标,然后从四元菜单中选择“关联参数”。

  2. 从第一个弹出菜单中选择“对象(PCloud)”,然后选择“出生速率”。

  3. 将关联线移至球体,并单击该球体。

  4. 从第二个弹出菜单中选择“对象(Sphere)”,然后选择“半径”。

  5. 在“参数关联”对话框中,单击指向左侧的“控制方向”箭头(从球体对象至粒子云对象;名称位于参数列表上方)。

  6. 在粒子云参数列表(当前包含“半径”)下的框中,将出生速率的表达式更改为 1+(半径*5)

    该表达式完成两件事:

    • “半径”值 0 到 25 到 0,并没有达到所需数量的膨胀,所以将其乘以 5,与前面通过倍增重力空间扭曲的“强度”获取半径一样。

    • 在第 210 帧到第 260 帧的发射时间内,我们希望发射粒子。但是,在第 220 帧处“半径”恢复为 0。所以向该值添加 1 将确保粒子从第 220 帧到第 260 帧以速率 1.0 发射。

  7. 单击“连接”。

  8. 关闭“参数关联”对话框。

使用参数关联创建关系的优点在于:无须手动设置所有轨迹的关键帧,而是可以在某些轨迹上创建从属关系,这样更改一个轨迹时,其他轨迹也会随之更改。这可使复杂场景的动画设置和调整更为便捷。

最后,需要向膨胀添加湍流运动以增强真实感。为此,将使用带有湍流但没有强度的“风”空间扭曲。

向膨胀添加湍流运动:

  1. 在“创建”面板上,单击“空间扭曲”,然后从下拉列表中选择“力”。

  2. 单击“风”,然后在“顶”视口中拖动以创建风空间扭曲。

    在“顶”视口中创建的风空间扭曲

  3. 在选定风空间扭曲的情况下,转到“修改”面板。将“强度”设置为 0.0、“湍流”设置为 0.02、“频率”设置为 0.12、“比例”设置为 0.07

    将“强度”设置为零会禁用风的方向力,但是湍流设置仍处于活动状态。

  4. 单击“绑定到空间扭曲”。

  5. 从风空间扭曲拖至粒子云粒子系统(或者反过来),然后释放鼠标按钮。

如果此时播放动画,可看见深水炸弹炸开为碎片,球形爆炸向外炸开,然后在从其中发射膨胀粒子时向内吸入。这些膨胀以湍流形式慢速向上浮动。

指定透明材质

此时,爆炸本身和膨胀都渲染为实体对象。若要使它们像水中的气体,需指定材质。

将预制材质指定给场景中的效果:

  1. 转到爆炸球体在视口中可见的帧。

  2. 打开“材质编辑器”。

  3. 选择左上方示例窗中的“Explosion”材质,并将其拖至球体上。

    “Explosion”材质使用贴图来创建带有大量自发光的半透明材质。

  4. 选择“Explosion”材质右侧的“Bubbles”材质,并将其拖至粒子云粒子系统。

    “Bubbles”材质只是带有淡蓝色和高级透明设置(在“扩展参数”卷展栏上)的标准材质。透明设置包括不透明度衰减(它可使膨胀看起来中空)以及增加的不透明度(使膨胀后面的颜色变亮)。

  5. 关闭“材质编辑器”。

增强大气

动画最终的步骤是向场景添加“雾”大气,以使水显得昏暗,向泛光灯添加“体积光”大气,以使源自爆炸的光在水中漫反射,如同被水中的粒子反射一样。

添加雾:

  1. 选择“渲染”>“环境”以打开“环境和效果”对话框。

  2. 在“大气”卷展栏上单击“添加”。

  3. 在“添加大气效果”对话框中,从列表中选择“雾”,然后单击“确定”。

  4. 在“雾参数”卷展栏上,单击色样,然后使用“颜色选择器”指定暗蓝色:“红”为 131、“绿”为 166、“蓝”为 178

  5. 在“雾”卷展栏的“标准”组中,将“远端”值更改为 75% 并启用“指数”。

添加体积光:

  1. H 键显示“选择对象”对话框。选择列表中的 Omni01,然后单击“选择”。

  2. 转到“修改”面板,打开“大气和效果”卷展栏。

  3. 单击“添加”。

  4. 在“添加大气或效果”对话框中,从列表中选择“体积光”,然后单击“确定”。

  5. 返回“环境”对话框,并在“大气”卷展栏中选择“体积光”项。

  6. 在“体积光参数”卷展栏上,将“密度”设置为 3.0

最终动画

现在可以激活“Camera01”视口,并渲染整个动画。即使采用低分辨率,该过程也需要约半小时的时间。或者,可以播放教程文件光盘上提供的 sub_scene.avi 文件。

更进一步的动画

如果播放了动画,可能已经注意到摄影机在深水炸弹爆炸时似乎出现震动。这是 sub_scene.max 中的“复活节彩蛋”。已经为摄影机目标的“Z 位置”轨迹特别指定了“噪波”控制器,从而在帧 200 和 219 之间产生震动。

小结

这些教程显示了 3ds Max 中的非事件驱动粒子系统在没有粒子流复杂的情况下,是怎样实现宽范围效果的,其中包括飘浮在空中的一股烟雾、消防栓中涌出到人行道的水以及与潜水艇相撞时爆炸的深水炸弹。教程还说明了如何对粒子流应用力(例如风和阻力),以及如何使用参数关联自动设置不同效果的动画,以创建出更令人信服的粒子动画。