Unity | 性能标准分析工具图形API简介

目录

一、相关术语

1.物理页

2.PSS内存

3.Reserved Total

二、耗时推荐值

三、内存推荐值

四、分析工具

1.Profiler

(1)Profiler各平台对比

(2)构建到目标平台

(3)Frame数量修改

(4)CPU Usage

(5)Rendering

(6)Memory

2.Unity Frame Debugger

(1)打开方式

(2)面板介绍

3.XCode Frame Debugger

(1)Metal API

(2)Windows端其他图形API


一、相关术语

1.物理页

        物理页(Physical Page)是计算机内存管理中的一个基本概念。它指的是计算机物理内存(RAM)中的一个固定大小的块。物理页是操作系统用于管理和分配内存的基本单位。

2.PSS内存

        PSS内存(Proportional Set Size)是衡量进程内存使用的一种方法。它通过按比例分配共享内存页来反映每个进程实际占用的物理内存。具体来说,PSS内存包括以下部分:

  1. 私有内存:完全由该进程独占的物理内存。
  2. 共享内存的比例分配:当多个进程共享同一物理页时,这个页的大小会按比例分配给每个进程。例如,如果一个物理页被两个进程共享,每个进程的PSS会增加该页的一半大小;如果被三个进程共享,每个进程的PSS会增加该页的三分之一大小。

