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

news/2024/7/10 4:15:27 标签: 测试, 性能, 网格, 优化

节前,我们已经将【性能黑榜】上的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%的对手!》


http://www.niftyadmin.cn/n/1030855.html

相关文章

网络通信原理与实战应用

课程简介 课程内容涉及到计算机网络体系结构基础知识,包括网络分层、TCP首部与IP首部结构组成,从零开始实现了一个异步网络通信库插件。课程通过简易网络程序引入对底层原理的讲解,再结合实际问题,分析应对策略,最后落…

3分钟就能掌握的视频/音频优化技巧!

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

开启Allow unsafe code的影响

1)开启Allow unsafe code的影响 ​2)Unity线性空间下,PhotoShop制作半透明图片,制作带外发光、内发光的图层如何正确导出 3)Unity中实现完善的暂停机制 4)RenderPipelineManager.DoRenderLoop_Internal的堆…

网格优化:溃堤之穴,一个也不能放过

在之前的《网格优化中,你遇到过哪些吃性能的设置》一文中,我们简单讲解了在项目开发过程中容易被忽略的网格相关的属性设置。无论是大家在开发时的疏忽,还是相关知识点的缺失,这些问题的积累最终都会反映到项目的性能表现上。为此…

URP关于多个摄相机的性能优化

1)URP关于多个摄相机的性能优化 ​2)Unity Addressables打包的时候如何设置BuildAssetBundleOptions.DisableWriteTypeTree 3)Unreal可以用于商业化游戏的热更新方案 4)UGUI SpriteAtlas在使用中回调实例化,AtlasReque…

Linux文件系统之二:硬盘分区partition的组织和管理

在Linux文件系统之一:inode节点的提出一文中通过顺延FCB的管理思想,为加速文件系统的管理效率引出并介绍了inode节点的概念。考虑到当前主机的主要存储设备都是硬盘,故而谈及文件系统filesystem必须要结合硬盘分区partition的硬件概念。 1. Partition分区…

纹理优化:不仅仅是一张图片那么简单

在上期《网格优化:溃堤之穴,一个也不能放过》中,我们对网格相关的优化知识点做了讲解。无论是大家在开发时的疏忽,还是对相关知识点的理解不足,这些问题的积累最终都会反映到项目的性能表现上。为此,我们将…

使用SBP后,如何查询Bundle的依赖关系

1)使用SBP后,如何查询Bundle的依赖关系 ​2)大量同样的怪物的骨骼动画如何优化 3)DynamicBone动态骨骼插件是否在项目里使用 4)音频换Wwise的成本 5)运行时如何保存Prefab 这是第225篇UWA技术知识分享的推送…