从小我就觉得粒子特效是门“骗术”喷泉喷的是水火焰烧的是粒子但只要观感对了没人会在意那是不是真的流体。喷泉那一篇发出来后不少人问我能不能把发射器关掉重力、换个橙色贴图直接当火焰用。我的回答是能但做出来更像“被风吹歪的橘子汽水”一眼假。这次我把喷泉思路升级成火焰的完整过程拆出来核心就落在三件事上噪声、颜色曲线、透明淡出。这篇不是从零教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)2550.15亮黄(255, 220, 80)2550.4橙色(240, 120, 30)2300.7赤红(180, 50, 10)1800.9暗红(100, 20, 5)801.0黑红余烬(30, 0, 0)0注意透明度也要放进曲线里。我见过有人只在曲线里配了RGB然后单独用Opacity模块做淡出结果颜色和Alpha不同步火焰熄灭了还带着橙红色残影。把Alpha做进同一根颜色曲线的优点是颜色和透明永远同步不容易错位。4.3 材质侧如何接住粒子颜色Niagara输出的粒子颜色不是直接变成屏幕上的颜色需要材质端配合。最保险的做法是材质Blend Mode选Additive或TranslucentShading 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贴图就能解决。最后分享一个我自己的调参顺序先把初速和拖拽调出上升趋势再开噪声让粒子学会摇晃然后上颜色曲线确认白黄橙红层次出来最后才做透明淡出和材质混合。这个顺序能帮你快速定位问题在哪一层——如果火焰还是假翻车点大概率在运动层而不是材质层。你按这个顺序从前往后排查比在材质里反复改混合模式有效得多。我做火焰最大的经验就是素材用最简单的贴图运动用噪声和曲线撑起来别一上来就堆一堆模块。火焰不是靠复杂是靠配合。