UE5 动态天气系统:雨、雪、雾的 Niagara 实现方案
上周有位学员在项目评审会上被主美质疑:“为什么你的雨滴看起来像代码故障?” 这个问题其实很典型——很多刚接触UE5特效的开发者,习惯用粒子系统(Cascade)做天气,结果要么性能爆炸,要么效果生硬。实际上,Niagara 的模块化架构为动态天气提供了更优雅的解决方案。今天我们就用三个实操案例,从雨、雪到雾,手把手拆解 Niagara 的实现逻辑。
—
一、雨滴系统:从粒子发射到碰撞交互
1.1 基础发射器配置
打开 UE5.3 的 Niagara 编辑器,新建发射器模板选择 “Sprite Renderer”。在 Emitter Properties 中,将 Sim Target 设为 GPU Compute(参考参数:GPU Compute 模式下粒子数上限可达 100000+,而 CPU 模式仅 5000 左右)。关键参数如下:
- Life Cycle:Emitter Duration 设为 0(无限循环),Loop Duration 设为 0.1 秒(控制雨滴密度)
1.2 运动轨迹与重力模拟
在 Particle Update 模块中,添加 Gravity Force(重力加速度设为 -980 cm/s²)。但直接下落的雨滴太生硬,我们需要加入风向扰动:
1. 添加 Noise Force 模块,参数:
– Noise Strength:50~80(控制横向偏移幅度)
– Frequency:0.2~0.5(控制扰动频率)
2. 创建自定义 Wind Vector 参数(Vector 类型),通过蓝图或材质参数集传递实时风向
1.3 碰撞与溅射效果
这是学员最常翻车的地方。在 Collision 模块中:
当雨滴碰撞地面时,通过 Generate Spawn Events 节点触发子发射器(溅射水花)。子发射器参数建议:
—
二、降雪系统:体积感与飘落轨迹
2.1 雪花形态与渲染优化
雪花的难点在于“体积感”。直接使用 Sprite 渲染会显得扁平,推荐用 Mesh Renderer 加载六边形雪花模型(可在 Blender 中制作,面数控制在 50 以内)。关��设置:
2.2 飘落轨迹算法
雪花不像雨滴直落,需要模拟空气阻力。在 Particle Update 中:
1. 添加 Drag Force(阻力系数 0.1~0.3,根据雪花大小动态调整)
2. 添加 Turbulence Force(湍流强度 200~500,频率 0.05~0.1)
3. 自定义 Spin 模块:让雪花绕 Y 轴旋转,速度 50~100°/秒
2.3 积雪效果(进阶)
通过 Niagara Data Interface 实时写入场景材质参数:
—
三、雾气系统:体积雾与动态密度
3.1 基础体积雾实现
UE5 自带 Exponential Height Fog 但不够动态。用 Niagara 实现流程:
1. 新建 Emitter,选 GPU Compute,粒子类型改为 Volume
2. Spawn Rate:5000~10000(粒子数越多雾越细腻)
3. Particle State:Lifetime 设为 5~10 秒(缓慢消散)
4. Shape Location:选 Box(范围覆盖场景,如 5000x5000x200)
3.2 密度与颜色控制
在 Particle Update 中:
3.3 动态扰动(风场影响)
添加 Noise Force 让雾产生流动感:
3.4 性能优化技巧
—
四、系统整合与蓝图控制
4.1 天气状态切换
在 Blueprint 中创建 WeatherManager 类:
1. 声明 WeatherType 枚举(Rain/Snow/Fog/Clear)
2. 使用 Set Niagara System Variable 节点控制:
– 雨滴发射器的 Spawn Rate(0 表示关闭)
– 雪花的 Turbulence Strength(切换风速)
– 雾的 Density Curve 时间缩放(快速消散或聚集)
4.2 性能监控
实时打印 Niagara Particle Count:
4.3 天气过渡动画
使用 Timeline 节点平滑调整参数:
—
五、总结与进阶建议
这套方案已在《黑神话:悟空》风格的 Demo 中验证,雨雪雾的粒子数可控制在 30000 以内(PC 平台)。如果你遇到以下问题:
进阶方向:
1. 研究 Niagara Data Interface 实现动态天气对材质的影响(如路面湿润)
2. 结合 Chaos Physics 模拟雨滴对树叶的物理碰撞
3. 用 Sound Cue 同步天气音效(雨声、风声)
—
常见问题 FAQ
Q1:Niagara 和 Cascade 哪个更适合做天气系统?
A:Cascade 已停止更新,UE5 推荐全部使用 Niagara。尤其 GPU Compute 模式,性能比 Cascade 高 3~5 倍。
Q2:为什么我的雨滴碰撞后不产生溅射?
A:检查子发射器的 Spawn Group 是否与主发射器的 Collision Event 绑定,且子发射器的 Emitter Enabled 需勾选。
Q3:雪花飘落时出现方块状闪烁?
A:这是 Sorting 排序导致的 Z-fighting。将 Sort Mode 设为 None,或增大 Sort Order 差值(如雪花设为 100,其他粒子设为 0)。
Q4:雾的粒子数超过 50000 就闪退?
A:GPU 显存不足。降低 Max Particles 到 20000,并开启 Local Space 模式。同时检查 Particle Size 是否过大(建议 50~100 单位)。
Q5:如何让天气系统随关卡时间变化?
A:在 Blueprint 中用 Event Tick 驱动 Timeline,根据时间比例调整 Niagara 参数。例如 0~30 分钟为晴天,30~35 分钟过渡为雨天。

评论(0)