【性能黑榜】掌握了这些规则,你已经战胜了80%的对手!

【性能黑榜】掌握了这些规则,你已经战胜了80%的对手!

上周,我们罗列了在【性能黑榜】上的Top6规则。无论是大家在开发时的疏忽,还是相关知识点的缺失,这些问题的积累最终都会反映到项目的性能表现上。为此,我们将这些规则曝光出来,并且以一个个知识点的形式逐一解读。

今天,我们来继续剖析榜单上的其他问题,包括“精度过高的动画片段”、“包含无用纹理采样的材质”、“粒子数上限超过30的粒子系统”和“引用纹理尺寸大于256的粒子系统”

我们将力图以浅显易懂的表达,让职场萌新或优化萌新深入理解。

性能黑榜是指在【UWA本地资源检测】中前十名检测未通过的触发规则,近80%的项目已躺枪,值得大家高度重视。

1、精度过高的动画片段——86%的项目中招

我们知道,Unity的动画片段中包含着各个动画曲线在每一帧上的关键信息。在很多动画资源当中,关键信息往往是以精度很高的浮点数来进行记录的。

如果动画文件的浮点精度很高,动画片段的表现效果一般来讲也会更好更细致,但是会在内存上带来额外的开销。而适当进行精度压缩,虽然表现效果上会有所降低,但考虑到动画片段的数量和帧数,由此带来的内存节省将会十分可观。

我们建议将精度缩减到3~4位,基于UWA长久以来的实际项目经验,动画片段的精度为3~4位时,能在对表现效果影响较小的情况下,有效降低内存上的开销。

所以UWA通过本条规则,筛选出那些动画精度过高的动画片段,在开发团队经过效果和内存上的平衡考量后,再针对性地进行精度压缩或者保留。大家可以参考UWA问答中的《如何降低动画文件的浮点数精度》一文。

2、包含无用纹理采样的材质——79%的项目中招

在开发过程中,研发团队会依据实际需要的表现效果而对材质球进行Shader的选择与更换。由于Unity自身的机制设定,当切换材质球使用的Shader时,材质球会自动保存上一个Shader的纹理采样信息。

一旦忽略了这方面的处理,就可能会在最终出包的时候,把那些实际不需要的纹理也带进包中,从而造成内存上的浪费。

通过本条检测规则,开发团队就可以把那些包含无用纹理采样的材质全部找出,然后在材质中删除相关的纹理采样信息,减小包体大小,节省空间。

3、粒子数上限超过30的粒子系统——79%的项目中招

粒子系统在Unity项目中的运用非常普遍,可用来生成各种诸如下雨、飘雪和火焰等动态效果。下图是一个刚在Unity当中“出生”的粒子系统:

而规则中指出的粒子数上限,指的就是该组件同时能拥有的最大粒子数。

在粒子系统中,合理的粒子数会使得诸如火焰或者落叶等特效的表现效果恰到好处。而过多的粒子数不仅会造成内存上的大量占用,实际运行时也会给CPU和GPU的计算带来更大压力。

基于UWA工程师的经验总结和对业内大数据的统计分析,我们发现在一般情况下,粒子系统的粒子数上限不超过30,即可满足大部分情况下所需的粒子表现效果。

开发团队可以通过本条规则,依据实际的展示表现,为粒子系统设置合理的粒子数上限,在保留特效水平的前提下优化内存和运算开销。

4、引用纹理尺寸大于256的粒子系统——78%的项目中招

在粒子系统中,我们会需要引用纹理来为粒子“穿上衣服”,以此配合需要达成的各种特效展示效果。
针对单个粒子而言,纹理尺寸的增大,对于整体的粒子表现效果的提升可能并不会那么明显。UWA通过对行业大数据的分析发现:针对大部分粒子系统的使用,纹理尺寸达到256x256即可满足大部分的表现需求。

通过本条规则,大家可以过滤出那些引用纹理尺寸“偏大”的粒子系统,为那些展示效果变动不明显的粒子系统进行“瘦身”。既可以减轻内存和计算的压力,也能够空出宝贵的性能空间去用于那些更重要的粒子系统。


以上,便是Top 10规则中剩余部分。在接下来的日子里,我们会继续针对UWA本地资源检测中其他规则来为大家进行简单讲解,尽可能地为大家在使用和理解上提供便利。

需要说明的是,每一项检测规则的阈值都可以由开发团队依据自身项目的实际需求去设置合适的阈值范围,这也是本地资源检测的一大特点。

后续我们将持续推出UWA性能规则解读的普适性阅读文章,帮助大家打扎实基本功。同时,也欢迎大家来使用UWA推出的本地资源检测服务,可帮助大家尽早对项目建立科学的美术规范。

觉得本文太简单了?来加餐!
《轻量级流水线结合方案助力打造高品质游戏》完整课程可戳,在理APP免费可取