性能优化之资源优化

性能优化之资源优化

  • 资源优化
    • 性能关键检测流程。
    • 浅析一下基于Unity3D 美术规则约束
      • 一、模型层面
      • 二、贴图层面
      • 三、动画层面
      • 四、声音层面:(音频通用设置)
      • 五、UI层面:
    • 题外点:诚然在优化中,美术占比是很重要的,所以咱们从理论上再来理解一下美术制作流程。

资源优化

我们都知道,制作游戏应用,性能优化总是老生常谈的问题。也许我们可能会从CPU(复杂的计算、物理模拟)、GPU(过多的顶点计算等)入手定位考虑,但是真正落实的优化还得从项目具体情况决定,并且在优化过程中,我们需要懂得善用工具,如Unity Profiler、UWA、URP等相关性能工具。另外我们还得远离那些奇怪的想法,觉得性能优化应该是属于游戏应用的最后一道环节,所以导致在实际项目优化时会感觉特别的痛苦和无力,例如,优化中涉及美术资源的修改的,而美术资源一旦涉及需要修改,就相当于面临资源重做的成本,所以项目优化应该从项目立项需求设计、资产制作环节、架构设计等环节就开始, 并尽早验证核心玩法性能,才能成就出一款优质的应用产品。

性能关键检测流程。

在这里插入图片描述

浅析一下基于Unity3D 美术规则约束

一、模型层面

1、模型比例,严格遵循模型与模型之间,模型场景之间的比例要正确统一(单位和比例),模型坐标统一为原点。
2、减面操作,主要是去掉对模型造型没有影响的⾯,⽤尽可能少的⾯数表达清楚模型的结构和造型。⽐如:物件⾮关节点及物件背⾯、内部不会看见的⾯删掉。
3、减少模型顶点的数量,模型顶点的数量会影响GPU的性能,所有物体不超过20000个三角面,人模模型面数控制在3000-4000面,移动端单个人体骨骼数量控制在30个~50个左右。
4、合并模型,合并同⼀⼩范围内的⾮交互类的静态⼩物件,同时合并⼩物件的贴图。这样可以减少Draw Call的数量。如,⼀组不同⼤⼩的⼩草,⼀组⼤⼩形状不同的⽯头,⼀个书架和上⾯放置的很多书籍等。把这些⼩物件合并成⼀个Object,贴图也合成成⼀张贴图。
5、模型的重复利⽤,相同的多个物件在Unity内复制使⽤,复制的多个物体在引擎计算上算⼀个物体。但也不可复制太多个,太多会对内存带来很⼤压⼒。相同的物件太多,建议把⼏个合并成⼀组做为⼀个Object,多做⼏组,再进⾏复制。
6、减少模型UV接缝和硬边的数量
7、减少Material的数量,实际上一个模型至少需要一张贴图,如果可能,可以将多张贴图拼成一张贴图,这样多个模型可以共享同一个Material。
8、尽可能减少像素灯光、阴影、反射的使用,这些功能会导致模型被渲染多次,加重CPU的负担。
9、地形优化,如果是⽤unity⾃带的地形⼯具制作的地形,可以⽤T4M插件转化成T4M格式地形,设置⼀个顶点值转化后可以对地形优化很多。T4M也可以设置Lod模型。
10、FBX资源中有太多的顶点, 请检查是否必要Custom Parameters: VertexCountLimit : 500,(顶点数一般限制为500)在满足美术效果下,尽量减少顶点数。
11、检查文件Mesh读/写标记,默认关闭。在这里插入图片描述
12、资源根据国内标准(参考UWA):低端、中端、高端设备建议总面数控制在30w, 40w ,50w。Unity手游性能白皮书

二、贴图层面