3.Reserved Total

        在内存管理中,Reserved Total 通常是指进程或应用程序保留的总内存量。这包括所有已分配但可能尚未实际使用的内存。具体来说,Reserved Total 包括以下几部分:

  1. 资源内存:这是指游戏或应用程序加载的各种资源所占用的内存,比如纹理、音频、模型和其他多媒体资源。
  2. Mono堆内存:对于使用Mono(一个开源的跨平台.NET框架)的项目,Mono堆内存是指由Mono运行时管理的堆内存。Mono堆内存用于分配和管理托管对象(如C#对象)。
  3. Lua内存:对于使用Lua脚本语言的项目,Lua内存是指由Lua虚拟机管理的内存,包括Lua脚本执行过程中分配的各种对象和数据结构。

二、耗时推荐值

        为了达成对应的帧率,需要将CPU耗时控制住一定的数值范围内,对于30帧,总耗时需要控制在33ms以下,对应的模块也需要有对应的耗时范围:

三、内存推荐值

        在游戏开发中,控制PSS内存峰值是避免游戏闪退的重要策略之一,因为它直接影响到系统是否能够为游戏提供足够的物理内存。当PSS峰值过高时,系统可能会因为无法满足游戏的内存需求而导致闪退。因此,通过优化资源加载、管理内存碎片、监控和调试工具等方法,可以有效控制PSS峰值,从而提高游戏的稳定性。

        PSS内存的大头在于Reserved Total中的资源内存和Mono堆内存。对于使用Lua的项目来说,还应关注Lua内存。

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

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

四、分析工具

1.Profiler

  • Unity Profiler是一种可以用来获取应用程序性能信息的工具。
  • 可以测试应用程序在目标发布平台上的运行情况,也可以在Unity编辑器中概要了解运行情况。
  • 可以收集并显示有关应用程序各个方面(例如CPU、内存、渲染器、音频等)的性能数据。
  • 可以根据性能数据来判断性能瓶颈,并且针对性进行选代优化。

(1)Profiler各平台对比

Profiler各平台对比
特点适用场景
Play Mode数据不准确,但是方便快捷快速修改一些设置以确定性能问题时可以使用
Edit Mode只检测编辑器自身的数据Unity编辑器运行迟钝时,其他情况下一般不会考虑使用
目标平台数据准确,但是构建应用会花费时间一般都推荐在目标平台测试

(2)构建到目标平台

Unity端设置:

  • 勾选Development Build
  • 勾选Autoconnect Profiler (可选)

Android端设置

  • 使用ADB:开启开发者模式,使用线缆将设备连接至计算机
  • 远程连接:连接WiFi网络,手机与计算机位于同一子网即可

(3)Frame数量修改

        显示的Frame数量默认为300帧,可以在首选项中增大这个数值,但是会有性能开销。

(4)CPU Usage

        所有的时间消耗被分为9个类型,用不同的颜色进行区分:Rendering渲染、Scripts脚本、Physics物理、Animation动画、GarbageCollector垃圾回收、Global Illumination光照、VSync垂直同步、UI用户界面、Others其它。

        当选中CPU Usage时,面板下方会出现Hierarchy:

  • Total: Unity在特定函数上花费的总时间百分比
  • Self: Unity在除去调用子函数的特定函数上花费的总时间百分比
  • Calls: 此帧中调用此函数的次数
  • GCAlloc: 垃圾收集
  • Time ms: 总时间
  • Self ms: 除去子函数的总时间

(5)Rendering

        在帧图表区域显示了4类信息:Batches Count批次数、SetPass Calls Count切换通道的次数、Triangles Count三角形数、Vertices Count顶点数。

        当选中Rendering时,通过面板下方可打开Unity Frame Debugger窗口:

(6)Memory

        在帧图表区域显示了7类信息:Total Used Memory使用的内存量、Texture Memory纹理内存量、Mesh Memory网格内存量、Material Count材质实例数、Object Count原生对象实例数、GC Used Memory GC的内存量、GC Allocated in Frame GC堆中每帧分配的内存量。

2.Unity Frame Debugger

        市场上有很多帧调试工具,如Visual StudioGraphics Debugger、Intel GPA、 RenderDoc、NVIDIA NSight、AMD GPU PerfStudio等等。这些工具各有特点,功能都很强大,能够收集大量信息来进行深入分析。但是它们都非常复杂,而且需要构建独立的应用来启动外部工具。

        Unity Frame Debugger使用方便又简单,能够快速获得很多重要的信息,还可以帮助我们检查合批情况。使用Frame Debugger为我们提供了很多有价值的信息:

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

(1)打开方式

  • 窗口位置:Window窗口> Analysis分析>Frame Debugger帧调试器
  • 其它开启方式:从Profiler Rendering模块点击Open Frame Debugger

(2)面板介绍

        点击Enable按钮即可捕捉当前帧的画面,会将应用冻结到该帧,如果在Unity编辑器中会自动暂停。

        Editor表示此时在编辑器中分析,也可以像Profiler一样连接设备远程调试(需要支持多线程渲染)

  • 工具栏中的左右箭头按钮用于在列表中向前和向后移动一步
  • 窗口顶部的滑动条可以在绘制调用中快速拖动来迅速定位要关注的事项
  • 右侧面板提供了有关绘制调用的更多信息,例如用于渲染的Shader、Pass、Keywords等等
  • 它还能够显示当前合批的情况,以及为什么无法进行合批

3.XCode Frame Debugger

  • Xcode提供了一套出色的GPU性能分析和调试工具
  • Xcode Frame Debugger可以记录 Metal API 调用并生成GPU帧捕获
  • 可以使用帧捕获中的信息来调试应用的命令、着色器代码和GPU性能
  • 只支持Metal API的应用

(1)Metal API

        Metal API是由苹果公司开发的一个低级图形和计算API,专门用于iOS、macOS和tvOS设备。它旨在提供高效的硬件加速图形和计算功能,允许开发者直接访问设备的GPU(图形处理单元),从而实现更高性能的图形渲染和数据处理。以下是Metal API的一些主要特点:

  1. 高性能:Metal API通过减少CPU与GPU之间的开销,提供了更高效的资源管理和任务调度,从而提升了应用程序的整体性能。
  2. 低级控制:与OpenGL等其他图形API相比,Metal提供了更低级别的控制,使开发者能够更精细地管理内存、命令缓冲区和同步操作。
  3. 并行计算:除了图形渲染,Metal还支持并行计算任务,这使得它不仅适用于游戏和图形密集型应用,也适用于需要高性能计算能力的数据处理应用。
  4. 多平台支持:Metal API可以在iOS、macOS和tvOS设备上使用,这使得开发者可以更容易地跨苹果生态系统进行开发。
  5. 现代化设计:Metal API采用了现代化的设计理念,支持最新的图形技术,如着色器编程、纹理处理、多线程渲染等。
  6. 工具和调试支持:苹果提供了一系列工具,如Xcode中的Metal调试器和分析器,帮助开发者优化和调试他们的Metal应用程序。

        总之,Metal API为开发者提供了一个强大且灵活的平台,用于创建高性能、复杂的图形和计算应用。

        在Unity 2020.1 中IOS平台已删除 OpenGLES2/3,后续的版本中也没有Auto Graphics API这一项。当使用Unity发布iOS应用时,生成的Xcode项目默认情况下会使用Metal API进行图形渲染。Metal是苹果推荐的图形API,因为它提供了更高效的性能和更低的开销。

(2)Windows端其他图形API

        在Unity中发布Windows应用时,可以使用多个图形API。默认情况下,Unity会选择最适合的平台和硬件的图形API,但也可以手动配置它们。

Direct3D 11 (D3D11):

  • 这是Windows平台上最常用的图形API,具有良好的性能和广泛的硬件支持。
  • 默认情况下,Unity通常会选择Direct3D 11作为首选API。
  • 左手坐标系。

Direct3D 12 (D3D12):

  • 提供更低级别的硬件访问和更高效的多线程渲染,但需要较新的硬件和操作系统支持。
  • 可以手动启用以利用最新的图形功能。

OpenGL:

  • 跨平台的图形API,但在Windows上不如Direct3D流行。
  • 通常作为备用选项,适用于特定需求或兼容性问题。
  • 右手坐标系。

Vulkan:

  • 新一代跨平台图形API,提供高性能和低开销。
  • 需要手动启用,并且可能需要额外的配置和测试。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

天宝TBCTrimble Business Center中文版本下载安装使用介绍

天宝TBC:测绘之道,尽在其中 引言 昔日杜甫,忧国忧民,今朝我辈,测绘天下。天宝TBC,乃测绘之利器,助我等行走于山川河流之间,绘制天地之图。此文将以杜甫之笔,述说TBC之妙…

【数据结构】栈(stack)

目录 栈的概念 栈的方法 栈的实现 数组实现 push方法 压栈 pop方法 出栈 peek方法 获取栈顶元素 size方法 获取有效元素个数 链表实现 结尾 完整代码 数组实现栈代码 双向链表实现栈代码 栈的概念 栈是一种特殊的线性表,只允许在 固定的一段 进行插入…

kafka发送消息-生产者发送消息的分区策略(消息发送到哪个分区中?是什么策略)

生产者发送消息的分区策略(消息发送到哪个分区中?是什么策略) 1、默认策略,程序自动计算并指定分区1.1、指定key,不指定分区1.2、不指定key,不指定分区 2、轮询分配策略RoundRobinPartitioner2.1、创建配置…

使用idea快速创建springbootWeb项目(springboot+springWeb+mybatis-Plus)

idea快速创建springbootWeb项目 详细步骤如下 1)创建项目 2)选择springboot版本 3)添加web依赖 4)添加Thymeleaf 5)添加lombok依赖 然后点击create进入下一步 双击pom.xml文件 6)添加mybatis-plus依赖 …

