AI WORKFLOW
本博客由 AI 工作流自动管理,文章根据博主的个人笔记及与 GPT 的对话习惯自动整理,主要用于博主复习、整理与查阅。内容可能存在错误或 AI 幻觉,请结合可靠资料自行鉴别。
Niagara与Material
Sprite Rendering 的 Alignment
Sprite Rendering 的 Alignment(对齐)是非等比拉伸的黄金搭档。简单来说,Size 决定了粒子被拉得有多长,而 Alignment 决定了这个长条朝哪个方向转。特效优化和动态模糊,经常会用到这里的底层逻辑。
1. Unaligned(未对齐 / 默认模式)
粒子在原地“躺平”,不会根据自己飞行的方向旋转。它的旋转角度是固定的(默认朝上),或者通过 Sprite Rotation 节点指定角度。
适用场景:圆形、没有方向性的东西。比如漫天飘落的圆形雪花、圆滚滚的烟雾球、魔法阵的底图。因为它们是圆的,不怎么飞,看起来都一样,不需要跟着速度转。
2. Velocity Aligned(速度对齐 / 绝杀模式)
粒子的 X 轴和 Y 轴会死死盯住它当前运动的速度方向(Velocity)。它往哪飞,它的头就往哪边指。
适用场景:有明显方向感的运动物体。比如刀光挥舞甩出的火花(Sparks)、疾风骤雨中的雨滴、弓箭射出时的拖影。
高阶组合技:Velocity Aligned + Non-Uniform Size = 完美的假运动模糊。 当粒子速度越快时,把它拉得越长,并且让它顺着速度方向对齐,就能用极低的性能开销做出极其逼真的“高速残影”效果。
3. Custom Alignment(自定义对齐 / 硬核模式)
引擎把方向盘彻底交给你,需要自己提供一个 Vector3(三维向量)来告诉粒子该朝哪边指。它不管速度,也不管默认朝向,只听你算出来的那个向量。
适用场景:被外力强行扭曲的特效。比如粒子明明在往上飞,但受到一个神秘黑洞引力的影响,要求所有粒子必须用针尖指向黑洞中心。这时候就要在解算器里算出一个引力向量,然后喂给自定义对齐。
火花 Emitter 模板
- Noise Force:强度和频率参数。
- Engine Owner Position:粒子系统在世界中的位置。Simulation Position 是模拟位置,根据 Local Space 判断。
- Size by Speed:根据粒子速度缩放粒子尺寸。
- Initial Location to Velocity:创建基于初始位置的速度节点,以后经常会用到。
- Velocity、Facing:基于速度的朝向。
- Curve + Random:分配数值、得到权重数据的方法。
火花 Emitter 模板的材质
Texture Sample(纹理采样)
提供火花的“基础形状”。RGB 往往不代表颜色,而是代表三个不同的黑白遮罩(Mask)。通过分别拖出 R 和 G 的线,提取出两种不同的火花形态,准备对它们进行混合。
Dynamic Parameter(动态参数)
这是材质留给粒子系统(Niagara 或 Cascade)的“自定义遥控器”。材质本身是静态的,要想让每个火花粒子看起来不一样(有的模糊、有的清晰),就需要粒子系统实时传数据进来。
这个节点接收外部传来的数值(命名为 Blur),并将数值传递给 Lerp 的 Alpha,以此实时遥控火花的模糊程度。
Lerp(Linear Interpolate,线性插值)
根据 Alpha 的指示,在 A(形状 1)和 B(形状 2)之间平滑切换。数学公式是:
Output = A × (1 - Alpha) + B × Alpha
这是 Shader 中用得最多的节点。只要需要“从状态 1 过渡到状态 2”,第一时间就要想到 Lerp。
Particle Color(粒子颜色)
获取粒子系统赋予该粒子的颜色和整体透明度。
- RGB 端口:直接连接最终材质的 Emissive Color(自发光颜色),决定火花是红色、黄色还是蓝色。
- Alpha 端口:代表粒子本身的生命周期透明度,比如火花诞生时不透明,快消失时逐渐变为全透明。
Multiply(乘法)
将 Lerp 选出来的形状和粒子本身的透明度结合起来。黑色在计算机里的数值是 0,白色是 1,任何数乘以 0 都是 0(不可见)。
所以把 Particle Color 的透明度变化(A 端口)乘以计算好的火花形状(B 端口),就能得到最终的透明度遮罩,最后连入材质的 Opacity(不透明度)。
- 需要过渡和混合,找 Lerp。
- 需要控制强度,找 Multiply。
- 需要做时间动态,找 Time 配合 Sine。
数据覆盖陷阱
假设这个盒子里原本已经装好了数据:
(X=1, Y=0.5, Z=2, W=0)
现在只想更新 W 格子里的数据,比如把 W 设置为粒子的当前速度。如果不加思考,直接用一个 Map Set 节点,把计算好的速度值硬塞给 DynamicMaterialParameter3,Niagara 会认为:“你要给我一个新的盒子。你只告诉了我新盒子的 W 是多少,没告诉我 X、Y、Z 是多少,那我就默认它们全是 0。”
结果就是原来的盒子被整个替换,变成:
(X=0, Y=0, Z=0, W=新速度)
前三个格子里的数据瞬间消失,材质效果直接“爆炸”或变黑。
Niagara 和材质的沟通
依照速度控制贴图读取,伪造更好看的动态模糊。
Niagara 和材质的沟通其实就是 Binding。使用 Dynamic Parameter,最多支持四组、每组四个通道。注意在节点内调用时不要覆盖其他值。
Particle Color 也是通过类似的方法传递信息,只是名字不同而已。如果可能,甚至可以强行覆盖一些属性来传递自定义值,例如将 Color 当作自定义 Density 使用。
Curve Atlas
用颜色控制的方法:Curve Atlas。它是对 Niagara 进行更精细控制的一种方法。