1、贴图⼤⼩,在移动设备上的贴图最⼤要控制在1024和512⼤⼩,可少量使⽤2048⼤⼩的贴图,以1024、512⼤⼩贴图为主,其他非主图例如法线、遮光、自发光图可以设定更小。
2、重复贴图的使⽤,⼤⾯积相同材质使⽤1-3种贴图交替重复覆盖,通过光影变化打破贴图的重复感。
3、贴图使用Bitmap贴图类型,尺寸主要为2的N次方。检查Inspector -> Advanced -> Non-Power of 2选项. 建议使用原始大小为2的幂次的贴图。大小非2的幂次的纹理资源将无法使用ETC1和PVRTC压缩格式。在导入时自动伸缩为2的幂次也可能会导致内存占用或者贴图质量问题。
4、少用透明贴图,能不⽤就不要⽤。透明贴图⾮常消耗GPU资源。并且带Alpha通道的贴图存储为tga或者png格式,在命名时必须加_al以区分。
5、贴图压缩,对贴图进⾏PVRT(iOS)或是ETC(Android)格式的压缩可以减少⼤量内存消耗。建议场景的材质可以⽤Substance材质系统转成.sbsar 格式材质。 Substance材质可以⼤⼤压缩贴图数据的⼤⼩但不损失贴图质量。
6、检查Mipmap标记,检查Inspector -> Advanced -> Generate Mip Maps选项,未压缩的纹理资源启用Mipmap标志会增加内存占用。
应用限制:未压缩的纹理资源应该禁用mipmap。类型为Sprite的纹理资源应当禁用mipmap。Mipmap 会增加游戏包体的大小和占用一定量的内存,但在游戏中Mipmap的渲染可以减少显存带宽,降低渲染压力,随着相机的推远贴图会随之切换成低像素的体贴,从而节省资源开支。过的Mipmap使用会对内存造成很大压力,因此建议只对大物件设置Mipmap。在这里插入图片描述
7、检查纹理读/写标记,检查Inspector -> Advanced -> Read/Write Enabled选项,默认必须要关闭,开启纹理资源的读/写标志会导致双倍的内存占用。在这里插入图片描述8、检查纹理资源的过滤模式,检查Inspector -> Filter Mode选项,纹理的过滤模式一般不建议使用Trilinear,会占用较高的计算资源。
在这里插入图片描述

三、动画层面

1、动画资源压缩方式 查看Inspector -> Animation Tab -> Anim. Compression选项,动画资源使用最佳压缩方式可以提高加载效率。 off:表示不采用压缩处理。keyfram Reduction:使用关键帧进行处理(旧版本unity:keyfram,reduction and compression表示关键帧减少和压缩)。Optimal:(新版本unity)自动选择一个最优的压缩方式。在这里插入图片描述
2、检查动画资源的Optimize Game Objects选项,查看Inspector -> Rig Tab -> Optimize Game Objects选项,动画资源应该勾选Optimize Game Objects选项来减少CPU消耗。
在这里插入图片描述

3、动画帧率、帧数控制,一般情况下每秒10帧,一个动画在1秒内完成。
4、动画模型的命名统一为基础模型名字➕@➕(动画前缀anim_)动画名字,做统一规范,同时会把该动画自动命名为@后面的名字。命名全部用英文或者拼音,并统一小写,不能出现中文。例如机器人待机动画(导出带动画骨骼的FBX文件提供给技术),C_RobotQ@anim_daiji。这样在Unity可以自动规范好anim clip 名称。在这里插入图片描述

四、声音层面:(音频通用设置)

Force To Mono:这个选项作用是强制单声道,很多声音为了追求质量会设置成双声道,导致声音在包体和内存中,占用的空间加倍,但是95%以上的声音,两个声道是完全一样的数据。因此对声音不是很敏感的项目建议勾选此项,来降低内存的占用。
Compression Format:不同的平台有不同的声音格式的支持,IOS对MP3有硬件支持,Android暂时没有硬件支持。建议IOS适合使用ADPCM和MP3格式,Android适合使用Vorbis格式。
Load Type:检查Inspector -> (Platform Tab) -> Load Type选项,音频加载类型,决定声音在内存中的存在形态:
Decompress On Load:当Audio Clip被加载时,解压声音数据,适用于小型音频文件(< 200kb)
Compressed In Memory:声音数据将以压缩的形式保存在内存当中,适用于中型音频文件(>= 200kb)
Streaming:从磁盘读取声音数据,适用于大型音频文件,例如背景音。注:例如Decompress On Load,要求文件必须小于200kb,因为内部内存管理的问题,如果是大于200kb的文件,那么也还是只会被分配到不足200kb的内存。
Bitrate:可以对音频文件本身进行压缩,降低文件的比特率(bitrate),前提音频品质不会被破坏太严重。
在这里插入图片描述