【系统分析师】-案例篇-数据库

1、分布式数据库 1)请用300字以内的文字简述分布式数据库跟集中式数据库相比的优点。 (1)坚固性好。由于分布式数据库系统在个别结点或个别通信链路发生故障的情况下,它仍然可以降低级别继续工作,系统的坚固性好&…

Ubuntu搭建FTP服务器

目录 1.ftp简介 2.vsftpd 2.1.介绍 2.2.安装与卸载 2.3.综合案例 - 本地用户模式 2.4.1.创建FTP用户 2.4.2.配置vsftpd 2.4.3.配置防火墙 1.ftp简介 一般来讲,人们将计算机联网的首要目的就是获取资料,而文件传输是一种非常重要的获取资料的方…

Docker 修改镜像源

由于docker hub 被禁,导致 docker 拉取镜像失败,解决办法就是使用国内的镜像源,目前国内的镜像源还是很多的,例如阿里云、腾讯云、华为云等等,下面演示一个更换成阿里云的步骤。 1. 阿里云获取加速地址 1.1 首先登录阿…

Git —— 1、Windows下安装配置git

Git简介 Git 是一个免费的开源分布式版本控制系统,旨在处理从小型到 快速高效的超大型项目。 Git 易于学习,占用空间小,性能快如闪电。 它超越了 Subversion、CVS、Perforce 和 ClearCase 等 SCM 工具 具有 cheap local branching、 方便的暂…

HIVE 数据仓库工具之第一部分(讲解部署)

HIVE 数据仓库工具 一、Hive 概述1.1 Hive 是什么1.2 Hive 产生的背景1.3 Hive 优缺点1.3.1 Hive的优点1.3.2 Hive 的缺点 1.4 Hive在Hadoop生态系统中的位置1.5 Hive 和 Hadoop的关心 二、Hive 原理及架构2.1 Hive 的设计原理2.2 Hive 特点2.3 Hive的体现结构2.4 Hive的运行机…

