Unity 性能优化一:性能标准、常用工具

性能标准

推荐耗时:

性能提现到玩家直观感受,就是帧率,为了达到要求的帧率,就要控制CPU的耗时,不同类型的游戏,对帧率要求不一样。下面是推荐耗时:

推荐内存:

避免游戏闪退的重点在于控制PSS内存(实际物理内存Proportional set size)峰值。而PSS内存的大头又在于Reserved Total中的资源内存和Mono堆内存。对于使用Lua的项目来说,还应关注Lua内存。

只有当PSS内存峰值控制在硬件总内存的0.5-0.6倍以下的时候,闪退风险才较低。举例而言,对于2G的设备而言,PSS内存应控制在1G以下为最佳,3G的设备则应控制在1.5G以下。

而对于大多数项目而言,PSS内存大约高于Reserved Total 200MB-300MB左右,故2G设备的Reserved Total应控制在700MB以下、3G设备则控制在1G以下。

渲染模块推荐值:

随着游戏对画质效果的要求越来越高,越来越多的项目遇到的性能瓶颈会来自于GPU的压力,GPU的压力会受到帧率,分辨率,三角形面片数,后处理,Shader复杂度,Overdraw等多方面的影响,因此我们对于不同分档的机型需要做一些对应的调整,在不同档位的机型上要做较为细致的区分,从而达到越高端的机型画质表现越好,而在低端机型上又能保证一定的流畅性。下表中可以当做一个模板,对于不同的游戏类型的需求可以再进一步调整,其中绿色的数值如果能达到的话会更优。

推荐工具 

Unity Profiler

建议真机调试、快捷键A(把当前帧的数据,自适应到窗口)、F(Timeline 下选中一个,快速聚焦到合适窗口)

Profiler Modules 可以按需加减,Frame 默认记录300帧的数据,可以在Preference->Analysis->Profiler中更改,最高是2000,高了会增加profile的消耗

 Rendering 的数据,影响其中的很大原因是 摄像机视角的改变

Unity Frame Debugger

  • 查看当前帧画面的渲染流程,它可以列出所有的绘制调用,并能够按照顺序逐步执行每个调用。
  • 查看Draw Call的调用次数,并通过顶点/索引数量来间接衡量场景的渲染代价。
  • 还能够检查Batch是否正常合批,以及检查不合批的原因。
  • 还可以访问着色器属性以获得关于材质和着色器的更多信息,也可以得到被对象使用的数据的引用。

 Mali Offline Compiler

Documentation – Arm Developer 官方文档

a. 该工具主要用来计算Shader的复杂度,结合分档的高中低数值来判断Shader是否过于复杂。

b. 它是一个命令行工具,提供静态分析GPU着色器。它主要可以用于验证着色器的语法、识别性能瓶颈、衡量任何变化对性能的影响。

选中shader,编译成文件后,选择其中的片元着色器或顶点着色器代码,用mali命令行分析 

c. 从Unity编辑器中获得FRAGMENT Shader。


从它的报告中我们能得到一些优化的建议:

  • 尽量不要使用if、discard语句
  • 减低相关运算量,减少反三角函数等复杂函数的使用
  • 避免类型转换
  • 减少使用32位的高精度浮点数,不过position和depth最好还是用332位
  • 避免触发spilling等等
     

Xcode FrameDebugger

它只支持metal 型号的机器测试,即iPhone,在Edit Scheme 中,选中GPU为metal,既可以截取对应帧的信息,和Unity Frame Debugger类似,但功能更全一些

开启后,在真机上运行时,通过下方工具栏,截取:

 

 

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

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

相关文章

云服务器AccessKey执行命令

人之所以痛苦,在于追求错误的东西。如果你不给自己烦恼,别人也永远不可能给你烦恼。因为你自己的内心,你放不下。 好好的管教你自己,不要管别人。 漏洞实战 查看所有实例信息 A.exe -a xxx -s xxx ecs -list执行命令 A.exe -a…

SpringBoot整合Dubbo+Zookeeper

文章目录 实践前知识储备Dubbo概述安装zkDubbo在zk中的存储结构Dubbo的注册中心有哪些Dubbo支持的协议 Dubbo整合SpringBoot本案例工程结构具体实现开发两个接口进行测试实现步骤测试 实践前知识储备 Dubbo概述 学习Dubbo前你要了解这些 安装zk Zookeeper概述与安装 Dubbo…

视频的音频提取怎么做?这样提取很简单

提取视频中的音频通常在需要从视频中独立使用音频或需要对音频进行编辑时使用。例如,当我们需要将音频上传到音乐流媒体平台或将其用于播客或其他音频项目时,就可能需要从视频中提取音频。问题是该怎么提取呢?教给大家几种简单的提取方法&…

Nodejs 安装之后cmd 输入npm -v 提示error的问题解决

1.问题现象: 安装时候选择: 2. 解决问题 卸载nodejs 删除安装路径下的node_modules, 重新安装 按照下面的选择

科技与人元宇宙论坛跨界对话