五、UI层面:

1、UI的隐藏可以使用将其移到Canvas外的方法,而不是SetActive(false)的方法来隐藏。
2、UI的批处理,如果UI元素会改变数值或是位置,会影响批处理,导致向GPU发送更多的drawcall。因此建议:将更新频率不同的UI放在不同的Canvas上。相同Canvas中的UI元素的Z值要相同,这样才不会打断批处理。相同Canvas中的UI元素要使用相同的材质和纹理,材质或着色器可以有动态变换(例如一些特效),这不会影响批处理。相同Canvas中的UI元素要使用相同裁剪矩阵。
3、Graphic Raycaster 该组件是用来处理输入事件,默认挂载在每个Canvas上。有时不能互动的对象仍是canvas中的一部分,并附带了该组件,所以当每次鼠标或触控点击时,系统就要遍历所有可能接受输入事件的UI元素,就会造成多次的 "点落在矩形中"的检查,来判断对象是否该作出反应。在UI很复杂的情况下,这个运算成本就会很高。因此建议确保只有可互动的Canvas才有该组件,节省CPU运行时间。
4、全屏UI的处理,游戏中可能会有些全屏UI(例如一些设置界面),会遮挡住场景物体或其他UI元素。然而它们即使被遮挡看不见,CPU和GPU还是会有消耗,因此建议:3D场景完全被遮挡的话,关闭渲染3D场景的摄像机。被遮蔽的UI,Disable这些Canvas,注意不是SetActive(false)。尽可能的降低帧率,因为这些UI一般不需要频繁刷新。

题外点:诚然在优化中,美术占比是很重要的,所以咱们从理论上再来理解一下美术制作流程。

次世代(Next Generation)与传统游戏相比,次世代游戏是把次世代游戏开发技术融入到现代游戏之中,通过增加模型的面数和贴图的数据量并使用次世代游戏引擎改善游戏的画面效果。标准表现在:模型达到高精度(高模) 、PBR流程的采用(真实法线+高光贴图)在真实光照下表现质感,属于新的游戏引擎技术。
PBR(Physically Based Rendering):PBR就是一种基于物理渲染,通过对真实世界物理现象进行逼近、模拟、再现,使3D对象在不同环境下都能展现出逼真的渲染质感,并通过材质的参数化将材质制作这一手工业流程转化成为标准化、流水化的工业流程。在这里插入图片描述
请添加图片描述
优秀的资源链接分享:
1、Unity 官方Profiler:https://docs.unity3d.com/Manual/ProfilerMemory.html
Unity URP:https://upr.unity.cn
2 、UWA相关:
2.1 使用UWA GOT优化Unity性能和内存:https://blog.uwa4d.com/archives/2029.html
2.2 可试用的产品介绍:https://blog.uwa4d.com/archives/UWA_PipelineV2-4.html
2.3 pipeline产品的介绍:https://blog.uwa4d.com/archives/UWA_Pipeline42.html
2.4 本地资源检测相关介绍:https://blog.uwa4d.com/archives/UWAGOTOL_Summary.html
2.5 GOT Online相关介绍:https://www.uwa4d.com/demo/projects.html
3、Unity 资源相关:
3.1 Unity 优化实践学习(二) 资源优化:https://blog.csdn.net/dengshunhao/article/details/82663719
3.2 Unity场景美术资源优化:https://blog.csdn.net/weixin_34203832/article/details/92379182
3.3 Unity整体性能优化篇 第(二)节-Unity资源优化:https://blog.csdn.net/chongzi_daima/article/details/101381290
4、Unity渲染技术:http://imgtec.eetrend.com/blog/2020/100050575.html
5、如何使用 Unity 和 Arm 分析工具解决移动端游戏性能问题(上篇):https://mp.weixin.qq.com/s/968NoWRjcV2rNYH51Mbfqg
6、全新Arm Mobile Studio for Unity软件包,增强移动端性能分析:https://developer.unity.cn/projects/60e2a5f9edbc2a04cfc5e341
7、Unity 性能优化经验整理:https://segmentfault.com/a/1190000019844821?utm_source=tag-newest
8、LuaProfiler:https://github.com/leinlin/Miku-LuaProfiler
9、Memory Profiler:https://docs.unity3d.com/Packages/com.unity.memoryprofiler@0.7/manual/index.html
https://www.bilibili.com/video/av334941622
10、垃圾回收:https://docs.microsoft.com/zh-cn/dotnet/standard/garbage-collection/fundamentals
11、Lua引用: https://github.com/jxhgzs/LuaMemorySnapshotDump
12、【Unity项目优化】之根据UPR资源检测报告进行项目资源优化总结:https://blog.csdn.net/qq_42437783/article/details/124275092

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/264703.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CDN缓存技术对网站的作用有什么

