系列路线:
01 喷泉(重力 + 初速度 + 阻力) ✅
02 火焰(噪声 + 颜色曲线 + 透明淡出) ← 本篇03 爆炸(多 emitter:火球 + 烟 + 火花 + 冲击波)
04 拖尾(Ribbon)
05 与蓝图交互(User 参数驱动)
06 碰撞与事件(Collision / Event Handler)
07 性能优化与 LOD / Scalability
本文目标:从 0 搭出一个"基础火焰"特效,并把火焰拆成 3 个最核心的能力:
- 噪声:让火焰翻涌、不走直线
- 颜色曲线:让火焰从亮到暗、有层次
- 透明淡出:让边缘更软、死亡不突兀
说明:本文继续采用"从空 System 开始"的方式,不靠模板;模块名称在不同 UE5 小版本可能略有差异,但思路一致。
文章摘要
本文是 Niagara 系列第 2 篇,讲火焰的三个核心:噪声、颜色曲线与透明淡出。我们从空 Niagara System 新建火焰特效,先搭出可运行的向上发射结构,再在 Particle Update 加入 Curl Noise Force 让火焰翻涌;用 Normalized Age 驱动颜色/亮度曲线实现亮黄→橙→红暗的变化;最后用 Alpha 曲线与软边材质让火焰自然淡出,避免"硬消失"。完成后你将能独立做出可用的基础火焰,并为下一篇"爆炸多 emitter 组合"打底。
1. 火焰像不像,先抓住三条规律
很多人做火焰失败,原因是把火焰当"橙色烟雾粒子"来调。真正像火焰的关键在于:
1.1 运动规律:上升为主 + 局部翻涌
火焰不是抛物线下落(那更像喷泉)。火焰更像"热气上升",中间夹杂湍流。
1.2 颜色规律:内亮外暗 + 随生命周期变暗
火焰通常出生更亮(偏黄白),随后变橙、变红、变暗并淡出。
1.3 透明规律:软边 + 末端淡出
如果不做透明淡出,粒子会"突然消失",立刻出戏。
2. 从空 System 创建火焰(不靠模板)
2.1 新建空 System
-
内容浏览器右键 → FX → Niagara System

-
点击 Create Empty Niagara System(空系统)

-
命名:
NS_Fire_Basic
2.2 添加一个空 Emitter(先做单层火焰)
在 System 中点击 Add Emitter → 新建空 emitter


命名:NE_Fire_Main

为什么先单层?因为新手最容易卡在"看不到效果"。单层先跑通,第二层外焰后面再复制改参数即可。
3. 先搭出"能跑起来的火焰骨架"(无噪声、无曲线也能看到火苗)
这一步只做基础:持续生成 + 向上速度 + 阻力(可选弱重力)+ 能渲染。
3.1 持续生成:Spawn Rate(Emitter Update)
添加 Spawn Rate:
Rate = 120(建议范围 80~200)


3.2 出生初始化:Initialize Particle(Particle Spawn)
添加 Initialize Particle:
Lifetime = 0.6 ~ 1.2(随机范围更自然)Sprite Size = 12 ~ 26Color = (1,0.3,0,1)或先给一个浅橙(后面用曲线接管)

3.3 初速度:Add Velocity(Particle Spawn)
添加 Add Velocity :

想要火苗散一点:
- 使用"锥体随机方向"

3.4 阻力:Drag(Particle Update)
添加 Drag:
Drag = 1.0 ~ 4.0


火焰需要更"黏"一点,Drag 通常比喷泉更大,避免粒子乱飞。
3.5 (可选)弱重力:Gravity Force(Particle Update)
火焰本质是上升,不需要真实重力下落。你可以:
- 不加 Gravity
- 或加很弱的 Gravity 让它更稳:
Gravity = -50 ~ -200

3.6 渲染:Sprite Renderer
确保有 Sprite Renderer:
- Material:先用一个简单可见材质(后面再换火焰软边材质)
- 看不见就把 Sprite Size 临时调到 40
到这里你应该能看到"向上飘的粒子"。它还不像火焰,下一步加噪声。
4. 火焰第 1 核心:噪声(让火焰翻涌)
最常用的是 Curl Noise Force(卷曲噪声力),效果像小涡流。
4.1 添加 Curl Noise Force(Particle Update)
在 Particle Update 添加:
- Curl Noise Force
推荐起手参数(先照抄,再微调):
- Strength:
80 ~ 220 - Frequency:
0.8 ~ 2.0

