【转载】Niagara 条带(Ribbon)粒子实现闪电效果

748 阅读4分钟

原文链接:《Niagara 条带粒子 Part2 闪电》 | 作者:帆起

效果图

juejuejue.gif

第一部分: 分析

闪电效果制作方式众多, 传统的有序列图/模型, 也有闪电算法计算出. 这里思路是借用 UE4 的 Ribbon 配合一部分闪电算法来实现闪电的形态模拟. 这里稍微说下这边用到的闪电形态计算思路.

我们先确定下起点和终点 A,B ,并且分成若干段

接下来我们给这条线段上每个点一段随机的位移, 红点为位移之后的位置.

然后重新连接下线段.

现在获得了一个波折的线段.接下来只需要修改随机的大小.就能稍微模拟单条闪电的效果了.(分支可以用 Spawn 事件重复生成)

第二部分: 用到的模块

主要是自定义 Spawn 位置模块.

第三部分: 步骤

  1. 新建一个发射器, 模块以及系统. 然后将默认发射器的速度和位置删掉, Render 改为 Ribbon,并且将发射方式改为 Burst

  1. 接下来编写闪电位置模块, 打开自定义模块, 使用范围改为 Particle Spawn .

首先我们解决第一个问题, 怎么让生成的粒子按我们想要的方式排列起来,也就是实现上面算法的第一步

起点和终点好办, 我们可以自己设定值.那么如何起点和终点之间将粒子均匀插入进去?

这里我们需要获得 粒子的生成顺序, Nia 提供了这一数据节点是 ExecutionIndex

可以类似理解为 For 循环的 i ,这个值表示的就是当前粒子序号.比如生成了 10 个粒子, 那么根据生成先后, 返回 index. 第一个粒子返回 0 ,以此类推.

现在,问题简单了. 我们知道总共生成了多少个粒子(这里我设置的是 10 个), 知道总长度(起点减终点), 也知道每个粒子的生成序号. 那么每个粒子在线段的位置我么也就确定了.

额外要注意的是, Index0 开始计数.

image.png

左边三个变量前缀都是 Module 表示是模块自身变量, 也就是外部可以暴露修改的.我们给定了一个起点, 一个终点, 以及生成粒子的总和.

根据 序号/总数 , 我们确定了每个粒子在起点终点之间的位置. 并且指定了正确的 LinkOrder

如果顺利的话你将得到一条白线, 注意设置值, (也可以在模块脚本里面给默认值)

image.png

接下来我们解决第二个问题, 让每一个点有位移. 这个简单. 在把位置输出到 Particle Position 之前, 我们加一个随机值即可.

而随机值我们想让这个随机值 在不同位置有不同的效果,这里可以用 Curve 曲线工具

Cascade 我们就经常使用. Curve 取值是根据 x 轴取曲线上的值. 基本上需要差异取值的时候,请第一时间想到 Curve

我们有每个粒子的百分比, 那么可以将其作为 x 轴,然后使用曲线采样值取得不同的值.

image.png

(ps, Curve 使用 CurveForFloats)接下来你应该获得了一个这样的形状

image.png

有那么一点闪电的样子了. 右边 curve 默认没有, 点击 黄色的还原按钮 就出来了. 下面的随机值

点击右边 三角标 把数据改成 范围随机 (Uniform Ranged) .

将发射器放到系统中就搞定了.

最后完善细节, 这个就不详细讲了. 基本上前面都提到过,比如

  1. 再添加一个曲线用来控制 RibbonWidth 使其粗细不均更像闪电的形态;
  2. 在系统中添加三个发射器, 每个发射器的闪电形态都不太一样. 形成组合效果;
  3. 修改颜色,忽闪忽暗,形成爆点;
  4. 蓝图直接设置 EndPosition 位置实现精确打击;
  5. 给粒子加一些力的移动,让闪电更有动感.或者做出弧形闪电.

等等等等

大家加油.