CDN缓存是什么&#xff1f; CDN缓存&#xff0c;即内容分发网络缓存&#xff0c;是一种用于提高网络内容传输效率和稳定性的技术。CDN缓存可以在网络中存储大量的数据和文件&#xff0c;例如网页、图片、视频等&#xff0c;从而避免用户直接从原始服务器获取数据&#xff0c;减…

sql-labs服务器结构

双层服务器结构 一个是tomcat的jsp服务器&#xff0c;一个是apache的php服务器&#xff0c;提供服务的是php服务器&#xff0c;只是tomcat向php服务器请求数据&#xff0c;php服务器返回数据给tomcat。 此处的29-32关都是这个结构&#xff0c;不是用docker拉取的镜像要搭建一下…

如何使用kali来进行一次ddos攻击

本文章用于记录自己的学习路线&#xff0c;不用于其他任何途径! ! ! 哈喽啊&#xff01;又是好久不见&#xff0c;本博主在之前发过一个ddos攻击的介绍。 emm…虽然那篇文章也提到了ddos攻击的方式&#xff0c;但太过于简陋&#xff0c;好像也没有什么用&#xff0c;so&#…

redis主从复制(在虚拟机centos的docker下)

1.安装docker Docker安装(CentOS)简单使用-CSDN博客 2.编辑3个redis配置 cd /etc mkdir redis-ms cd redis-ms/ vim redis6379.conf vim redis6380.conf vim redis6381.conf# master #端口号 port 6379#设置客户端连接后进行任何其他指定前需要使用的密码 requirepass 12345…

力扣单调栈算法专题训练

目录 1 专题说明2 训练 1 专题说明 本博客用来计算力扣上的单调栈题目、解题思路和代码。 2 训练 题目1&#xff1a;2866美丽塔II。 解题思路&#xff1a;先计算出prefix[i]&#xff0c;表示0~i满足递增情况下&#xff0c;0~i上的元素之和最大值。然后计算出suffix[i]&#…

【数据结构】队列的使用|模拟实现|循环队列|双端队列|面试题

一、 队列(Queue) 1.1 概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO(First In First Out) 入队列&#xff1a;进行插入操作的一端称为队尾&#xff08;Tail/Rear&#xff09; 出队列…

Oracle WebLogic Server WebLogic WLS组件远程命令执行漏洞 CVE-2017-10271

Oracle WebLogic Server WebLogic WLS组件远程命令执行漏洞 CVE-2017-10271 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建漏洞利用 修复建议 漏洞名称 漏洞描述 在Oracle WebLogic Server 10.3.6.0.0/12.1.3.0.3/2.2.1/1.10/12.2.1.1/22.0&#xff08;Application …

Linux数据库主从复制(单主单从)

MySQL主从复制的优点包括&#xff1a; 1、横向扩展解决方案 - 在多个从站之间分配负载以提高性能。在此环境中&#xff0c;所有写入和更新都必须在主服务器上进行。但是&#xff0c;读取可以在一个或多个从设备上进行。该模型可以提高写入性能&#xff08;因为主设备专用于更新…

css 三角形实现方式及快速联想记忆