Flare 主材质制作
Mask Pick 节点
DepthFade 节点
DepthFade 可以根据深度对透明物体做淡化。注意这依赖引擎的深度通道。根据 Alpha 的 DepthFade Function,你值得拥有。

要从物理的角度去理解所有特效,比如光斑效果是衰减的反比例函数。



Lerp(Linear Interpolate,线性插值)
这是整个图形学、Shader 编写和特效制作中,最伟大、最常用、最核心的节点,没有之一。
数学逻辑是:
Result = A × (1 - Alpha) + B × Alpha
也可以写成:
Result = A + (B - A) × Alpha
Lerp 不只可以混合两种颜色,万物皆可 Lerp。

Alpha 和 RGB 的真实关系
在图形学底层,Alpha 根本不是透明度,它只是一个权重系数(Weight / Factor),就是一个没有任何物理意义的浮点数(Float)。RGB 也不过是三个浮点数的集合 (R, G, B)。
当 Alpha 超出 0 到 1 的范围时
对于美术同学,可以这样理解公式 A + (B - A) × Alpha:B - A 是从 A 到 B 的距离,Alpha 可以理解为进度条。

Clamp 和 Saturate
Clamp 的作用就是强行拿一把剪刀,把超出的部分咔嚓剪掉。只要数字小于 0,就强行变成 0;在 0 到 1 之间的,照样放行。
如果只想把数值限制在 0 到 1 之间,永远用 Saturate 节点,而不用 Clamp。因为 Saturate 在现代显卡底层是完全免费(0 性能消耗)的,它是跟着上一步计算顺手完成的指令。
UE 常用的几个光照模式
Default Lit(默认光照)
UE 最标准、用得最多的 PBR 模式。
它可以接受场景里的光照,产生阴影、高光和反射。需要给它提供基础色、金属度、粗糙度和法线。
应用场景:游戏里 90% 的实体模型。雪山、石头、角色的盔甲、木头箱子,全都是这个模式。
Unlit(无光照)
“叛逆者”模式。它完全无视场景里有没有太阳、有没有手电筒,连高光、阴影、粗糙度这些引脚都直接锁死,不让我连。
应用场景:
- 绝大多数粒子特效:火焰、激光、魔法阵。这些东西本身就是光源,不需要被别的光照亮,用 Unlit 可以极大地节省性能。
- UI 界面:血条、小地图。
- 卡通渲染:很多二次元游戏会强制把角色设为 Unlit,然后用纯数学节点自己手写一套卡通光影,以此掌控绝对的画面风格。
Clear Coat(透明涂层)
模拟表面有一层透明漆的效果。
应用场景:极品飞车的车漆、表面积水的瓷砖,或者给机甲做一层极其光滑的烤漆质感。但它的底层其实计算了两遍光照(底漆一遍、表面透明漆一遍),比较费性能。
Two Sided Foliage(双面植物)
这是专门给树叶和草皮准备的。
光不仅能照在叶子表面,还能透过去,让叶子背面看起来有一种晶莹剔透的半透光感,是 Subsurface Scattering 的廉价版。
0403 灰尘材质
非常轻的粒子形态的模拟要点:体积大、质量小、阻力大,不会有过高的速度;容易被空气和气流影响,所以需要较高的 Noise。节奏不宜太强。
在调整类似的粒子效果时,可以先选择一条路线。通常是先完成物理形态的模拟,再进行亮度、透明度等调整,最后整体观察并做微调。
灰尘在烧尽时发的光不会太强。如果做得太强会反常识,因为余烬的温度一般是低的。
在处理节奏时,这种灰尘或余烬通常是在主要效果表现完成后,作为环境元素存在,给玩家一种主要的故事(爆破)讲完了,但残余能量仍然“余韵犹存”的感觉。
0405 烟雾材质
在 Unreal Engine 的材质编辑器中,Particle Color 和 Dynamic Parameter 都是用于粒子系统传入数据的节点,但是它们的数据来源、控制方式和用途有本质区别。
简单来说,Particle Color 是粒子的主颜色,由粒子系统自动管理;Dynamic Parameter 是“自定义数据管道”,需要手动在粒子系统中设置,用来传递任意逻辑值。
如何进行补帧
使用 SubUV 进行交叉补帧。Motion Vector 数据图主要存储方向信息,一些 DCC 软件都可以输出这张图,例如 Houdini、Maya。

