84.粒子系统性能影响及优化思路

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

×

喜欢就点赞,疼爱就打赏