css实现三角形是常见的需求&#xff0c;在此记录如下 1 边框实现 原理&#xff1a;相邻的border之间会形成一条斜线(可按此联想记忆) .triangle {width: 0;height: 0;border-left: 100px solid red;border-right: 100px solid green;border-top: 100px solid blue;border-bot…

redis 从0到1完整学习 (六):Hash 表数据结构

文章目录 1. 引言2. redis 源码下载3. dict 数据结构4. 哈希表扩容与 rehash5. 参考 1. 引言 前情提要&#xff1a; 《redis 从0到1完整学习 &#xff08;一&#xff09;&#xff1a;安装&初识 redis》 《redis 从0到1完整学习 &#xff08;二&#xff09;&#xff1a;red…

循环渲染ForEach

目录 1、接口说明 2、键值生成规则 3、组件创建规则 3.1、首次渲染 3.2、非首次渲染 4、使用场景 4.1、数据源不变 4.2、数据源组项发生变化 4.3、数据源数组项子属性变化 5、反例 5.1、渲染结果非预期 5.2、渲染性能降低 Android开发中我们有ListView组件、GridVi…

大创项目推荐 深度学习+opencv+python实现车道线检测 - 自动驾驶

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV56 数据集处理7 模型训练8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &am…

【Element】el-table 使用 el-table-infinite-scroll 插件实现滚动加载

虽然 el 官方提供了 Infinite Scroll 无限滚动 组件 但是却不支持 el-table 组件&#xff0c;这就很难受了&#xff0c;还好已经有大佬写好了插件&#xff0c;并且支持 element-plus/infinite-scroll 组件的所有选项。 el-table-infinite-scroll el-table-infinite-scroll 看…

计算机操作系统学习笔记

一、什么是操作系统 1、概念 操作系统&#xff08;operating system&#xff0c;简称OS&#xff09;是管理计算机硬件与软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。 …

第十二章 异常-Exception

一、异常的概念&#xff08;P444&#xff09; Java 语言中&#xff0c;将程序执行中发生的不正常情况称为“异常”。&#xff08;开发过程中的语法错误和逻辑错误不是异常&#xff09; 执行过程中所发生的异常事件可分为两大类 &#xff08;1&#xff09;Error&#xff08;错误…

Midjourney v6 正式发布,AI创新工坊同步更新

Midjourney v6 开发团队将从2023 年 12 月 21 日今晚开始&#xff0c;在寒假期间让社区测试Midjourney v6模型的 alpha 版本。 要打开它&#xff0c;V6请从提示下方的下拉菜单中选择/settings或--v 6在提示后键入。 Midjourney v6 基本型号有哪些新功能&#xff1f; 更准确的…

python3 数据分析项目案例,用python做数据分析案例

本篇文章给大家谈谈python3 数据分析项目案例&#xff0c;以及用python做数据分析案例&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 目录 一丶可视化绘图案例 1.曲线图 2.柱形图 3.点线图 4.3D散点图 5. 绘制漏斗图 6. 绘制词云图 二丶包/模块使用示例 (1)…

IntelliJ IDEA Community(社区版)下载及安装自用版

IntelliJ IDEA Community&#xff08;社区版&#xff09;下载及安装自用版 估计是个开发都逃脱不了用IDEA的命运吧&#xff0c;这么好的软件&#xff0c;白嫖了好多年。感恩。 现在很多公司已经不让用商业版的破解版了&#xff0c;所以这里讲的是社区版。 区别&#xff1a; 商…

【音视频】Mesh、Mcu、SFU三种框架的总结

目录 三种网络场景介绍 【Mesh】 【MCU】(MultiPoint Control Unit) 【SFU】(Selective Forwarding Unit) 三种网络架构的优缺点 Mesh架构 MCU架构(MultiPoint Control Unit) SFU架构(Selective Forwarding Unit) 总结 参考文章 三种网络场景介绍 【Mesh】 Mesh架构…

[node]Node.js 模块系统

[node]模块系统 Node.js中的模块系统模块的使用模块的导入模块的导出导出多个值导出默认值导出可传参的函数 文件查找策略从文件模块缓存中加载从原生模块加载从文件加载 Node.js中的模块系统 为了让Node.js的文件可以相互调用&#xff0c;Node.js提供了一个简单的模块系统。 …