0406 向量
颜色本质上就是向量。向量最关键的两个属性就是方向和强度。
乘以等值时,相当于等比放大坐标系,可以等比例增加长度,但方向不变。
向量维度不同,可以表示定值(1D,单轴)、平面向量(2D,XY 直角坐标系)、空间向量(3D,XYZ 三维直角坐标系)。
- 2D 向量主要用于贴图置换、UV 坐标操作、平移等。
- 3D 向量主要用于三维世界位置移动、缩放、计算光影(法线)、旋转等。
一般软件生成的贴图(非 HDR)只能存储正值数据。所以类似法线贴图、向量贴图等,会以 0.5 作为中值,以牺牲精度的方式存储负值。
0407 半透明材质光照
半透明材质是特效使用最多的一种材质。在 UE 中,这种材质对光照的支持有限,因为 UE 使用延迟渲染。
调整半透明材质的 Shading Mode:
- Volumetric:光照按照体素方法计算,无论外形如何。
- Per Vertex:只计算每个顶点。
0501 烟雾模拟
根据实际使用过程适当修饰,增加必要的 Dynamic Parameter。在构建模板时需要仔细思考:每增加一个调整点,都会增加调整的复杂度,也会增加性能消耗。
烟雾效果想要做好
- 与实体的交互:Opacity Based Depth Fade,伪造 AO。
- 尽量保证烟雾粒子之间的连接:尺寸变化、发射数量。
- 正确合理的光照:Lit Mode、Normal。
- 烟雾越薄,AO、Normal 应该越弱,例如蒸汽、寒气、干冰;烟雾越厚,AO、Normal 应该越强,例如燃油烟、大型爆炸、火灾。
- 随机化:随机的 SubUV 贴图、随机旋转。
一定要在 PIE 模式下看效果。
烟雾是特效中性能最容易爆炸的部分:
- 保持烟雾粒子之间连续即可,尽量减少重叠。通过透明度调整厚重感,而不是数量。
- 使用 Particle Cutout 功能裁剪无用的 SubUV 像素,可以在一定程度上缓解烟雾的高性能消耗问题。
- 烟雾方片和高消耗材质很容易造成 Overdraw,所以切记不要通过疯狂增加发射数量来提升烟雾细节,这非常不专业。
0502 石块材质
Roughness 是目前 PBR 渲染中最有特点的部分,能模拟物体微表面对光的反射。Roughness 越高,反射越模糊。
- 反射效果取决于场景中的反射情况以及高光强度,越强则反射越亮。
- 默认情况下(非光线追踪),UE 的反射由烘焙的反射球加屏幕空间反射 SSR 计算,所以并不准确。因此物体反射在场景和材质预览窗口里大不相同,也是常有的情况。
Static Mesh LOD 根据模型占屏比例调整面数,以节省性能。
- 了解 Mesh Editor 中模型 LOD 编辑的部分,主要是 LOD 数量、每一级的占屏比例和面数减少级别。
- 目前 Niagara 还不支持动态模型 LOD,所以依据物体大小正确评估需要的模型面数,并合理使用最合适的 LOD,在项目中至关重要。
- Mesh 在渲染时的消耗远高于默认 Sprite,尤其是面数较高的情况。所以要尽量使用低面模型(修改最低、最高 LOD),或者直接烘焙成 SubUV 贴图使用。
