☰
用Niagara制作逼真火焰:噪声、颜色曲线与透明淡出全解析
2026/10/16 10:41:10 网站建设 项目流程

从小我就觉得粒子特效是门“骗术”:喷泉喷的是水,火焰烧的是粒子,但只要观感对了,没人会在意那是不是真的流体。喷泉那一篇发出来后,不少人问我能不能把发射器关掉重力、换个橙色贴图,直接当火焰用。我的回答是:能,但做出来更像“被风吹歪的橘子汽水”,一眼假。这次我把喷泉思路升级成火焰的完整过程拆出来,核心就落在三件事上:噪声、颜色曲线、透明淡出。

这篇不是从零教Niagara基础,而是默认你已经会拖发射器、会开材质、能在系统里加模块。目标很明确:让一批普通的上升粒子,变成有舌头、有温度、有消散感的火焰。适合刚学Niagara两三天、想跳过喷泉直接做火焰的朋友,也适合那些做完火焰总觉得“硬邦邦”的老手对照自查。

1. 先复盘喷泉粒子,找出火焰必须反着来的三条设置

喷泉粒子看起来和火焰粒子很像:都是从底部向外喷,靠重力下坠或靠初速飞散,最后淡出消失。但如果你把喷泉参数原样拷过来改个色,会发现火焰跑不起来。本质上,喷泉和火焰对粒子的“运动期望”完全相反。

1.1 喷泉的核心参数长什么样

上一篇里我给喷泉用的套路是:粒子在PersonSpawn阶段生成,初速比较大,方向向上或呈锥形散开,Particle Update里挂一个朝下的重力,粒子寿命一般在1到3秒,颜色基本固定,透明度通过Alpha曲线缓慢衰减。这套组合好在稳定,水花不管怎么飞,最终都会被重力拉回地面,视觉重心始终集中在下半段。

喷泉的透明度衰减也很典型:它是“喷到最高点然后消失”,所以Alpha从头到尾衰减得比较均匀。水是连续体,掉下来的时候你还能看见水珠,所以粒子寿命长、尺寸大,颜色只用调水的质感和反射就好。

1.2 火焰和喷泉真正差在哪三处

把火焰放进同一套逻辑里检查,就能发现三处根本差异:

第一,运动方向。喷泉靠重力制造抛物线,火焰却必须抵抗重力向上飘。而且火焰不是均匀上升,它要有点摇曳、有点颤抖,像被空气吸着往上走。第二,颜色变化。喷泉颜色从头到尾基本一致,火焰则会从白色过渡到黄色、橙色、暗红,这是燃烧温度的视觉表达。第三,淡出方式。喷泉的淡出是“越来越透明直到看不到”,火焰则更像是“烧完的余烬散开”,粒子在生命后期会膨胀、变疏、崩解。

这三点正好对应今天要讲的噪声、颜色曲线、透明淡出。别急着去材质里把粒子变红,先把运动逻辑改对,火焰的味道就出来一半了。我把喷泉和火焰的对照列在下面,方便你直接对比找问题:

参数维度喷泉策略火焰策略原因
重力开启,向下关闭,或给极小的向上浮力火焰是热空气上升,不是被外力顶上去
噪声扰动基本不用必须用,且要叠加多层火焰需要舌状舔舐感,不是抛物线
颜色固定颜色寿命映射颜色曲线燃烧温度从白到红递减
Alpha平滑降低中后期急促淡出,伴随尺寸膨胀模拟余烬崩解散开
粒子寿命1~3秒0.5~1.5秒火焰更新快,太长的粒子会糊成一条线

如果你的火焰做出来仍然像水柱,九成是这三条有一条没改。

2. 从空发射器搭起火焰骨架:寿命、初速与上升运动

改材质前,先把发射器重新搭一遍。我习惯从空发射器开始,不保留喷泉的预设,因为喷泉里的SpawnRate、Drag、Collision这些模块会残留干扰。下面这组参数是我反复调过的基础值,版本差异可能让具体数值略有不同,但逻辑方向没问题。

2.1 发射器类型和Sprite渲染器选型

火焰用Sprite渲染器最省事,别一开始就上Mesh粒子。Sprite配合Noise扰动,视觉上足够做出火焰的层次感。只要你不是摄像机怼到粒子脸上数像素点,Sprite完全能应付。