近来,“元宇宙”成为热门话题,越来越频繁地出现在人们的视野里。大家都在谈论它,但似 乎还没有一个被所有人认同的定义。元宇宙究竟是什么?未来它会对我们的工作和生活带来什么样 的改变?当谈论虚拟现实(VR…

磁场强度单位和磁感应强度单位转换

磁学量常用单位换算 、磁场强度单位和磁感应强度单位转换。 磁场单位 Oe(奥斯特),A/m,T(特斯拉)三种. 1T1000mT 1mT10Gs 1Gs79.6A/m 1T(特斯拉)10000Gs(高斯)1Wb/M2 1Gs(高斯)1Oe(奥斯特)

DAY1,Qt [ 手动实现登录框(信息调试类,按钮类,行编辑器类,标签类的使用)]

1.手动实现登录框&#xff1b; ---mychat.h---头文件 #ifndef MYCHAT_H #define MYCHAT_H#include <QWidget> #include <QDebug> //打印信息 #include <QIcon> //图标 #include <QPushButton> //按钮 #include <QLineEdit> //行编辑器类 #in…

Fiddler学习笔记

Fiddler简介 学习Fiddler的基础前置知识 请求行又包括请求方法&#xff0c;统一资源定位符、请求协议及版本号 统一资源定位符就是资源的绝对路径 请求体里写服务器需要的参数 304是服务器没有变化&#xff0c;根据请求头发现请求的内容和本地一样&#xff0c;就不再发回来了 …

day02_springboot综合案例

day02_springboot综合案例 订单操作 查询所有订单 查询所有订单流程 查询订单&#xff0c;要把订单对应的产品也要查出来 Orders实体类 Data public class Orders {private String id;private String orderNum;DateTimeFormat(pattern"yyyy-MM-dd HH:mm")privat…

【前端知识】React 基础巩固(三十三)——Redux的使用详解

React 基础巩固(三十三)——Redux的使用详解 Redux的使用详解 针对React 基础巩固&#xff08;三十二&#xff09;中的案例&#xff0c;我们希望抽取页面中共有的代码&#xff08;例如下方的代码&#xff09;&#xff0c;使用高阶组件统一拦截。 constructor() {super();this.…

华为数通HCIP-ISIS高级

isis区域间的互访 1、L2区域 to L1区域 在L1区域发布的路由会以L1-LSP在L1区域内传递&#xff0c;到达L1-2路由器时&#xff0c;L1-2路由器会将该L1-LSP转换为L2-LSP在L2区域内传递&#xff1b; 因此L2区域的设备可以学习到L1区域的明细路由&#xff0c;进行访问&#xff1b;…

离多态更近一步

在面向对象的语言里面,封装,继承,多态可谓是在熟悉不过了,当我们每次再去重新认识它们的时候总会有新的发现,为此我也经常感到疑惑,所以在这里和大家一起探讨三个问题,让我们在向多态靠近一点点。 虚表是否真的存在静态区 经常我们都会看见一个问题&#xff0c;虚表到底是存放…

Cisco学习笔记(CCNA)——Equipment Infrastructure Management

Equipment infrastructure management 路由器组件 路由器的组成及功能 CPU&#xff1a;执行操作系统的指令 随机访问存储器&#xff08;RAM内存&#xff09;&#xff1a;RAM中内容断电丢失 只读存储器&#xff08;ROM&#xff09;&#xff1a;开机自检软件&#xff0c;路由…

Jmeter 压测实战:Jmeter 二次开发之自定义函数

目录 1 前言 2 开发准备 3 自定义函数核心实现 3.1 新建项目 3.2 继承实现 AbstractFunction 类 3.3 最终项目结构 4 Jmeter 加载扩展包 4.1 maven 构建配置 4.2 项目打包 4.3 Jmeter 加载扩展包 5 自定义函数调用调试 5.1 打开 Jmeter 函数助手&#xff0c;选择自…

vue+Element项目中v-for循环+表单验证

如果在Form 表单里有通过v-for动态生成&#xff0c;如何设置验证呢&#xff1f; <el-form ref"ruleFormRef" :model"ruleForm" status-icon :rules"rules" label-width"120px"class"demo-ruleForm" hide-required-aster…

Zabbix-server监控mysql及httpd服务

目录 一、Zabbix监控mysql数据库 1、为server.Zabbix.com添加服务模板 2、创建mysql服务图形 二、server.zabbix.com服务器操作 编辑chk_mysql.sh脚本 三、server.Zabbix.com测试 四、查看web效果 五、Zabbix监控apache&#xff08;httpd服务&#xff09; 安装master 六、…

改进的北方苍鹰算法优化BP神经网络---回归+分类两种案例

今天采用前作者自行改进的一个算法---融合正余弦和折射反向学习的北方苍鹰(SCNGO)优化算法优化BP神经网络。 文章一次性讲解两种案例&#xff0c;回归与分类。回归案例中&#xff0c;作者选用了一个经典的股票数据。分类案例中&#xff0c;选用的是公用的UCI数据集。 BP神经网络…

Cesium态势标绘专题-多边形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

Redis追本溯源(三)内核:线程模型、网络IO模型、过期策略与淘汰机制、持久化

文章目录 一、Redis线程模型演化1.Redis4.0之前2.Redis4.0之后单线程、多线程对比3.redis 6.0之后 二、Redis的网络IO模型1.基于事件驱动的Reactor模型2.什么是事件驱动&#xff0c;事件驱动的Reactor模型和Java中的AIO有什么区别3.异步非阻塞底层实现原理 三、Redis过期策略1.…

【数字信号处理】带通采样定理及其MATLAB仿真

目录 一、带通采样定理1.1 内容1.2 公式推导 二、MATLAB信号仿真2.1 信号仿真实验2.2 MATLAB代码 三、总结参考 一、带通采样定理 按照奈奎斯特采样定理(低通采样)&#xff0c;采样频率 f s f_{s} fs​ 要大于等于信号中最高频率 f m a x f_{max} fmax​ 的2倍&#xff0c;才…