网格优化中,你遇到过哪些吃性能的设置?

落花浮王杯 提交于 2020-10-17 10:21:50

节前,我们已经将【性能黑榜】上的Top10规则均做了详细的解读(可戳文末相关链接回顾)。无论是大家在开发时的疏忽,还是相关知识点的缺失,这些问题的积累最终都会反映到项目的性能表现上。为此,我们将这些规则曝光出来,并且以一个个知识点的形式逐一解读。

今天,我们来继续剖析【UWA本地资源检测】中和网格设置相关的规则:“包含Color属性的网格”,“未开启OptimizeMesh选项的网格”,“包含Tangent属性的网格”和“包含uv3或uv4属性的网格”。我们将力图以浅显易懂的表达,让职场萌新或优化萌新深入理解。


1、包含Color属性的网格

在一些建模软件中导出的模型可能会带有顶点的颜色属性,在Unity中即表现为Mesh的Colors属性。有些Shader可以使用这个属性进行运算与着色,如Sprites Shader。然而大多数Shader都选择忽略Colors属性(Unity标准着色器就不使用这个属性)。在这种情况下,如果Mesh带有Colors属性,那么对其本身而言没有实际意义,却会对内存、物理体积和加载性能造成影响。

所以本条规则会针对Mesh的Colors属性进行检测,以供开发团队根据实际使用需求去除不必要的Colors属性。

在此大家可以参考一下UWA问答中一位热心朋友提供的批量去除网格color属性的工具:https://answer.uwa4d.com/question/5a8f77970b827e2c0bfdcfaf


2、未开启OptimizeMesh选项的网格

在模型方向上的网格应用是极为普遍的,在项目的性能开销上也占有很大的比重。所以对模型网格的优化也一直是首先考虑的重点。但很多情况下,对模型网格进行调优意味着需要对原有的设计与资源等进行大刀阔斧的改动,从而使得很多开发团队往往因为难以找到切入点而一筹莫展。

所以Unity为我们提供了一个优化选项:OptimizeMesh。

Optimize Mesh是模型的Import Settings当中的选项。在开启状态下,网格的顶点或三角形会按照引擎本身既定的一套规则重新排序,从而使其对于GPU来说在运算时能有较好的性能。理论上如果模型对顶点和面片顺序没有要求的话,Optimize Mesh的开启就不会导致显示问题。

所以UWA设置了这条检测规则,以方便开发团队找到这些未开启OptimizeMesh选项的网格并进行相关的设置优化。


3、包含Tangent属性的网格

本条规则,其实和上述的“包含Color属性的网格”那条规则的着眼点是一样的。Tangent是网格中顶点的属性中的一项。很多情况下我们的Shader不需要使用这项属性,会造成内存上的浪费。

举个例子,如果项目中使用了Normalmap,那么就需要在Shader里面计算局部的切空间,这种情况下就会用到网格的Tangent属性。

除此之外,如果不用Normalmap,一般来讲网格的Tangent属性都是不会被使用到的。所以本条规则会遍历出包含Tangent属性的网格,开发团队在确认不会有相关的使用需求后,就可以在FBX的导入设置中取消Tangent属性的导入。


4、包含uv3或uv4属性的网格

uv坐标又称为纹理映射坐标(texture-mapping coordinates),对应于每个顶点,用于确立模型表面的各个顶点的颜色采样与纹理上具体位置的对应关系。通俗来讲就是将一张图贴在模型表面,使得我们可以从“纹理”这块调色板上找到正确的颜色,来绘制模型。

Unity一共支持4套uv,在c#API中分别叫uv、uv2、uv3和uv4。通常来说(使用c# API中的命名),uv用于主纹理,uv2用于光照贴图(Lightmap)的采样,uv3用于实时动态光照,uv4可进行自定义。

uv2可以在建模软件中添加,也可以在Unity中通过Generate Lightmap UVs的选项来生成。如果在建模软件中只做了一套uv,将模型导入Unity的时候,在导入设置中勾选Generate Lightmap UVs,Unity会自动为我们生成用于光照贴图的uv2。uv3和uv4的使用较为少见,通常是用来配合特殊的Shader实现特殊的效果。

去除不必要的uv3、uv4属性可以有效降低模型所占空间资源,所以UWA用本条规则找出包含uv3或uv4的网格,由开发团队根据网格的实际使用需求和表现效果的平衡考量,去对网格的uv属性做减法。

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

 

性能黑榜相关阅读

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!