84.性能优化-GPU-粒子系统优化-粒子系统性能影响及优化思路
84.1 知识点
粒子系统为什么会带来性能消耗
CPU 消耗
粒子系统里多数模块由 CPU 驱动模拟,每帧要做大量工作,例如:粒子生命周期管理、位置、速度、加速度、物理碰撞、回调调用、排序、包围盒更新、剔除、脚本交互等。这些都会带来 CPU 消耗。若粒子之间材质或网格不一致,还会打断批处理,产生额外 DrawCall;不用批处理时,DrawCall 本身也会带来更多开销。
GPU 消耗
粒子可见就需要参与渲染。提交到 GPU 后,顶点阶段、片元阶段、纹理采样、透明混合、阴影与光照等都会产生消耗,半透明粒子更容易造成 OverDraw,明显增加 GPU 负担。
由于粒子系统往往依赖大量粒子叠加才能表现复杂效果,粒子数量一旦失控,会在 CPU 和 GPU 两侧同时放大开销,因此需要特别关注粒子系统的性能影响与优化。
粒子系统主要优化思路
CPU 侧
- 目标:少算粒子——减少每帧处理的粒子数,以及每个粒子要计算的内容。
- 方向:减少并发粒子数、减少启用的模块、降低排序开销、减少脚本调用;善用剔除与对象池;控制 DrawCall 等。
GPU 侧
- 目标:少算像素——减少屏幕上参与计算的像素数,以及每个像素计算的内容。
- 方向:控制粒子覆盖面积、控制着色器复杂度、控制几何复杂度等。
84.2 知识点代码
Lesson84_性能优化_粒子系统优化_粒子系统性能影响及优化思路.cs
public class Lesson84_性能优化_粒子系统优化_粒子系统性能影响及优化思路
{
#region 知识点一 粒子系统为什么会带来性能消耗
//CPU消耗:
//粒子系统中
//大多数模块都是CPU驱动模拟的,每帧会做很多工作
//比如
//粒子的生命周期管理、位置、速度、加速度、物理碰撞、回调函数调用、
//排序、包围盒更新、剔除、脚本交互 等等内容
//这些内容需要CPU每帧计算,那么它自然会带来CPU消耗
//若不同粒子之间的材质和网格不同,还会打断批处理,产生额外DrawCall
//如果不使用批处理方案,在DrawCall上也存在更多开销
//GPU消耗:
//粒子能被看到肯定需要渲染
//那么当粒子被提交到GPU渲染时
//顶点阶段的计算、片元阶段的计算、纹理采样、透明混合、阴影、光照影响都会给GPU带来消耗
//尤其是半透明粒子容易造成OverDraw,会显著增加GPU负担
//由于粒子系统的表现特殊性
//往往需要依赖 大量粒子叠加 来表现复杂效果
//如果不加控制,粒子数量增长会在 CPU、GPU 两方面同时放大开销
//因此需要特别关注粒子系统的性能影响与优化
#endregion
#region 知识点二 粒子系统主要优化思路
//CPU侧
//优化目标 —— 少算粒子
//降低每帧要处理的粒子数
//降低每个粒子要计算的内容
//主要优化点:
//减少并发量
//减少工作模块
//减少排序开销
//减少脚本调用
//利用剔除
//利用对象池
//控制DrawCall
//等等
//GPU
//优化目标 —— 少算像素
//降低屏幕上计算的像素数
//降低每个像素计算的内容
//主要优化点:
//控制覆盖面积
//控制着色器复杂度
//控制几何复杂度
//等等
#endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com