首页 > 其他分享 >Prefab优化:预制体最有效

Prefab优化:预制体最有效

时间:2024-03-02 22:35:57浏览次数:13  
标签:Prefab 粒子系统 Outline 效果 RawImage 纹理 组件 预制 优化

我们针对UWA本地资源检测最新的Shader Analyzer功能所涉及到的新规则和相关知识点进行了讲解。
这些看似细小的知识点,很容易在大家的开发和学习过程中被疏忽,而长期的问题积累最终都会反映到项目的性能表现上。
为此,我们将这些规则列出,并且以一个个知识点的形式向大家逐一解读。
参考:
我们将继续讲解UWA本地资源检测中和Prefab相关的规则:“使用了Outline的Text组件”、“使用了默认纹理的RawImage组件”、“不可见的RawImage组件”、“开启Prewarm的粒子系统”和“开启Collision或Trigger的ParticleSystem”。我们将力图以浅显易懂的表达,让职场萌新或优化萌新能够深入理解。

1、使用了Outline的Text组件

这里有两个概念需要和大家简单说明下。首先是Text组件,它是UGUI系统下的一个可以用于文本显示与编辑的控件。

参考:
qmxqmx.com/index.php/730/

在Text控件中我们可以对文本内容进行多种设置,比如字体类型、字体大小和对齐方式等。

然后是Outline组件。Outline组件和Shadow组件一般都用于对图片或者文字添加阴影效果。而且从形式上看,这俩基本没有区别。

而从效果上来看如下图,Outline用于添加轮廓效果 ,Shadow则是用于添加阴影效果;从性能上来看,Outline生成的网格Triangles会比Shadow多。

而且根据实际测试,如下图是一段文本分别在“无阴影效果”、“开启Shadow”和“开启Outline”时的顶点数情况。由图可知如果我们在Text组件中使用了Outline来实现轮廓效果,那么顶点数和网格数的上升会非常明显。

qmxqmx.com/index.php/724/

在这里我们推荐大家尝试使用TextMeshPro来实现相关的显示效果,在性能和展示效果上都优于Outline和Shadow。

所以在本条规则找出使用Outline的Text组件后,开发团队可视实际情况去选择是否保留Outline,或者换用TextMeshPro;也可以让美术人员直接做出美术字来使用,从根源上减少顶点数,降低性能开销。

2、使用了默认纹理的RawImage组件

qmxqmx.com/index.php/726/

在之前《Prefab优化:向预制体打出最有效的组合拳》一文中,我们简单说明了Image组件。Rawlmage组件和Image组件类似,都是UGUI系统下的图像组件。针对于Texutre设置的TextureType来说,Image组件只能使用TextureType为Sprite类型的资源;而RawImage使用的纹理资源可以设置为任意Type,需要注意的是,如果在RawImage组件内拖入的是TextureType为Sprite的纹理,其实是引用了Sprite内的原始纹理。从UGUI源码中看,RawImage类型的API函数很少,功能比较简单,而Image类型的功能较复杂。

如果Rawlmage组件的Texture属性没有赋值,那么会生成一张白色的默认纹理,这张白色的纹理存在性能开销。虽然不排除直接使用默认纹理的情况,但大部分的应用场景下,我们都会为Rawlmage组件添加符合场景和界面需求的纹理来达到预期的显示效果。

所以我们会找出这些使用默认纹理的Rawlmage组件,以供开发团队进行进一步的判别,方便大家及早发现并修改这类纹理使用不当的问题。

3、不可见的RawImage组件

这一条和我们在之前的文章《Prefab优化:向预制体打出最有效的组合拳》讲到的“不可见的lmage组件”非常相似。在大部分的应用情形下,“视觉上消失,但物理上存在”背离了作为图像组件的使用初衷。
qmxqmx.com/index.php/728/
当我们把Alpha值全为0(即透明不可见)的Texture资源导入到相关RawImage组件后,这种情况下,Rawlmage图像组件不仅没有为项目提供任何的展示效果,反而为项目带来了性能和计算上的额外占用与消耗。

当然,还是要强调一下,我们不能武断地排除RawImage组件不可视化的特殊应用,开发团队要根据项目的实际需求来进一步判断这些被本条规则筛选出的Rawlmage组件。

4、开启Prewarm的粒子系统

在Unity的粒子系统应用中,我们经常会接触到一个叫做“预热”(Prewarm)的概念。我们可以在粒子系统的初始化面板内进行Prewarm的相关设置。

开启Prewarm选项后,粒子系统会在加载后立刻执行一个完整的粒子发射周期,一般用于特定的粒子效果的展示需求。

最典型的就是火焰特效的应用,在某些场景过场中,例如战乱中一间燃烧的木屋。开启Prewarm选项,我们就能直接看到熊熊燃烧的大火,而不是看一遍火焰从小烧到大的过程(不然这就违和得离谱)。

在一些粒子系统渲染规模较大的场景中,如果开启Prewarm选项,会使得粒子系统在使用时的第一帧产生相对集中的CPU耗时,那么很可能会造成运行时局部卡顿,从而对整个项目的运行过程产生感官和体验上的明显影响。

所以本条规则会找出这些开启Prewarm的粒子系统,开发团队进行进一步的检查后,根据实际使用需求去决定是否需要关闭相关的粒子预热效果。

5、开启Collision或Trigger的ParticleSystem

在Unity中,粒子系统一般用于各种渲染效果,不具备实物特性。但在某些具体的应用中,我们希望粒子具有现实中的物理性质来更好地表现想要的效果。