Linux 配置wireshark 分析thread 使用nRF-Sniffer dongle

Linux 配置wireshark nRF-Sniffer-for-802.15.4 1.下载固件和配置文件 https://github.com/NordicSemiconductor/nRF-Sniffer-for-802.15.4 2.烧写固件 使用nRF Connect for Desktop 中的 programmer 4.3烧写 https://www.nordicsemi.com/Products/Development-tools/nrf-conne…

【layUI】点击导出按钮,导出excel文件

要实现的功能如下&#xff1a;根据执行状态判断是否可以导出。如果可以导出&#xff0c;点击导出&#xff0c;在浏览器里下载对应的文件。 代码实现 html里&#xff1a; <table class"layui-hide" id"studentTable" lay-filter"studentTable&…

Dubbo3框架概述

1 什么是分布式系统? 《分布式系统原理与范型》定义: “分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统” 分布式系统(distributed system)是建立在网络之上的软件系统。 简单来说:多个(不同职责)人共同来完成一件事! 任何一台服务器都无法…

open62541 使用账号密码认证示例

一、官方源码示例 源码参考 服务端官方示例&#xff1a; /* This work is licensed under a Creative Commons CCZero 1.0 Universal License.* See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */#include <open62541/plugin/accesscont…

QtWebEngineView加载本地网页

直接加载放在exe同级目录下的资源是不行的&#xff0c;需要把资源通过qrc放到exe里面&#xff0c;然后通过类似qrc:/robotHtml/index.html这样的路径加载才行。 mWebView new QWebEngineView(parent);// mWebView->load(QUrl::fromLocalFile("./robotHtml/index.html&…

【网络安全】XML-RPC PHP WordPress漏洞

未经许可,不得转载。 文章目录 前言WordPressWordPress中的Xmlrpc.php利用前提:Xmlrpc可访问深度利用1、用户名枚举2、跨站点端口攻击(XSPA)或端口扫描3、使用xmlrpc.php进行暴力攻击前言 本文将解释xmlrpc.php WordPress 漏洞及利用方式,并以三种攻击方法进行阐发: 1、…

代码随想录算法训练营第四十一天 | 121. 买卖股票的最佳时机 , 122.买卖股票的最佳时机II , 123.买卖股票的最佳时机III

目录 121. 买卖股票的最佳时机 思路 暴力 贪心 动态规划 1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义 2.确定递推公式 3.dp数组如何初始化 4.确定遍历顺序 5.举例推导dp数组 方法一&#xff1a; 贪心 方法二&#xff1a;动态规划1 方法三&#xf…

国内外大模型汇总:Open AI大模型、Google大模型、Microsoft大模型、文心一言大模型、通义千问大模型、字节豆包大模型、智普清言大模型

Open AI大模型 特点&#xff1a; 多模态能力&#xff1a;如GPT-4o&#xff0c;能接受文本、音频、图像作为组合输入&#xff0c;并生成任意形式的输出。 情感识别与回应&#xff1a;具备情感识别能力&#xff0c;能根据对话者的情绪做出有感情的回应。 几乎无延迟&#xff…

XSS LABS - Level 14 过关思路

关注这个靶场的其他相关笔记&#xff1a;XSS - LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;关卡配置 这一关有些特殊&#xff0c;需要链接到外部站点&#xff0c;但是这个站点已经挂了&#xff0c;无法访问&#xff1a; 所以笔者就根据网上的资料&#xff0c;对这一关进…

k8s的安装

概念 全写&#xff1a;Kubernets k8s作用&#xff1a;用于自动部署、拓展、管理容器化部署的应用程序。它是半开源的&#xff0c;核心是在谷歌里面&#xff0c;它的底层是由go语言开发的。可以理解成负责自动化运维管理多个容器化的应用的集群。也可以理解为容器编排框架的工…

2k1000LA 调试4G

问题&#xff1a; 其实算不上 调试&#xff0c; 之前本来4G是好的&#xff0c;但是 我调试了触摸之后&#xff0c;发现4G用不了了。 其实主要是 pppd 这个命令找不到。 首先来看 为什么 找不到 pppd 这个命令。 再跟目录使用 find 命令&#xff0c;能够找到这个命令&#…