特效性能与预算

自动关联目录:特效性能与预算

1. 定位

特效的性能问题几乎总在"峰值"而不是"平均":平时很流畅,一场团战/一次爆炸就掉到个位数帧率。

一句话定位:特效必须有预算制度——单个特效的上限 + 同屏总量的上限,两者都要有。

2. 成本构成

成本 ≈ 粒子数 × 每粒子模拟复杂度
     + 像素填充(overdraw)
     + 生成/销毁开销
     + (若为粒子光源)光照成本
来源说明
模拟CPU 粒子占 Game 线程;GPU 粒子占 GPU(见 Niagara 模拟与 GPU 粒子)
填充率(overdraw)半透明特效的主要成本——大面积烟雾/火焰叠加
生成/销毁频繁 Spawn 系统的开销(见 特效池化与复用)
粒子光源极贵(见 Niagara 概览)
半透明排序见 半透明与排序

最容易被低估的是 overdraw:一个"看起来很小"的烟雾,铺满屏幕时每个像素都被叠了十几层。用 Quad Overdraw 视图检查(见 渲染调试)。

3. 预算制度

层级做法
单个特效限定最大粒子数、最大屏幕占比
同类特效同时存在的实例上限
同屏总量全局的特效预算或管理器
降级按画质档/平台降低粒子数与效果
距离剔除远处不生成或降低规模

推荐做法:做一个特效预算管理器,超预算时按优先级拒绝或降级,而不是靠美术自觉。

4. 优化手段

手段说明
减少 overdraw缩小尺寸、减少层数、优化材质
GPU 粒子大规模用(见 GPU 粒子篇)
池化见 特效池化与复用
LOD / 降级远处与低画质档简化
PSO 预缓存特效材质也要预缓存,否则首现卡顿(见 PSO 预缓存)
减少粒子光源严格控制数量
合并 Emitter减少开销

特效的 PSO 常常被漏掉:新特效首次出现时编译 PSO → 卡顿。必须纳入预缓存收集。

5. 代价与权衡

设计收益代价什么时候不该用
严格预算峰值可控极端时特效被砍关键演出特效要设高优先级
降 overdraw收益最大视觉密度下降核心演出可以放宽
距离剔除省远处特效消失需要远景氛围时保留低配版
GPU 粒子数量上限高见 GPU 粒子篇—
粒子光源气氛极贵数量必须个位数

6. 踩坑与排查

坑现象怎么验证
只测单个特效峰值测不到压测多个特效同时播放
忽略 overdraw烟雾很卡Quad Overdraw 视图
特效 PSO 没预缓存首现卡顿见 PSO 篇
粒子光源滥用光照成本暴涨统计数量
频繁生成销毁尖峰池化(见池化篇)
移动端不降级崩按平台分级
预算只靠约定迟早超做成机制

7. 排查顺序

1. 压测:多个特效同时播放,看峰值
2. stat unit / profilegpu → 是 CPU(模拟)还是 GPU(填充)
   ├─ CPU → 粒子数 + CPU/GPU 粒子选择
   └─ GPU → overdraw(Quad Overdraw 视图)
3. 检查粒子光源数量
4. 特效 PSO 是否预缓存
5. 建立预算与降级机制

参考