问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Unity内置粒子系统之喷火效果

创作时间:
作者:
@小白创作中心

Unity内置粒子系统之喷火效果

引用
CSDN
1.
https://blog.csdn.net/2502_91043564/article/details/146428422

Unity提供了两种主要的粒子系统解决方案:Shuriken和VFX Graph。本篇文章将聚焦于Unity内置的Shuriken粒子系统,它适用于制作小型特效。

在深入讲解之前,我们先简要对比这两种方案的区别及适用场景,以便更好地理解何时选择哪种工具。

由此可见,VFX Graph较Unity内置粒子系统学习难度大,所以本文将从基本的、简单的粒子系统入手。

在创建Effect时,Unity给出了四个组件。本片内容将只涉及第一个,也就是ParticleSystem。

ParticleSystem中给出了很多的参数可供调节

在制作不同的效果时可以根据需求进行个性化调整,那么了解了这些之后,就可以正式的开始制作火焰特效了,以下是最终效果的呈现:


本次效果实现需要使用特定的贴图。首先,创建一个Effect并添加ParticleSystem组件。然后,在Renderer模块中设置并应用所需的贴图,以确保粒子正确渲染。

值得一提的是,在Unity内置的粒子系统中,粒子的贴图并不局限于静态图像。

Texture Sheet Animation模块允许将一张纹理视为多个动画帧的集合,并通过控制粒子的帧切换,使其在生命周期内逐帧播放Sprite Sheet(序列帧动画)。这使得粒子系统能够呈现更加丰富的动画效果,例如爆炸、火焰、魔法、角色特效等。

从提供的贴图可以看出,它并不是单独的一张静态图像,而是由多个动画帧组成。当启用Texture Sheet Animation模块后,粒子可以依次播放这些帧,从而形成动态动画效果。

以下是该模块的一些关键参数及其作用:

在较新的Unity版本中,Texture Sheet Animation模块提供了两种模式:

  • Grid(网格模式)——适用于Sprite Sheet(整张纹理表),即一张包含多个动画帧的纹理。
  • Sprites(精灵模式)——适用于单独导入的Sprite纹理,可以手动选择并添加多个独立的帧。

尽管两者在名称上有所不同,但最终效果相似,都可以用于实现序列帧动画。在本次效果制作中,我们将采用Grid模式。

Tile属性设置

使用Grid模式时,正确设置Tile(网格划分)至关重要。例如,在本次火焰效果中,贴图由10行×5列组成,总共50张动画帧,系统会按照顺序播放这些帧,形成动画效果。

因此,在Tile的设置中,应选择10×5,以确保动画能够按照正确的顺序播放,并覆盖完整的Sprite Sheet。

Cycles(循环次数)

Cycles属性决定了粒子生命周期内动画播放的次数。

  • 数值越大,动画在粒子存活期间播放得越快,视觉上会显得更加剧烈和动态。
  • 数值较小(如1),动画则完整播放一次,更符合自然的火焰效果。

在本次喷火特效中,我们选择循环1次,以保证动画按正常节奏播放,不会显得过快或过慢。

进入喷火形态调整

完成贴图与动画设置后,我们就可以进一步调整喷火效果的基本形态,包括粒子发射方向、速度、大小变化等,使其更具真实感。

下面会提到一些需要辅助理解的属性

Duration(持续时间)是指粒子系统播放一次所需要的时长,并不代表单个粒子的存活时间。如果启用了循环播放(Looping),那么Duration的意义将被忽略,因为粒子系统会持续不断地循环运行。

Prewarm(预热)允许粒子在播放前进行一次模拟,使其从成熟状态开始,而不是从零开始生成。这在火焰、烟雾等需要持续存在的效果中非常有用,而对于爆炸、火花等瞬时特效则不适用。

Start Lifetime(粒子生命周期)决定了粒子从生成到消失的时间长短,与Duration无关。火焰通常在1到3秒之间,烟雾可能需要2到5秒,而爆炸特效一般只有0.2到0.5秒。对于短暂的火花和爆炸,可以使用0.1到0.5秒的寿命,而对于持续性的火焰和烟雾,建议设置在1到5秒之间。这个参数是决定粒子存活时间的关键因素。

Start Speed(初始速度)控制了粒子生成时的速度。如果设为0,粒子将保持静止,适用于光效或能量场等静态效果。烟雾通常在0.5到2之间,使其缓慢扩散;火焰可以设置为3到5,以模拟向上升腾的效果;火花和喷射类特效则需要5到10的速度,使其快速喷射出去。在本次喷火特效中,建议将初始速度设置为8,使火焰具备向外喷射的动态感。

Gravity Modifier(重力影响)决定了粒子是否受重力影响。默认值0代表粒子不受重力作用,适用于火焰、光效、烟雾等不会因重力下落的效果。负值(如-0.5)会让粒子向上漂浮,适合云雾或魔法特效,而正值(如1)则会让粒子受重力影响下落,常用于落叶、雨滴或其他受重力作用的粒子系统。

Simulation Space(模拟空间)决定粒子系统是跟随父物体移动,还是独立运动。Local(本地)模式下,粒子会随着父对象一起移动,适用于火焰、魔法等特效,而World(世界)模式则让粒子独立存在,适合烟雾、爆炸等不应受物体移动影响的效果。建议自己尝试不同模式,以更直观地理解它们的区别。

