Unity 粒子系统优化

问题:

项目中有大量的特效,一个特效Prefab可能包含100-200个GameObject,每个GameObject上都挂有一个粒子系统,但是实际上很多特效只有延时和坐标旋转之类的参数的区别。我看了Prefab文件后发现每个粒子系统分别记录了各自的信息,从而导致整体文件很大,内存占用也比较大


image.png
UWA解答:

如果开发的是一个手游项目,那么一个Prefab下含有100-200个粒子系统是非常不足取的,主要会造成以下几种问题:
同时播放100个以上的ParticleSystem,其ParticleSystem.Update本身的CPU占用会很高。下图为一款游戏在华为6Plus上的表现。可以看到Active Particle数量还没有达到100,其Update耗时就已经占到了5ms;


UWA

ParticleSystem.ScheduleGeometryJobs开销会很高。其耗时主要体现在渲染模块中的Culling阶段,与粒子系统的数量相关,场景中Active粒子系统的数量越多,其开销越高;

子线程中的渲染压力较大

Unity5.3版本以后,粒子系统的渲染虽然在主线程中占用很小,但并不意味它没有耗时,其耗时在渲染线程中,当渲染线程压力过大时,主线程同样会出现等待(Gfx.WaitForPresent),因此同样可能对帧率产生影响;

GPU的渲染压力较高

同屏中渲染的粒子系统越多,其屏幕每帧的填充率越高,从而更加容易造成设备的发热;

内存压力较高

如果一个Prefab上有100-200个粒子系统,并且如果场景中有10个以上这样的Prefab存在,那么其内存占用将在10~25MB内存区间内。

就目前而言,粒子系统仍然是以Clone的形式存在,所以虽然粒子系统可能仅仅是某些参数不同,但其仍然是多个不同的粒子系统。因此,在UWA报告中会显示粒子系统在项目运行时的具体显示数量,以方便研发团队对粒子系统进行关注。如下图所示,一般来说,每帧中粒子系统的数量建议在400以下。


image.png
  1. 每帧中粒子系统的数量建议在400以下。
  2. 粒子时间,粒子最大发射数量。
image.png

特效官方文档

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容