UE5 Niagara 系列(02):火焰(噪声 + 颜色曲线 + 透明淡出)——从喷泉思路升级到可用火焰

系列路线:

01 喷泉(重力 + 初速度 + 阻力) ✅
02 火焰(噪声 + 颜色曲线 + 透明淡出) ← 本篇

03 爆炸(多 emitter:火球 + 烟 + 火花 + 冲击波)

04 拖尾(Ribbon)

05 与蓝图交互(User 参数驱动)

06 碰撞与事件(Collision / Event Handler)

07 性能优化与 LOD / Scalability

本文目标:从 0 搭出一个"基础火焰"特效,并把火焰拆成 3 个最核心的能力:

  1. 噪声:让火焰翻涌、不走直线
  2. 颜色曲线:让火焰从亮到暗、有层次
  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

  1. 内容浏览器右键 → FX → Niagara System

  2. 点击 Create Empty Niagara System(空系统)

  3. 命名: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 ~ 26
  • Color = (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 防止噪声把火焰吹散(常见坑)

如果加了噪声后火焰散掉了,按这个顺序处理:

  1. 先加大 Drag(通常最有效)
  2. 降低 Curl Noise Strength
  3. 缩小 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 新建材质(建议)

在内容浏览器:

  1. 新建 Material:M_Fire_Sprite_Soft
  2. 材质设置:
    • 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(这只是数量;透明叠加还会放大成本)

优化优先级建议:

  1. 先降 Spawn Rate / Lifetime(最有效)
  2. 缩小屏幕占比(不要让火焰贴满镜头)
  3. 材质简化(少采样、少复杂噪声)

10. 下一篇预告(第 3 站:爆炸,多 emitter 组合)

下一篇我们将进入第 3 站------爆炸(多 emitter:火球 + 烟 + 火花 + 冲击波)

会重点讲:

  • 为什么爆炸一定要拆 emitter(每层职责不同)
  • 火球/烟/火花/冲击波各自的 Spawn 方式(Burst vs Rate)
  • 时间节奏:谁先出现、谁后出现、持续多久
  • 以及爆炸特效最常见的"看起来很假"的原因(比例、速度、淡出与材质)

相关推荐
a11177615 小时前
Elven Girl Belle - UE4/UE5 角色资源(附下载链接)
ue5·ue4
R-sz18 小时前
UE5.4 打包报错 error C4668 C4067
java·前端·ue5
JK Chen1 天前
UE5 编辑器下添加组件
ue5·编辑器
暮志未晚Webgl1 天前
UE5使用CommonUI实现手柄进行UI导航
ui·ue5·commonui
zhangzhangkeji1 天前
(18)UE5 接口里的两个宏 GENERATED_UINTERFACE_BODY() 与 GENERATED_IINTERFACE_BODY()
ue5
R-sz1 天前
虚幻 UE5 像素流多用户部署,像素流多实例部署
ue5·游戏引擎·虚幻
朗迹 - 张伟1 天前
UE5粒子特效Niagara学习笔记
笔记·学习·ue5
zhangzhangkeji15 天前
UE5 C++(71):文件是否存在,文件夹是否存在,FPaths :: FileExists( const FString & InPath) ;
ue5
妙为15 天前
UE5角色穿过石头穿模
ue5·unreal engine5·角色穿越石头·穿模