创建发射器时选Empty Type,然后手动加渲染器。注意渲染器里的材质先用最普通的半透明材质占位,后面会详细说材质侧设置。Sprite渲染器的两个细节:一个是Alignment要设成Camera Facing,保证粒子始终面向摄像机;另一个是SubImage参数,如果你的火焰贴图有序列帧,可以留到后期再调,第一版直接用单帧贴图,省得把问题搞复杂。

2.2 关键参数表:初速、寿命、拖拽

初始化粒子模块里,我给火焰设置的是锥形初速,点和方向都从发射器位置往上。给你一组可以直接抄的初始参数:

参数名推荐值说明
粒子寿命0.6 ~ 1.2 随机火焰更新快,寿命短才不拖沓
初速大小60 ~ 120给粒子一个向前的趋势
锥角15° ~ 30°控制火焰的扩散范围
初速方向正Y轴(或你的向上轴)确保粒子向上走
Drag0.8 ~ 1.2模拟空气阻力,让粒子越飞越慢
重力0关闭,不要让粒子下坠

拖拽并不是越小越好,相反,火焰需要一定拖拽,才能让粒子在初速的基础上逐渐减速、拉长轨迹。如果拖拽太小,粒子会保持高速直冲,像一排火箭。拖拽配合后面的噪声,才会出现火舌前段有力、尾段飘散的效果。

2.3 为什么不要直接给粒子加负重力

很多新手会把“火焰向上飘”理解成“把重力设成负值”。理论上重力设成-几百确实能让粒子向上加速,但出来的运动是均匀、匀速的上升,没有衰减也没有扰动,像一股稳定的气柱。

火焰的真实运动是:底部燃烧时能量高、速度快,往上走的过程中能量衰减、速度降低、方向被周围气流干扰。所以正确做法是保留初速,用拖拽减速,再用噪声打乱方向。负重力可以加一点点,比如设成负的20到40,用来模拟热空气的浮力,但千万别让它成为主导力。我把氛围值控制在初速的1/3以下,这样粒子能保持“努力向上但逐渐乏力”的观感。

调完这一层,粒子已经会向上飘了,但还很直、很机械。下一节就是火焰的灵魂:噪声扰动。

3. 给火焰注入“舔舐感”:噪波节点到底在扰动什么

这个部分就是标题里“噪声”的核心。很多人加了噪声但火焰还是死板,是因为把噪声当成随机速度了。随机速度是每一帧重新抽乱数,结果粒子抖动得厉害却看不出规律;噪声则是基于连续空间采样的平滑值,它会让粒子之间有相关性,形成连片摆动,这才是火焰晃动感的来源。

3.1 火焰的噪声和“随机扰动”的区别

随机扰动解决的是“散乱”,噪声解决的是“摇曳”。你可以把噪声想象成风拂过火苗时,空气在空间里形成连续的气流波。粒子在这个波里被推来推去,相邻粒子受到的影响相近,所以会集体摇摆而不是各自乱飞。火焰需要的是这种集体摇摆。

Niagara里最常用的是Curl Noise,也叫旋度噪声。它生成的向量场天然无散度,也就是说粒子不会突然往一个方向堆积,运动方向会呈现出旋转、环绕的感觉。Perlin Noise也能用,但Curl Noise对火焰的舌状效果更友好。如果你已经装了引擎自带的各种Noise节点,优先选带Curl字样的。

3.2 在Niagara里接噪声的两种常用方式

第一种方式:在Particle Update里加一个模块,用Sample Noise节点采样向量场,把输出加到Particles.Force上。采样坐标用Particles.Position乘以一个频率系数,时间输入用Emitter Age,这样噪声会随时间变化。

第二种方式:直接用Niagara里的“Noise Force”或者“Sample Curl Noise”模块,它会把噪声转成力,施加到粒子速度上。区别在于你需要控制噪声强度,也就是力的大小。我的习惯是第一版先用第二种方式,把强度拖进效果里看,调顺了再改成更精细的Noodle连接。

连接大逻辑是:噪声模块 → 输出Force或Velocity → 叠加到现有速度上。注意一定要加在速度/力的节点上,不是直接写Particles.Position。如果你直接改位置,粒子的运动轨迹会变成生硬的抖动,不会有平滑的飘摇感。

3.3 一版能直接用的噪波参数

我给火焰做的噪波参数大概是这样的:

参数名推荐值说明
噪声类型Curl Noise旋度噪声,适合火焰气体扰动
频率1.2 ~ 2.5控制舌头的粗细,越低越粗,越高越碎
强度20 ~ 80控制扰动量,太大火焰会炸开
时间尺度0.8 ~ 1.5控制火焰摆动的快慢
空间坐标世界坐标让不同位置的粒子受同一片风场影响

