第15章 进阶案例
15.1 案例一:动态粒子效果
15.1.1 效果描述
创建一个动态粒子效果,模拟火焰、水流、烟雾等动态变化的粒子效果,掌握Niagara粒子系统的动态效果创建方法。
15.1.2 实现步骤
- 创建Niagara系统
- 打开UE5编辑器,进入内容浏览器
- 右键点击空白处,选择"FX" -> "Niagara System"
- 在弹出的"Create Niagara System"对话框中,选择"New System from Scratch"
-
点击"OK",输入名称"DynamicParticleEffect",点击"Save"
-
配置发射器
- 双击打开"DynamicParticleEffect",进入Niagara编辑器
- 点击"Emitter Update"选项卡,配置发射器的基本属性
- 设置"Spawn Rate"为1000,每秒生成1000个粒子
-
设置"Max Particles"为10000,最大粒子数量为10000
-
配置粒子初始化
- 点击"Emitter Spawn"选项卡,配置粒子的初始属性
- 添加"Initialize Particle Position"模块,设置粒子的初始位置
- 设置"Position"为(0, 0, 0),粒子从原点开始生成
- 设置"Position Range"为(100, 100, 0),粒子在X和Y方向有随机分布
- 添加"Initialize Particle Velocity"模块,设置粒子的初始速度
- 设置"Velocity"为(0, 0, 1000),粒子向上运动
-
设置"Velocity Range"为(500, 500, 200),粒子速度有随机变化
-
配置粒子更新
- 点击"Particle Update"选项卡,配置粒子的更新属性
- 添加"Update Particle Velocity"模块,设置粒子的速度更新
- 设置"Gravity Scale"为0.3,粒子受到重力影响
- 添加"Update Particle Life"模块,设置粒子的生命周期
- 设置"Life Span"为3.0,粒子生命周期为3秒
- 添加"Turbulence Force"模块,为粒子添加湍流效果
- 设置"Strength"为500,湍流强度为500
-
设置"Frequency"为2.0,湍流频率为2.0
-
配置粒子渲染
- 点击"Particle Render"选项卡,配置粒子的渲染属性
- 添加"Render Particle Sprite"模块,设置粒子的渲染类型为精灵
- 设置"Material"为"DefaultSpriteMaterial",使用默认的精灵材质
- 设置"Sprite Size"为100,粒子大小为100
-
设置"Color"为(1, 0.5, 0, 1),粒子颜色为橙红色
-
添加动态效果
- 添加"Update Particle Color"模块,设置粒子的颜色动态变化
- 点击"Color Curve"右侧的按钮,编辑颜色渐变
- 设置颜色从橙红色(1, 0.5, 0, 1)到黄色(1, 1, 0, 0.8)再到透明(1, 1, 1, 0)
- 添加"Update Particle Size"模块,设置粒子的大小动态变化
- 点击"Size Curve"右侧的按钮,编辑大小渐变
-
设置大小从100到200再到0
-
测试预览
- 点击Niagara编辑器的"Play"按钮,预览粒子效果
- 调整粒子的属性,如湍流强度、频率、颜色渐变等,观察效果变化
- 点击"Save"按钮,保存Niagara系统
15.1.3 扩展与优化
- 添加碰撞检测
- 添加"Particle Collision"模块,设置粒子与场景的碰撞
- 设置"Collision Mode"为"Bounce",粒子碰撞后反弹
- 设置"Bounce Coefficient"为0.5,反弹系数为0.5
-
设置"Friction"为0.3,摩擦系数为0.3
-
添加动态光源
- 添加"Point Light"组件到粒子系统
- 设置光源的颜色、强度和范围
- 使用蓝图或C++,将光源的属性与粒子系统的属性关联
-
例如,根据粒子的数量和颜色,动态调整光源的强度和颜色
-
优化性能
- 使用"GPU Particles"选项,将粒子计算从CPU转移到GPU
- 减少"Spawn Rate"和"Max Particles",根据设备性能调整粒子数量
- 使用"LOD"技术,根据距离调整粒子数量和复杂度
15.2 案例二:交互式粒子效果
15.2.1 效果描述
创建一个交互式粒子效果,玩家可以与粒子效果进行交互,如射击火焰、吹散烟雾等,掌握Niagara粒子系统的交互式效果创建方法。
15.2.2 实现步骤
- 创建Niagara系统
- 打开UE5编辑器,进入内容浏览器
- 右键点击空白处,选择"FX" -> "Niagara System"
- 在弹出的"Create Niagara System"对话框中,选择"New System from Scratch"
-
点击"OK",输入名称"InteractiveParticleEffect",点击"Save"
-
配置发射器
- 双击打开"InteractiveParticleEffect",进入Niagara编辑器
- 点击"Emitter Update"选项卡,配置发射器的基本属性
- 设置"Spawn Rate"为500,每秒生成500个粒子
-
设置"Max Particles"为5000,最大粒子数量为5000
-
配置粒子初始化
- 点击"Emitter Spawn"选项卡,配置粒子的初始属性
- 添加"Initialize Particle Position"模块,设置粒子的初始位置
- 设置"Position"为(0, 0, 0),粒子从原点开始生成
- 设置"Position Range"为(200, 200, 0),粒子在X和Y方向有随机分布
- 添加"Initialize Particle Velocity"模块,设置粒子的初始速度
- 设置"Velocity"为(0, 0, 500),粒子向上运动
-
设置"Velocity Range"为(200, 200, 100),粒子速度有随机变化
-
配置粒子更新
- 点击"Particle Update"选项卡,配置粒子的更新属性
- 添加"Update Particle Velocity"模块,设置粒子的速度更新
- 设置"Gravity Scale"为0.5,粒子受到重力影响
- 添加"Update Particle Life"模块,设置粒子的生命周期
-
设置"Life Span"为4.0,粒子生命周期为4秒
-
配置粒子渲染
- 点击"Particle Render"选项卡,配置粒子的渲染属性
- 添加"Render Particle Sprite"模块,设置粒子的渲染类型为精灵
- 设置"Material"为"DefaultSpriteMaterial",使用默认的精灵材质
- 设置"Sprite Size"为50,粒子大小为50
-
设置"Color"为(0.5, 0.7, 1.0, 0.8),粒子颜色为浅蓝色
-
添加交互功能
- 添加"Particle Collision"模块,设置粒子与场景的碰撞
- 设置"Collision Mode"为"Bounce",粒子碰撞后反弹
- 添加"Event Receiver"模块,创建一个事件接收器
- 设置"Event Name"为"PlayerInteraction",接收玩家交互事件
- 添加"Apply Force Event"模块,根据事件参数对粒子施加力
-
设置"Force"为(1000, 0, 0),根据事件参数调整力的大小和方向
-
创建玩家交互蓝图
- 打开蓝图编辑器,创建一个新的蓝图类,继承自"Actor"
- 添加"Sphere Component"组件,设置为触发体积
- 添加"Niagara Component"组件,设置为之前创建的交互式粒子系统
-
在蓝图中添加事件处理逻辑:
- 当玩家进入触发体积时,发送"PlayerInteraction"事件
- 根据玩家的位置和方向,设置事件参数
-
测试预览
- 将蓝图拖放到场景中
- 运行游戏,玩家进入触发体积,观察粒子效果的变化
- 调整交互参数,如力的大小、方向等,观察效果变化
- 点击"Save"按钮,保存Niagara系统和蓝图
15.2.3 扩展与优化
- 添加多种交互方式
- 添加鼠标点击交互,玩家点击粒子效果,产生特定的交互效果
- 添加键盘输入交互,玩家使用键盘控制粒子效果的属性
-
添加手势交互(适用于移动端),玩家使用手势控制粒子效果
-
添加反馈效果
- 当玩家与粒子效果交互时,添加视觉反馈(如颜色变化、粒子爆炸等)
- 添加听觉反馈(如音效),增强交互体验
-
添加触觉反馈(如震动,适用于移动端),增强交互体验
-
优化性能
- 使用"GPU Particles"选项,将粒子计算从CPU转移到GPU
- 减少"Spawn Rate"和"Max Particles",根据设备性能调整粒子数量
- 使用"Distance Culling"技术,根据距离剔除粒子
15.3 案例三:高级渲染效果
15.3.1 效果描述
创建一个高级渲染效果,使用Niagara粒子系统的高级渲染特性,如体积渲染、屏幕空间反射、景深等,掌握Niagara粒子系统的高级渲染效果创建方法。
15.3.2 实现步骤
- 创建Niagara系统
- 打开UE5编辑器,进入内容浏览器
- 右键点击空白处,选择"FX" -> "Niagara System"
- 在弹出的"Create Niagara System"对话框中,选择"New System from Scratch"
-
点击"OK",输入名称"AdvancedRenderingEffect",点击"Save"
-
配置发射器
- 双击打开"AdvancedRenderingEffect",进入Niagara编辑器
- 点击"Emitter Update"选项卡,配置发射器的基本属性
- 设置"Spawn Rate"为2000,每秒生成2000个粒子
-
设置"Max Particles"为20000,最大粒子数量为20000
-
配置粒子初始化
- 点击"Emitter Spawn"选项卡,配置粒子的初始属性
- 添加"Initialize Particle Position"模块,设置粒子的初始位置
- 设置"Position"为(0, 0, 0),粒子从原点开始生成
- 设置"Position Range"为(300, 300, 0),粒子在X和Y方向有随机分布
- 添加"Initialize Particle Velocity"模块,设置粒子的初始速度
- 设置"Velocity"为(0, 0, 800),粒子向上运动
-
设置"Velocity Range"为(400, 400, 200),粒子速度有随机变化
-
配置粒子更新
- 点击"Particle Update"选项卡,配置粒子的更新属性
- 添加"Update Particle Velocity"模块,设置粒子的速度更新
- 设置"Gravity Scale"为0.2,粒子受到重力影响
- 添加"Update Particle Life"模块,设置粒子的生命周期
- 设置"Life Span"为5.0,粒子生命周期为5秒
- 添加"Turbulence Force"模块,为粒子添加湍流效果
- 设置"Strength"为800,湍流强度为800
-
设置"Frequency"为1.5,湍流频率为1.5
-
配置粒子渲染
- 点击"Particle Render"选项卡,配置粒子的渲染属性
- 添加"Render Particle Sprite"模块,设置粒子的渲染类型为精灵
- 创建一个高级材质,使用PBR材质,添加Emissive和Subsurface Scattering效果
- 设置"Material"为新创建的高级材质
- 设置"Sprite Size"为80,粒子大小为80
-
设置"Color"为(1, 0.2, 0, 1),粒子颜色为红色
-
启用高级渲染特性
- 在项目设置中,启用高级渲染特性:
- 打开"Project Settings" -> "Rendering" -> "Post Processing"
- 启用"Screen Space Reflections"
- 启用"Depth of Field"
- 启用"Volumetric Fog"
-
在Niagara编辑器中,配置渲染选项:
- 启用"Enable Screen Space Reflections"
- 启用"Enable Depth of Field"
- 启用"Enable Volumetric Fog"
-
测试预览
- 点击Niagara编辑器的"Play"按钮,预览粒子效果
- 调整高级渲染特性的参数,观察效果变化
- 点击"Save"按钮,保存Niagara系统和材质
15.3.3 扩展与优化
- 添加体积渲染
- 使用体积纹理和体积渲染技术,模拟粒子的体积特性
- 创建体积材质,使用Volumetric Fog效果
-
在Niagara编辑器中,配置体积渲染选项
-
添加动态光照
- 添加动态光源,如Point Light、Spot Light等
- 将光源的属性与粒子系统的属性关联
-
根据粒子的数量和颜色,动态调整光源的强度和颜色
-
优化性能
- 使用"GPU Particles"选项,将粒子计算从CPU转移到GPU
- 减少"Spawn Rate"和"Max Particles",根据设备性能调整粒子数量
- 调整高级渲染特性的质量设置,平衡效果和性能
15.4 案例四:性能优化案例
15.4.1 效果描述
优化一个复杂的粒子系统,提高其性能和稳定性,掌握Niagara粒子系统的性能优化方法。
15.4.2 实现步骤
- 创建复杂粒子系统
- 打开UE5编辑器,进入内容浏览器
- 右键点击空白处,选择"FX" -> "Niagara System"
- 在弹出的"Create Niagara System"对话框中,选择"New System from Scratch"
-
点击"OK",输入名称"ComplexParticleEffect",点击"Save"
-
配置复杂发射器
- 双击打开"ComplexParticleEffect",进入Niagara编辑器
- 添加多个发射器,分别模拟不同的粒子效果
- 配置每个发射器的粒子属性、物理模拟和渲染选项
-
设置较高的粒子数量和复杂的材质,模拟性能瓶颈
-
性能分析
- 使用"Stat Niagara"和"Stat Unit"命令,分析粒子系统的性能瓶颈
- 使用Session Frontend和Unreal Insights,深入分析CPU、GPU和内存的性能瓶颈
-
识别性能瓶颈,如过多的粒子数量、复杂的材质、高级渲染特性等
-
优化策略制定
- 减少粒子数量:根据场景需求,减少不必要的粒子数量
- 使用GPU粒子:将粒子计算从CPU转移到GPU,减少CPU负载
- 简化材质和纹理:简化材质的复杂度,减少纹理大小
- 使用LOD技术:根据距离,使用不同级别的粒子系统
-
优化内存使用:减少内存占用,适应设备的内存限制
-
优化实施
- 修改粒子系统设置:
- 将"Spawn Rate"从5000减少到2000
- 将"Max Particles"从50000减少到20000
- 启用"GPU Particles"选项
- 优化材质和纹理:
- 使用简单的材质,减少着色器指令数量
- 将纹理大小从2048x2048减少到1024x1024
- 使用压缩纹理格式
-
添加LOD设置:
- 创建LOD级别,根据距离使用不同的粒子数量
- 当距离超过1000时,将粒子数量减少50%
- 当距离超过2000时,将粒子数量减少80%
-
验证优化效果
- 运行游戏,使用"Stat Niagara"和"Stat Unit"命令,验证性能优化效果
- 使用Session Frontend和Unreal Insights,分析优化前后的性能差异
- 确保优化后的粒子系统在保持良好视觉效果的同时,性能得到显著提升
15.4.3 扩展与优化
- 进一步优化
- 使用实例化渲染:使用实例化渲染技术,减少绘制调用次数
- 合并粒子发射器:将多个发射器合并为一个,减少绘制调用次数
-
禁用不必要的渲染特性:根据设备性能,禁用不必要的渲染特性
-
动态优化
- 根据帧率动态调整:根据当前帧率,动态调整粒子数量和复杂度
- 根据设备性能动态调整:根据设备性能,自动调整粒子系统的设置
-
根据场景需求动态调整:根据场景的重要性,动态调整粒子系统的复杂度
-
监控和维护
- 定期监控性能:在开发过程中,定期监控粒子系统的性能
- 记录性能数据:记录优化前后的性能数据,便于分析和比较
- 持续优化:随着项目的进展,持续优化粒子系统的性能
本章小结
本章介绍了四个进阶案例,包括创建动态粒子效果、交互式粒子效果、高级渲染效果和性能优化案例,通过这些案例,读者可以掌握Niagara粒子系统的进阶使用方法和优化技巧。每个案例都包含详细的实现步骤和扩展优化建议,帮助读者进一步巩固所学的知识和技能。
下一章将介绍高级案例,包括创建大规模粒子系统、与其他系统集成的粒子效果和高级应用案例等内容。