0

特效优化2:效果与性能的博弈

 3 years ago
source link: https://blog.uwa4d.com/archives/UWA_Pipeline31.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在上一期《特效优化:发现绚丽背后的质朴》中,我们主要针对UWA本地资源检测中和特效相关的知识点做了讲解。这些看似细小的知识点,很容易在大家的开发和学习过程中被疏忽,而长期的问题积累最终都会反映到项目的性能表现上。为此,我们将这些规则列出,并且以一个个知识点的形式向大家逐一解读。

本期,我们将主要面向粒子特效相关的检测规则:“特效运行时包含的ParticleSystem组件数量过多”“特效播放时最大粒子数量过大”“特效总贴图数量过大”,以及新增加的规则“开启各向异性过滤的纹理”。我们将力图以浅显易懂的表达,让职场萌新或优化萌新能够深入理解。

1、特效运行时包含的ParticleSystem组件数量过多

1.png

本条规则面向的核心其实是项目开发中最常见的一对矛盾:效果与性能。为了实现更为复杂、更为绚丽的展示效果,研发团队会添加各种粒子系统。在带来效果提升的同时,也会产生非常明显的性能消耗和渲染压力。所以我们需要科学地做减法,减少ParticleSystem组件数量,以降低部分特效效果的代价来达到和项目性能之间的平衡。

这里需要说明的是,规则给出的默认阈值是一个比较严苛的标准,研发团队可以根据自己项目的实际需求去设定符合现阶段性能承受范围的阈值。


2、播放特效时最大粒子数量过多

2.png

本条规则和我们之前在文章《【性能黑榜】掌握了这些规则,你已经战胜了80%的对手!》中提到的“粒子数上限超过30的粒子系统”的这条规则很相近。

合理的粒子数会使得特效的表现效果恰到好处,但过多的粒子数会给CPU和GPU的计算带来更大压力。在复杂的粒子特效下,由于大量各种粒子的存在,处理特效所带来的性能开销也会大幅度地增加。

天平的两端是特效总体效果和性能,所以我们的视角要提高到总粒子数上。在实际操作中,开发团队要尽可能精确地基于特效总体展示效果,对每一个粒子系统的最大粒子数都进行合理的规划与调整,这样才有可能在保证降低粒子特效更新开销的同时,依然能够接近或维持原有的特效效果。


3、特效总贴图数量过大

3.png

本条规则从另一个维度为开发团队提供特效相关的检测规范。贴图涉及的方面很多,在之前的文章《材质优化:如何正确处理纹理和材质的关系》《粒子系统优化:Mesh模式下的优化策略》内我们曾简单介绍过,Shader对纹理的采样、材质对纹理的引用以及粒子系统对纹理的应用等,如果在使用时不细致,就会导致特效内的贴图资源上涨,从而带来内存和计算上的额外消耗。

所以本条规则从“贴图总数”的角度,为大家统计出这些包含贴图数过多的特效资源,以供开发团队对其进行进一步的优化,来为特效做瘦身。


4、开启各向异性过滤的纹理

4.png

在之前的文章《纹理优化:不仅仅是一张图片那么简单》中,我们对纹理的过滤模式有过介绍,简单来讲是为了降低纹理到模型表面的这个过程中发生的“失真”现象。

相比于之前提到的各种过滤模式,纹理“贴”到物体表面时,各向异性过滤多考虑了纹理贴合与视野观察角度的关系。在这个前提下,如果在U、V方向上,纹理像素对应到物体表面的关系不是1:1时,它会按比例在各方向上进行采样不同数量的点,并进行计算以得到最终的对应关系。

在纹理的过滤模式中选择Bilinear(双线性过滤)或者Trilinear(三线性过滤)时,我们就可以对Aniso Level进行调整,范围是从0到16。

5.png

当我们把摄像机调成与纹理表面成一定角度时,Aniso Level的作用就会显示出来。如下图是nisoLevel设置为0或1时的纹理的表现(即不进行各向异性过滤):

6.png

下图是AnisoLevel设置为9时(这时候进行了各向异性过滤)的贴图情况。对比两张图就能很明显地发现视野远端的清晰程度是完全不一样的。

7.png

开启各向异性过滤,在这种要考虑视野角度的情况下,可以很显著地提升纹理的表现效果,但代价是更高的GPU性能开销。而且各向异性过滤主要适用于大面积的地面与地形设置,对场景内的物体来讲,开启相关纹理的各向异性过滤就有“杀鸡用牛刀”的浪费之嫌了,表现效果上的提升并不足以抵消或平衡由此带来的性能消耗和渲染压力。

所以本条规则筛选出这些纹理后,开发团队要根据实际情况,在充分考量使用场景、表现效果和性能消耗的多方平衡后,再去决定是否需要保留开启各向异性过滤。


希望以上这些知识点能在实际的开发过程中为大家带来帮助。需要说明的是,每一项检测规则的阈值都可以由开发团队依据自身项目的实际需求去设置合适的阈值范围,这也是本地资源检测的一大特点。同时,也欢迎大家来使用UWA推出的本地资源检测服务,可帮助大家尽早对项目建立科学的美术规范

15.png

万行代码屹立不倒,全靠基础掌握得好!

《UWA学堂训练营|游戏自动化测试》

性能黑榜相关阅读

《那些年给性能埋过的坑,你跳了吗?》
《那些年给性能埋过的坑,你跳了吗?(第二弹)》
《掌握了这些规则,你已经战胜了80%的对手!》


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK