利用 Unreal Engine* 4 的粒子参数提升视觉效果

 

粒子参数是内置于 Unreal Engine* 的强大系统,支持在 Unreal Engine 4 的 Cascade 粒子编辑器外定制粒子系统。本教程将创建这样一个系统,并演示如何运用该系统来提高视觉逼真度。

为何使用粒子参数?

粒子参数是游戏利用粒子系统发挥最大潜能的必要条件,旨在使粒子系统动态响应周围的世界。

概述

在本教程中,我们将结合使用粒子参数和 CPU 微粒来根据游戏元素更改场景中的亮度,在本场景为篝火的燃料余量(见图 1)。随着燃量的减少,粒子系统产生的视觉效果以及系统中的火粒子所产生的火光也会相应地降低。燃料烧完后,我们开始重新填充燃料,直到篝火重新点燃。这样会形成一个展示整个粒子效果的良好循环。

digital campfire

digital campfire

图 1.采用粒子参数后的篝火。

将参数添加至 P_Fire

Particle parameters interface
图 2.粒子参数。

为了营造这种粒子效果,我们修改 Unreal Engine 入门内容中包含的 P_Fire 粒子系统。在图 2 中,紫色突显部分是我们修改的模块,橙色突显部分是我们添加的模块。

修改亮度

亮度是使用 CPU 粒子的主要优势之一,是这种效果的核心。

Settings interface
图 3.第一个发光体。

在“分布”下拉菜单中选择“参数分布”

在 P_Fire 粒子系统中的第一个发光体的细节面板中,从 Brightness Over Life Distribution 下拉菜单中选择 Distribution Float Particle Parameter,如图 3 顶部所示。这样我们可以将发出的火光绑定至一个变量,在本示例中篝火的燃料余量。

设置名称

下一步是指定此分布将绑定至哪个粒子参数。我们使用名称 “FuelLeft”。将此名字输入至 Parameter Name 字段,如图 3 所示。

设置映射模式

输入映射是粒子参数的一项重要特性。该特性支持我们指定可接受的最大和最小输入,并将这些值扩展至给定范围,以便单个输入参数功能无缝地用于多个不同的模块。这种功能使我们能够在不同的点降低不同部分的粒子效果。火花和火苗等效果仅在篝火开始变暗时改变一次,而且我们将通过设置其输入范围来反映这种变化。由于我们希望固定输入并将其扩展至特定范围,所以我们使用 DPM Normal 来完成本教程中的所有分布。它位于 Param Mode 下拉菜单中,如图 3 所示。

设置输入范围

接下来我们指定最小和最大输出。为了产生这种效果,我们设 0.0 为最小输出,1.0 为最大输出,如图 4 所示。这意味着这堆篝火所发出的火光可以在 0% 燃料(全暗)和 100% 燃料(旺火)之间变化。

Settings interface
图 4.设置输入范围。

设置输出范围

输出范围可以让我们指定这堆篝火所产生的最小亮度和最大亮度。值的设置范围如图 5 所示。

Settings interface
图 5.设置输出范围。

设置默认输入值

现在我们需要设置一个默认输入值,以应对没有给定效果值的情况。这一步可通过 Constant 来完成(见图 6)。对于这种粒子系统,我们设为默认 1.0,或旺火。

Settings interface
图 6.设置默认值。

设置模块的其他部分

第二个发光体

为确保篝火所发出的火光与粒子系统中的粒子保持一致,我们修改第二个发光体的火光模块。修改第二个发光体中火光模块的 Brightness Over Life 部分,以匹配图 7 所示的数值。如果我们不扩展光源,篝火在只剩火苗的时候仍然会发出旺火火光。

Settings interface
图 7.第二个发光体。

第一个和第二个发光体扩展

当前,篝火所产生的火光亮度将随着燃料的变化而变化,但火焰的大小不变。为了改变火焰的大小,我们将“Size Scale” 发光体添加至第一个和第二个发光体,如图 2 所示。其分布将变成“Vector Particle Parameter”,而非“Float Particle Parameter”。由于我们提供与“Float Particle Parameter”相同的参数名称,因此 Cascade 为我们的矢量拷贝所有三个字段的浮点值。对于这两个模块,我们希望图形在 0 - 100% 的燃料量中变化,因此我们只需修改字段 Parameter NameConstant。设置两个模块以匹配图 8 中所示的数值。

Settings interface
图 8.发光体缩放。

烟雾产生率

小火会产生少量的烟,我们可以通过修改粒子系统来反映这种情况。为此,我们在烟雾发射体上的产烟模块,设置速率部分的粒子参数。但与我们之前设置的粒子参数不同,我们只希望在燃料少于 40% 时产生烟雾。为此我们将 Max Input 设为 0.4,而非 1。设置 Distribution 以匹配图 9 中的数值。

Settings interface
图 9.烟雾产生率。

火苗产生率

火苗也随着火焰大小的变化而变化,但只会在火焰确实变小时变小。为了达到这种效果,我们在 50% (0.5) 时开始减小火苗。设置火苗发射体上的 Spawn Rate Distribution 部分以匹配图 10 所示的数值。

Settings interface
图 10.火苗产生率。

变形产生率

火焰的变形需要用减小火焰的方式来更改。我们在 0-100% 燃料范围之间更改火焰,变形同样需要这样操作。设置变形发射体上的 Spawn Rate Distribution 部分以匹配如图 11 所示的数值。

Settings interface
图 11.变形产生率。

设置蓝图

既然篝火效果可以随着燃料的变化而变化,那么我们需要设置蓝图来设置燃料量。在本教程中,通过慢慢减少燃料然后重新补充燃料来展示这种效果。为了创建有关此效果的蓝图,将粒子效果拖放至场景中,然后单击细节面板中的 Blueprint/Add Script

设置变量

为了达到这种效果,我们只需设置两个变量,如下图 12 所示:

FuelLeft:跟踪篝火中的燃料量的浮点,范围从 1(100% 燃料) 到 0(0% 燃料)。默认设为 1,因此篝火一开始为旺火。

FuelingRate:表示燃料减少或填充快慢的浮点。在本教程中,我们设默认值为 -0.1(每秒 -10%)。

创建完这两个变量后,蓝图中的变量部分将匹配图 12 中的数值。

Settings interface
图 12.火焰变量。

更改燃料余量

为了达到这种效果,需要更改每个 tick 的燃料余量,并将其应用于粒子系统。为此,我们让 Fueling Rate 乘以 Delta Seconds,然后加上 Fuel Left。之后此数值设为 Fuel Left

为了将 Fuel Left 应用于粒子系统,我们使用Set Float Parameter 借点。为此,我们使用修改的 P_Fire 粒子系统组件,并将 Fuel Left 用于 Param。参数名称必须为我们在粒子系统中所使用的名称,在本教程中为 FuelLeft

Settings interface
图 13.修改燃料余量。

设定燃料余量限值

最终篝火的燃料会耗尽。在本教程中,我们希望切换至为篝火增加燃料,而不是让燃料耗尽。为此,我们继续操作 tick 并查看新燃料值是否太低(小于或等于 -0.1)或太高(大于或等于 1.0)。因此我们将下限设为 -0.1,以便重新添加燃料之前篝火熄灭一会。这不会导致任何问题,因为我们设定了最小输入,所以传递至粒子系统所有低于 0 的值都将视为 0。

如果发现 Fuel Left 超出限值,我们将用 Fueling Rate 变量乘以 -1。如果 Fuel Left 持续减少,会造成在之后的 tick 中增加,反之亦然。

Settings interface
图 14.设定燃料余量限值。

有关编译器优化的更完整信息,请参阅优化通知