比如在某些二战题材的军事游戏内,用粒子系统去表现M16防空车的弹幕射击。为了更好地实现曳光弹、燃烧弹的射击,碰撞和四散的效果,这时候就需要开启粒子系统的物理碰撞。

如图,这是粒子系统中的Trigger(触发器)和Collision(碰撞器)设置。简单来讲,合理使用这两个设置,就能很好地模拟出粒子的实物碰撞效果。甚至可以实现比如子弹跳弹后的变轨,雨水滴到湖面后的反弹等现实的物理性质。

不过这些物理碰撞效果的实现是以高额的物理计算消耗为代价的。在实际使用中,大部分的粒子系统只是承担了渲染的作用,并不涉及粒子与物体碰撞的效果反馈。所以在这种情况下,开启Collision或者Trigger并不会使得原有渲染效果有显著提升,反而会带来相当大的性能负担。

所以本条规则会找出这些粒子系统,以供开发团队检查,在确认当前ParticleSystem不需要实现物理特性后,开发团队就可以果断关闭相关属性设置以减小项目的性能开销和计算压力。

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

标签:Prefab,粒子系统,Outline,效果,RawImage,纹理,组件,预制,优化
From: https://www.cnblogs.com/linglizhanshen/p/18049381

相关文章

  • 通过@vercel/ncc 优化node npm 项目的大小
    以前我写过关于使用@vercel/ncc进行node应用快速部署的,同时对于node应用的大小会减少不少app参考玩法简单说明:简单玩法可以直接基于ncc构建就行了,我们可以all-in-one然后基于nccbuild,会自动处理我们的依赖包,然后我们的项目复制构建之后目录的文件通过nodeindex.js运......
  • 02. 创建房间的 Prefab
    目标实现如下图所示的随机地图地图会随机连线,并且最后会连到Boss的房间,并且确保Boss房间前面一定是一个休息的房间额外需要做的事情因为点击房间之后涉及场景的切换,根据勇士传说的经验,我们需要使用Addressable来切换场景,因此我们需要通过PackageManager来安装Addre......
  • Git 分支管理:优化版本控制与应急处理的关键策略
    使用Git分支:轻松管理不同版本和应对紧急情况的最佳实践使用Git分支在Git中,分支是主仓库的新/独立版本。假设你有一个大型项目,需要对其进行设计更新。没有使用Git时:复制所有相关文件以避免影响实时版本开始进行设计工作,并发现代码依赖于其他文件中的代码,这些文件也......
  • sql 语句性能优化
    1.查询优化使用SELECTTOP:当只需要返回结果集的一部分时,使用SELECTTOP可以减少数据传输的量,从而提高查询性能。**避免使用SELECT***:只选择需要的列而不是所有列可以减少网络传输的数据量,提高查询速度。使用连接(JOIN)代替子查询:在某些情况下,使用连接代替子查询可以减......
  • 聊聊 HTTP 性能优化
    哈喽大家好,我是咸鱼。作为用户的我们在"上网冲浪"的时候总是希望快一点,尤其是抢演唱会门票的时候,但是现实并非如此,有时候我们会遇到页面加载缓慢、响应延迟的情况。而HTTP协议作为互联网世界的基础,从网站打开速度到移动应用的响应时间,HTTP性能的优化直接关系到我们在网络世......
  • 优化爬树的甲壳虫的解决程序
    程序来源:来自我同学在做蓝桥杯的爬树的甲壳虫问题,问题是这样的有一只甲壳虫想要爬上一颗高度为n的树,它一开始位于树根高度为0,当它尝试从高度i-1爬到高度为i的位置时有Pi的概率会掉回树根,求它从树根爬到树顶时,经过的时间的期望值是多少。他的程序在大量的输入数据时,运行时间会......
  • 【专题】2024食品行业预制菜趋势报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=35240原文出处:拓端数据部落公众号预制菜行业经历了由默默无闻到备受争议,再到如今逐渐获得大众接受的历程。随着《中央一号文件》的推动,除夕节假日的利好安排,以及行业内对半年内有望出台国家标准的期待,预制菜行业吸引了众多头部主播的关注和数亿网......
  • 面试必备:一线大厂Redis缓存设计规范与性能优化
    说在前面你是否在使用Redis时,不清楚Redis应该遵循的设计规范而苦恼?你是否在Redis出现性能问题时,不知道该如何优化而发愁?你是否被面试官拷问过Redis的设计规范和性能优化而回答不出来别慌,看这篇文章就行了本文,已收录于,我的技术网站aijiangsir.com,有大厂完整面经,工作技术,架构......
  • WPF性能优化:Visual Studio性能分析工具使用介绍
    在硬件性能不断提升的现在,软件性能依旧是开发人员关注的重点。不同类型的程序关注的具体性能指标有所不同,服务器程序注重吞吐量,游戏引擎追求渲染效率,桌面程序则关注内存消耗以及界面加载效率和流畅性。当我们需要进行性能优化时,首先需要找到性能瓶颈。本文将介绍两个WPF性能优化......
  • 由POJ1821得出的一些dp优化技巧
    比如for(inti=1;i<=m;i++){ for(intj=0;j<=n;j++){ dp[i][j]=dp[i-1][j]; } for(intl=max(1,s[i]-l[i]+1);l<=s[i];l++){for(intr=s[i];r<=min(n,l+l[i]-1);r++){dp[i][r]=max(dp[i][r],dp[i-1][l-1]+p[i]*(r-l+1));......