调参心得(很重要):
- Strength 太小:火焰像"直线烟"
- Strength 太大:火焰被吹散成一团雾
- Frequency 低:大块翻涌(更像营火)
- Frequency 高:碎抖(像能量/魔法火)
4.2 防止噪声把火焰吹散(常见坑)
如果加了噪声后火焰散掉了,按这个顺序处理:
- 先加大 Drag(通常最有效)
- 降低 Curl Noise Strength
- 缩小 Cone Angle(初速度方向别太散)
5. 火焰第 2 核心:颜色曲线(用 Normalized Age 做"亮→暗"的生命周期)
这一步决定火焰"有没有温度"。
5.1 关键变量:Normalized Age(0→1)
- 0:刚出生
- 1:即将死亡
我们用它驱动颜色。
5.2 颜色随时间变化(Particle Update)
添加颜色相关模块(名称可能是):
- Color Over Life / Scale Color / Set Color
推荐一个通用火焰配色(从 0 到 1):
- 0.0:偏黄白(更亮)
(1.0, 0.95, 0.75,1) - 0.4:橙色
(1.0, 0.55, 0.18,1) - 0.8:偏红暗
(0.6, 0.12, 0.04,1) - 1.0:更暗
(0, 0, 0,0,0)

注意:新手常犯错是"全程一个橙色",结果看起来像橙色雾。颜色必须随生命周期变化才像火。
5.3 "更亮"的做法(可选)
如果你想让火焰更亮(尤其内焰):
- 可以在材质端做"自发光/Emissive"
- 或在颜色曲线前段把 RGB 推高一点(但注意别过曝导致一片白)
6. 火焰第 3 核心:透明淡出(解决硬边、硬消失)
火焰最怕"粒子突然没了"。
6.1 做软边材质(空间软边)------最小可用版
这部分只做"最小可用",不堆复杂节点。目标:让每个 sprite 的边缘是柔的,而不是硬圆。
6.2 新建材质(建议)
在内容浏览器:
- 新建 Material:
M_Fire_Sprite_Soft - 材质设置:
- Blend Mode:Translucent(半透明)
- Shading Model:Unlit(不受光照,便宜稳定)
- (可选)勾选 Two Sided

6.3 材质里必须有的 2 条线(最小版)
(1) 颜色:用 Particle Color 控制
- 把
Particle Color (RGB)连接到Emissive Color- 或者
Emissive = ParticleColor.rgb * 强度系数(比如 5~20)

- 或者
(2) 透明:用软边遮罩 × Particle Alpha
你需要一个"软边遮罩":
- 用一张软边圆形贴图
- 导入一个灰度贴图:中心白、边缘黑(或渐变)
- 采样得到
Mask(0~1)

然后:
Opacity = Mask * ParticleColor.a

这样你在 Niagara 里做的 Alpha 曲线才能真正影响透明度。
6.4 把材质用到 Niagara
回到 Niagara:
- 在 Sprite Renderer 里把 Material 替换成
M_Fire_Sprite_Soft

到这一步你会明显感觉:边缘变软、淡出更自然、整体更像火。
7. 让火焰更像"火苗":大小曲线 + 拉伸(可选但强烈建议)
7.1 大小随生命变化:Scale Sprite Size
在 Particle Update 添加:
Scale Sprite Size
给你一条简单好用的曲线(Scale 倍数):
- Age=0.0:0.6
- Age=0.2:1.1
- Age=0.75:0.9
- Age=1.0:0.0

作用:
- 出生别太大(避免一坨)
- 中段长起来(像火苗)
- 末端收缩消失(更自然)
7.2 让火焰"细长":按速度方向对齐/拉伸(Renderer 里找)
在 Sprite Renderer 中找类似选项(不同版本位置不同):
- Alignment / Facing Mode / Sprite Facing
- 如果有
Velocity相关选项,优先尝试:- Alignment = Velocity(或类似)
如果没有"按速度对齐"选项,也可以先跳过,不影响核心效果。
8. 调试清单:出现这些症状怎么修
8.1 像烟不像火
- 提高出生阶段亮度(颜色曲线前段偏黄白)
- 缩短 Lifetime(火焰不该飘太久)
- 增加噪声翻涌,但同时加大 Drag 稳住
8.2 散得太开
- Drag 加大
- Curl Noise Strength 降低
- Cone Angle 缩小
8.3 硬边/硬消失
- Alpha 曲线末端必须到 0
- 材质 Opacity 必须软边(渐变/噪声)
9. 性能小贴士(火焰比喷泉更容易吃性能)
火焰常用透明材质,容易 Overdraw。你至少要有这个直觉:
- 平均存活粒子数 ≈ SpawnRate × 平均Lifetime
如果你:
- SpawnRate 200
- Lifetime 1.5
同时粒子数约 300(这只是数量;透明叠加还会放大成本)
优化优先级建议:
- 先降 Spawn Rate / Lifetime(最有效)
- 缩小屏幕占比(不要让火焰贴满镜头)
- 材质简化(少采样、少复杂噪声)
10. 下一篇预告(第 3 站:爆炸,多 emitter 组合)
下一篇我们将进入第 3 站------爆炸(多 emitter:火球 + 烟 + 火花 + 冲击波) 。
会重点讲:
- 为什么爆炸一定要拆 emitter(每层职责不同)
- 火球/烟/火花/冲击波各自的 Spawn 方式(Burst vs Rate)
- 时间节奏:谁先出现、谁后出现、持续多久
- 以及爆炸特效最常见的"看起来很假"的原因(比例、速度、淡出与材质)