如果你的火焰像一团雾,就把频率调高、强度调低,让它碎一点;如果火焰像一条直线,就把频率调低、强度调高,让它左右摆起来。我建议你先用强度50、频率1.5跑一遍,再根据观感微调。

噪波对火焰的另一个贡献是“底部稳、顶部散”。底部粒子刚出生,速度大,噪声对它的影响相对小;顶部粒子速度已经慢下来,噪声会把它的方向扯得乱七八糟,自然形成火舌分叉、卷曲、散开的样子。如果你发现顶部还不够散,可以把噪声强度跟粒子寿命做成曲线,越老越受到噪声影响。

4. 颜色曲线的正确打开方式:粒子不是变色,是在升温

颜色部分的关键词是“颜色曲线”。火焰不是从橙色变成黄色那么简单,它必须顺着温度递减的方向走:白色中心 → 亮黄 → 橙 → 红 → 暗红 → 透明。如果你只用静态的橙色贴图,粒子像一块块固体在飘,完全没有燃烧的层次。

4.1 从“0到1的变色”到“温度映射”

Niagara里的颜色曲线通常挂在Particle Update阶段,输入是粒子的相对寿命(0到1),输出是颜色。曲线里的横轴不是时间,而是寿命百分比。所以粒子0闪亮登场,0.5时烧得正旺,1.0时彻底熄灭。这个映射关系本质上是把“粒子的年龄”翻译成“火焰的温度”。

很多新手把曲线关键点加错地方,比如只在曲线末尾放一个深红色,导致前面全是白色,后面突然变红。正确的做法是让色彩在寿命区间内连续过渡,关键点放在0、0.15、0.4、0.7附近,而不是两头。

如果Niagara里没有现成的Color Over Life模块,可以手动创建CurveVector,再用Sample Curve节点采样。曲线类型选择Linear或者Cubic都行,Cubic过渡更柔和,但关键点太多容易过冲。第一版建议用Linear,好控制。

4.2 颜色曲线关键点参考表

这是一组我实测下来比较顺眼的颜色关键点,RGB值基于线性空间,sRGB下看可能会略有偏差,但你可以在材质或Gamma设置里调整:

相对寿命颜色RGB参考值透明度
0.0白炽白(255, 240, 200)255
0.15亮黄(255, 220, 80)255
0.4橙色(240, 120, 30)230
0.7赤红(180, 50, 10)180
0.9暗红(100, 20, 5)80
1.0黑红余烬(30, 0, 0)0

注意透明度也要放进曲线里。我见过有人只在曲线里配了RGB,然后单独用Opacity模块做淡出,结果颜色和Alpha不同步,火焰熄灭了还带着橙红色残影。把Alpha做进同一根颜色曲线的优点是,颜色和透明永远同步,不容易错位。

4.3 材质侧如何接住粒子颜色

Niagara输出的粒子颜色不是直接变成屏幕上的颜色,需要材质端配合。最保险的做法是:材质Blend Mode选Additive或Translucent,Shading Model选Unlit,然后用一个Multiply节点把Particle Color乘进Emissive Color。

如果是Additive混合,颜色越亮的地方叠加越强,火焰中心会自然发白,这个效果很讨喜。材质里的贴图采样出来是一个径向渐变带Alpha的火焰贴图,你需要让贴图的Alpha乘到Opacity里,RGB乘到Emissive里。别用默认的常量颜色,否则粒子颜色曲线全部白搭。

材质里还有一个坑:如果贴图是sRGB格式而粒子颜色在线性空间,会出现颜色整体偏灰或偏亮。我一般把贴图设置成线性空间,让粒子的RGB直接相乘。不同引擎版本的设置入口不同,但只要偏色了,第一个就该查贴图的色彩空间。

5. 透明淡出不是简单调低Alpha:排序、边缘与材质混合

标题里“透明淡出”看起来最简单,做起来最容易翻车。很多人直接把粒子的Opacity从255拉到0,发现火焰到后面变成一团半透明色块,边缘还有黑边。问题不在淡出本身,而在淡出过程里还要同时处理尺寸、排序和混合模式。

5.1 淡出的本体是“曲线”,不是把Opacity调低

火焰粒子生命后期的观感不是“变透明”,而是“变散”。我的做法是在粒子更新里加一个Size Curve:粒子初始尺寸25左右,中期膨胀到50到70,末期甚至可以再缩小或者保持不变但Alpha归零。尺寸增大的同时Alpha下降,看起来就是一团火焰越飘越薄、最后消失,而不是一个火球慢慢透明。