Automatic(自动模拟模式)主要影响粒子在屏幕外时的行为。如果设置为Pause And Catch-up,当粒子系统在屏幕外时会暂停模拟,重新进入屏幕后会快速补足模拟进度,适用于较复杂的系统,但可能导致短时间内的性能负载增加。如果选择Pause,粒子系统在屏幕外会直接暂停,而Always Simulate则始终进行计算,不管粒子系统是否在视野范围内,这对烟花或爆炸等一次性效果尤为重要。

Ring Buffer Mode(环形缓冲模式)让粒子存活直到达到最大粒子数。当新粒子生成时,系统不会删除寿命结束的粒子,而是直接覆盖最早生成的粒子。这对于星空、魔法阵等持续循环的特效有很好的效果。

在理解了这些关键参数后,就可以根据需求进行微调,使粒子特效的表现更加符合预期。接下来,将对各个参数进行实际调整,这是最终所实现的效果

至此我们就可以进行下一步,让它成为一个喷射出来的火柱,而实现这一效果重要的一个模块就是Shape:为它塑型

Shape模块中给出了多个发射形状,每个形状都有不同的参数可供调节

由于不同形状所涉及到的内容较多,所以本篇内容只阐述用于制作喷火效果的Cone,也就是锥体

其中的参数在制作不同的效果中都需要个性化的调节

这是在调整一些参数之后最终实现的效果,你会发现这个火柱很单薄,同时也没有什么连贯的效果,这是由于粒子的速率不高,也就导致在相同的时间内发射出的粒子少导致效果不明显

当中有三个核心参数,分别是按时间发射,按距离发射以及爆发发射。

三种发射方式有不同的应用场景,上图已经列举了出来

值得注意的一点是在制作突发性特效的时候,也就是需要用到Bursts时,为了使得特效更加接近现实,应该妥善调整各个参数

当你将发射速率调整到一个合适的值的时候,那这个喷火效果已经初具雏形了

做到这里,我们发现一个明显的问题,就是这个火焰太白了,并不符合我们现实中所见到的火焰的颜色,因此我们可以给它换个颜色,让它更接近现实中的颜色

Color over Lifetime模块:

这样就看起来顺眼多了。

粒子甚至整个粒子系统的许多数字属性都可能随时间而变化。Unity提供了几种不同的方法来指定这种变化的发生方式

  • Constant:属性的值在其整个生命周期内是固定的。
  • Curve:该值由曲线/图形指定。
  • Random Between Two Constants:两个常量值定义了值的上限和下限;实际值随着时间的推移在这些边界之间随机变化。
  • Random Between Two Curves:两条曲线定义了值在生命周期内给定点的上限和下限;当前值在这些边界之间随机变化。

粒子系统曲线与动画曲线类似。

粒子系统曲线编辑器具有以下按钮:

  • Optimize:使曲线适应四个或更少的关键点以构建称为多项式(Polynomial)的快速计算器,这比读取未优化的曲线更有效。
  • Remove:删除选定的曲线。

要编辑粒子系统播放曲线的方式,单击所选关键点旁边的齿轮图标,然后选择以下选项之一:

  • Loop:在粒子的生命周期内以指定的次数播放曲线。例如,如果制作一条缩放粒子大小的曲线,可以指定其多次循环,这会使“大小缩放”动画在粒子消亡之前多次播放,而不是仅播放一次。
  • Ping Pong:与Loop相似,但以连续振荡的方式依次向前和向后播放曲线。
  • Clamp:将超出曲线时间范围的粒子查询限制为曲线的第一个或最后一个值。

主模块中的Start Color属性具有以下选项:

  • Color:所有粒子在粒子系统的整个生命周期内都是以这种颜色开始。粒子在自身的生命周期中仍可以改变颜色。
  • Gradient:粒子系统发出的粒子以渐变开始时的颜色开始,而以渐变结束时的颜色结束。渐变线代表粒子系统的生命周期;粒子系统在对应于粒子系统当前的存在时间点处从渐变中选择一种颜色。
  • Random Between Two Colors:粒子系统选择两种给定颜色之间的随机线性插值作为初始粒子颜色。
  • Random Between Two Gradients:粒子系统在对应于该系统当前的存在时间点处从每个给定渐变中选择一种颜色。选择两种选定颜色之间的随机线性插值作为初始粒子颜色。
  • Random Color:类似于Gradient模式(这种情况下,粒子从定义的Gradient中选取初始颜色)。但是,在这种模式下,粒子系统不会根据粒子系统的存在时间来选择样本,而是会随机进行选择。此模式还很适合与渐变编辑器(Gradient Editor)内部的Fixed Gradient Mode配合使用。启用此选项后,可以选择一组预定义的精确起始颜色,然后将概率应用于每种颜色。

有关这些曲线的内容,等我熟练了之后可能会单独重新出一篇文章谈谈我的看法

调整了颜色之后发现现在的喷火效果十分僵硬,从上当下貌似没有变化,我们可以给它一个变大的效果,让它更富于变化,也就是Size of Lifetime模块,同样是对曲线的调节

其实做到这里,喷火效果就算基本完成了,如果你想对它进一步的优化,可以使用其他不同的组件例如:Velocity over Lifetime模块等等

如果我想让他更加真实,那么大概需要一些辅助效果,例如喷火时周围的火星,火星制作所涉及的模块与刚才的喷火效果类似,有点区别就是火星运用到了Noise的效果:噪声

加入噪声后,火星的效果更具有动感,更加真实

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号