0
点赞
收藏
分享

微信扫一扫

游戏开发45课 性能优化4


 

2.6 粒子

粒子特效也是性能的一个大杀手,主要体现在:

  • 每帧计算量大。涉及发射器/效果器/曲线插值等,耗费CPU性能。
  • 频繁操作内存。粒子在生命周期里,实例持续不断地创建/删除,即便有缓存机制下,依然避免不了内存的频繁读取和碎片化。
  • 每帧更新数据到GPU。从Lock顶点Buffer到写入数据到GPU,会引发线程等待,也加重CPU到GPU带宽的负担。
  • 增加大量Draw Calls。粒子特效通常五花八样,使用很多材质,导致引擎无法合批优化,大量增加绘制次数。
  • 导致Overdraw(过绘制)。粒子一般会开启Alpha Blend,在同屏粒子多的情况下,会造成严重的Overdraw。(下图)

游戏开发45课 性能优化4_粒子特效

游戏Z主界面的过绘制情况,越白代表过绘制越严重,可以看出用了粒子的地方,颜色趋向白色。

即然粒子导致性能严重下降,首先得从资源上着手优化和规范。具体方式有:

  • 优化粒子属性。关闭阴影,关闭光照;若可以去掉纹理的Alpha通道,并关闭Alpha Blend和Alpha Test;
  • 禁用粒子的高级特效。如模型粒子/模型发射器/粒子碰撞体等。
  • 用最少的粒子效果器。关闭不必要的粒子效果器,采用简单的方式代替。
  • 控制粒子的材质数量。一个特效通常包含了若干个粒子系统,它们尽量使用内置材质,使用相同的材质实例。
  • 控制粒子的尺寸和贴图大小。可以粒子的尺寸,可以减缓过绘制,控制贴图大小,可以减少带宽和提高渲染性能。
  • 制定粒子特效美术规范。下面是游戏Z的粒子规范。

游戏Z粒子美术规范

  • 单个粒子的发射数量不超过50个。
  • 减少粒子的尺寸,面积越大就会消耗更多的性能。
  • 粒子贴图必须是2的N次方,尽量控制64x64以内,极少量128x128或256x256,最大不超过256x256。
  • 尽可能去掉粒子贴图的Alpha通道。
  • 尽量不用Alpha Test。
  • 尽量使用已有的材质,提高合并渲染的优化概率。
  • 材质优先用Mobile目录下的材质。
  • 尽可能不用模型做粒子,如果使用,要控制模型面数在100以内,最大粒子数在5以内。
  • 单个特效渲染数据限制:
  • 小型特效(如受击特效、Buff特效)的面数和顶点数在80以内,贴图在64*64以内,材质数2个以内。
  • 中型特效(如技能特效)的面数和顶点数在150以内,贴图在128*128以内,材质数4个以内。
  • 大型特效(如全局特效、大火球)的面数和顶点数在300以内,贴图在256*256以内,材质数6个以内。

2.7 材质

材质若控制不好,会破坏引擎的合批优化,提高渲染消耗。所以在项目前期,就有必要对材质做管理和规范。

  • 充分使用引擎内置材质。引擎内置材质能满足基本材质需求,而且通常做了优化,所以首选内置材质。如果是移动游戏,一般引擎也有移动版的材质库。
  • 建立共享的自定义材质库。如果引擎内置材质不满足项目需求,就需要通过添加自定义材质来解决。对于自定义材质,要妥善管理,对它们进行分类,按规律命名。这样对材质共享和管理都大有裨益。
  • 定期检查新加入的材质是否与已有的重复。如果有相似的材质,则删除重复的。这个工作可以由主程或主美执行,也可以通过工具协助检查。

2.8 制定美术规范

制定美术规范时,需与主美/主策/制作人协商,结合项目具体情况,给出合理的美术规范参数,并撰写成文档。定好规范后,有必要定时检查项目里的所有美术规范是否符合规范,揪出不符合的资源,让美术修改。检查美术是否合规,可以写批处理工具,提高效率。

特效/场景/角色资源若不能批量处理成高中低配版本,就建议美术为各个画质等级制作不同的资源。

举报

相关推荐

0 条评论