Size Curve和Alpha Curve的配合关键点在节奏:Alpha不应该均匀下降,应该前段保持较高,中段开始衰减,后段骤降。如果曲线太平,粒子像玻璃碎片一样透亮;如果曲线太陡,火焰会变成一阵烟。

5.2 为什么火焰用Additive比Translucent省心

半透明粒子最头疼的是排序。普通Translucent模式下,引擎要按粒子到摄像机的距离排序,火焰粒子叠在一起,排序不稳定就会闪烁、穿插。Additive混合模式则比较宽容,因为它只是把颜色加亮,不太在意谁在前面谁在后面。

做火焰我强烈建议先用Additive材质。它的缺点是火焰重叠区域会过曝、发白,但这个缺点在火焰里反而像高温区,视觉上更容易接受。如果非要用Translucent表现浓烟那种遮挡感,再单独考虑排序问题,不要一上来就和排序死磕。

5.3 贴图Alpha边缘和防黑边技巧

透明淡出的另一个坑来自贴图。火焰贴图如果边缘Alpha不是平滑降为零,而是硬切,淡出时就能看到方形的粒子边界。制作贴图时,要确保贴图中心是亮色、边缘Alpha渐变为0,最好是径向渐变。

有些引擎里还把Opacity和Depth做个Fade,让粒子靠近遮挡物时自动降低透明度,防止火焰碰到地面时看到硬切边。这个功能一般叫Depth Fade,推荐打开,数值按场景调个10到30左右。火焰如果靠墙太近,你会明显看到不打开深度淡出时的黑圈,打开后就不存在了。

6. 照这套思路调参时,最常见的五种翻车现场

前面几节是正向搭建,最后一个大节专门讲我在实操里反复遇到的翻车情况。因为很多人不是不会搭,而是搭完之后不知道怎么调参,只能凭感觉乱拖。

6.1 火焰像水柱,怎么看怎么不对

水柱感的本质是粒子运动太“直”。第一检查重力模块,关掉或只给极小的浮力;第二检查拖拽,如果粒子从头到尾速度都不减,水柱感很强;第三检查噪声,是不是还没接到力或速度上。如果这三个都改了还是直,就把锥角调大一点,让初速方向有更多随机。

6.2 火焰像烟花,炸得到处都是

烟花感通常是噪声强度过大,或粒子寿命太短。噪声强度超过100以后,粒子的轨迹会被扯得很散,像爆炸后的火星。把噪声强度降到20到40,同时稍微提高寿命,给粒子一个从膨胀到收敛的过程。记住火焰是连成一片的,不是一颗一颗飞出去的。

6.3 颜色只有红和橙,没有白色高温区

如果火焰从头到尾都是橙色,说明颜色曲线的关键点没有把白色放在寿命0的位置。去看看颜色曲线横轴,是不是曲线只在0.2之后有值。如果用的是CurveVector,确认采样输入是0到1的相对寿命,而不是实际秒数。用秒数做输入会导致所有粒子都落在高寿命区间,颜色根本变不过来。

6.4 粒子边缘发黑,像烧焦的纸片

黑边基本固定在两个地方:贴图Alpha不是渐变,或材质用了Standard Transparent但没有Depth Fade。先换一张边缘柔和的贴图,然后把混合模式改成Additive,黑边会直接消失。如果你必须用Translucent,再把Depth Fade拉高一点。

6.5 粒子在某个角度看突然消失或闪烁

这个一般不是材质问题,而是粒子排序或贴图压缩问题。Additive已经解决大半。如果还闪,检查Sprite渲染器的Sort Order,或者把粒子的离屏剔除关掉。个别情况下是贴图用了压缩格式导致Alpha不舒服,换成高精度Alpha贴图就能解决。

最后分享一个我自己的调参顺序:先把初速和拖拽调出上升趋势,再开噪声,让粒子学会摇晃;然后上颜色曲线,确认白黄橙红层次出来;最后才做透明淡出和材质混合。这个顺序能帮你快速定位问题在哪一层——如果火焰还是假,翻车点大概率在运动层,而不是材质层。你按这个顺序从前往后排查,比在材质里反复改混合模式有效得多。我做火焰最大的经验就是:素材用最简单的贴图,运动用噪声和曲线撑起来,别一上来就堆一堆模块。火焰不是靠复杂,是靠配合。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询