那些年给性能埋过的坑,你跳了吗?

那些年给性能埋过的坑,你跳了吗?

在今年的UWA DAY 2020的《轻量级流水线结合方案助力打造高品质游戏》一讲中,我们罗列了在【UWA本地资源检测】上检测未通过的触发规则。无论是大家在开发时的疏忽,还是相关知识点的缺失,这些问题的积累最终都会反映到项目的性能表现上。为此,我们将这些规则曝光出来,并且以一个个知识点的形式逐一解读,从而让大家更深刻地明白,它们是如何对项目的整体性能情况产生影响的。

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

今天我们先逐一讲解下这个Top 10 中的前三条规则:“尺寸过大的纹理”,“面片过大的网格”以及“纯色纹理”。

1、尺寸过大的纹理——97%的项目中招

本条规则会扫描指定区域内的所有纹理资源,即所有图片格式的资源。

在开发中遇到和纹理尺寸相关的的问题一般有如下几种:
1、一张大型纹理中,很有可能实际使用、复用的,只是这张大型纹理中的一小部分。如图,在这种情况下,如果只需要用到下方纹理中的角色部分,那其余部分于项目而言,就造成了没有必要的内存占用上的浪费。

2、纹理使用上,没有考虑到实际的显示效果。一张10241024纹理的展示效果,可能相较于512512纹理的展示效果,并没有多大感官上的提升。为了些许的展示效果提升,却要耗费将近4倍的内存空间,那么这种情况是需要大家根据实际需求去仔细商榷的。

如上图所示,可能只是视觉效果上的些许细微不同,但是在内存占用上,两者却有着4倍的差距。

3、纹理尺寸大小,不单单影响到内存上的占用,对于加载的耗时也有影响。我们曾在之前的文章中对相同格式、不同分辨率的纹理在同一机型下的加载效率进行过比较,戳此了解详情

结论:纹理资源的分辨率对加载性能影响较大,分辨率越高,其加载越为耗时。设备性能越差,其耗时差别越为明显。

对于项目来说,单个纹理尺寸大小带来的影响,可能显得微不足道;但当这些一点一滴的内存与加载耗时累积起来,最终都会作用到整体项目的性能表现。

需要说明的是,这个规则检测是灵活多变的,对于一些较为重度的项目,确实有画质精度的要求,那么大家可以自定义阈值,或者通过自定义规则的方式改善判定规则,从而更贴近项目的实际需求,戳此了解详情

2、面片数过大的网格——95%的项目中招

这里涉及到两个概念:面片数,网格。

在Unity中,物体是由若干个网格面组成;而每一个网格面,则由若干个三角形面片组成;三角形面片,则是由最基本的“顶点—连线—成面”组成。

面片数的多寡,很大程度上决定了整体展示效果的优劣。面片数少的网格,可能仅能做到“只可意会”;而面片数多的网格,则往往能够做到“所见即所得”。

左侧为《古墓丽影1》实际游戏中的劳拉形象,右侧为《古墓丽影:暗影》官方宣传片里的形象。

这是《古墓丽影》早期的劳拉形象和新三部曲中的形象对比。人物形象的变迁从另一个角度上来讲,其实很好地反映了面片数的数量对展示效果的影响。

但实际的项目开发中,我们可以发现,三角形面片的数量其实是把“双刃剑”:大量的三角形面片能够达成非常好的展示效果;可是一旦三角形面片的数量过大,则势必会对项目的内存占用和加载耗时,以及渲染方面的性能开销上造成不容忽视的压力。

面片数多寡的影响因素有很多:

1、设计水平造成的冗余面片数过多,会不断地挤占内存的有限空间和造成加载耗时的上升。

同一个游戏的不同阶段,或者同一个类型的不同游戏,在设计同种用途的网格时,使用面片数的差异有时达到一个数量级。

2、没有考虑到物体在项目内的实际应用情况。比如作为远方背景的物体,依然以近景设计的要求,在网格中应用了大量的三角形面片,从而造成了面片数的增加,对内存和加载形成了额外的压力。

实际的项目开发中,有时为了追求更好的展现效果而采用了大量面片去设计网格,但由此带来的内存、加载和渲染性能上的消耗,如果远超展示效果上的提升,那就很有可能是得不偿失了。

3、使用了纯色纹理——92%的项目中招


面对项目中关于单一纯色的需求,我们可以在Shader中直接进行设置,从而达到我们想要的效果。在实际操作中,也就不需要那张纯色纹理的存在,本属于这部分纹理的内存占用和计算耗时就可以直接省下来。

例如为物体添加纯红色,直接就可以在Shader中进行如下设置以达到相应的效果:

以上,便是“Top10”中的前三条检测规则的解读,希望能帮到大家。

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

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

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