unity 渲染性能分析工具

news2024/11/26 11:56:24

目标

既然要优化,肯定要有个目标:
pc上一般要求:一秒渲染60帧
移动端:一秒渲染30帧
这应该是最低的要求,如果游戏运行时,游戏帧率有变化,人眼能够明显的感觉到帧率下降。
优化的首要规则是找到性能问题的所在。
一般出现问题不是在cpu就是gpu。

profiler

unity内置了性能检测工具,
在这里插入图片描述
可以在Window->Analysis->Profiler 打开,由于在编辑器内调试准确率有问题,一般推荐打包调试
在这里插入图片描述
打包调试记得开启调试模式,并开启自动连接调试器并支持深度调试,这样等打包完成自动打开场景时,unity会自动连接profiler,省得我们自己去连接。
在这里插入图片描述
上图为跑了一些帧后的每帧时间占用。
在这里插入图片描述
我们还可以在这里切换成Hierarchy模式查看每个函数列表耗时。当你选择函数时,上面图标也会高亮相关内容。
在这里插入图片描述
这一块可以看到每一部分占用的时间,左侧为什么类型,右侧是占用时间的变化,点击选择一帧。
在这里插入图片描述
在下面会看主要分了三大部分,这一帧总耗时16.74ms
左侧是代码逻辑部分占用时间,我这个测试项目没有多少逻辑占用,所以性能占用很少。中间这一部分是调用渲染占用时间,可以看到占用了2.15ms,然后是最后的同步占用时间13.61ms。相当于电脑可以一直按满帧率去跑。
如果脚本的问题话,需要让程序去排查,TA一般需要查看右边的两部分问题。
在这里插入图片描述
多线程的我们还可以看到渲染线程给我们分出来了,让我们查看渲染线程做的操作。灰色的部分是在等待主线程耗时上面会显示Gfx.WaitForGfxCommandsFromMainThread,而蓝色部分为实际渲染时的批次提交耗时。而在urp渲染管线,后处理的操作是在主线程做的。
在这里插入图片描述
上图可以看到,应该是我开启了垂直同步,导致同步时间过长,如果在排查问题,推荐将垂直同步关闭。让其使用最大性能运算。
在这里插入图片描述
上图为关闭了垂直同步后的视图,为每帧真实的渲染时间。但是你看画面会有撕裂感,这也是垂直同步带来的好处,调试时,我们是可以关闭的。

每帧渲染

在cpu上,每帧需要处理的事情:

  1. 逻辑相关:脚本,物理,动画
  2. 渲染:剔除,排序,绘制
    • DrawCall包含了单个玩个的数据以及相关的渲染信息纹理矩阵等,然后提交渲染的命令
    • SetPassCall用来设置用于渲染网格材质的所有渲染状态数据,
    • Batches是包含了一个共享顶点和索引的缓冲区数据包,不用提交顶点数据,速度很快,批处理的意义在于减少了渲染状态的切换,它不能减少DrawCall,但是可以减少其它状态的切换,相对来说调用DrawCall的耗时比SetPassCall耗时更少。
  3. 同步:同步的问题一般会有垂直同步和帧率限制的问题,同步时都会有等待的状态,
    • 垂直同步是在你的渲染帧率高于屏幕显示器最高帧率时,它会自动限制帧率和显示器保持同步。
    • 帧率限制也是为了保证每秒的帧率平衡,不产生撕裂感。
    • 如果同步里出现WaitForTargetFPS,是因为垂直同步的问题,调试时不建议开启。
    • 如果出现GfxDeviceD3D11.WaitForLastPresent,表明CPU所有线程已经完成任务,正等待CPU,可能存在gpu性能瓶颈。
    • 如果出现Gfx.WaitForPresentOnGfxThread,表示主线程已经完成非渲染任务,正在等待渲染线程,但渲染线程尚未完成。1. 若此时渲染线程正在进行Camera.Render,并且Camera.Render耗时过高,则表明性能瓶颈在cpu端渲染部分。2. 若此时渲染线程正在进行Gfx.PresentFrame,则表明性能瓶颈在gpu端。

在gpu上,影响gpu渲染效率的是像素填充率(filling rate),填充率=屏幕像素Shader复杂度Overdraw,可以影响到效率的主要内容有:

  1. 屏幕分辨率
  2. 后处理效果
  3. Shader复杂度
  4. Overdraw 重复绘制,指屏幕的同一像素进行多次绘制,一般是因为
  5. 带宽瓶颈:内存带宽是指gpu可以读取和写入内存的速率。当gpu当前渲染数量太大,内存无法及时传输给gpu,会造成等待耗时。常见情况在延迟渲染中常驻Gbuffer及各种缓冲区和RT,占用内存非常大,并且一直在读写。移动平台gpu的带宽性能和纹理处理能力比较低,需要注意此问题,这也是移动端很少使用延迟渲染的原因。
  6. 同屏三角面数,顶点数,为什么顶点的影响小,可以这样计算,一张1k的图片就是一百万个像素,而一百万个顶点的模型我们很少用。
    总结一下:区分问题哪里的问题看同步的那几个函数,而在gpu上,主要看像素的计算量,屏幕分辨率是主要原因,屏幕像素渲染量是指数增加,后处理也是基于屏幕分辨率计算的,而半透明是因为模型所处的区域全部需要绘制,因为它的渲染顺序是基于相机的位置从远到近绘制的,没有被半透明遮挡的位置全部需要绘制。我们可以感觉到gpu上的计算量非常的大,毕竟每个像素都需要跑一次片元着色器内的内容。

性能分析工具

  1. unity内置的Profiler 上面讲的
  2. FrameDebugger 帧调试器,主要渲染效果调试,查看当前每帧渲染的内容
  3. FPS Counter 场景组件,可以直接添加到场景内,查看渲染情况
  4. UPR unity官方提供的性能工具 UWA 第三方专业做性能的公司
  5. RenderDoc 截帧工具 XCode 是ios平台使用的调试工具,一般调试苹果手机使用

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CMake | 01 - CMake快速上手(3.26.3)

专栏介绍 本专栏记录了博主入门CMake的笔记。 源码仓库欢迎Star:https://github.com/Mculover666/cmake_study。 一、CMake概述 1. 什么是CMake CMake官网:https://cmake.org/ CMake is an open-source, cross-platform family of tools designed t…

17.计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度

说明书 MATLAB代码:计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度 关键词:碳捕集 虚拟电厂 需求响应 优化调度 电转气协同调度 参考文档:《计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度》完全复现 仿真平台&#xff1a…

【Linux从入门到精通】vim的基本使用各种操作详解

文章目录 一、vim编辑器简单介绍 二、vim编辑器的四种模式 2、1 正常/普通/命令模式(Normal mode) 2、2 插入模式(Insert mode) 2、3 末行模式(last line mode) 三、命令模式的相关操作实例 3、1 光标的相关操作 3、2 文本操作 四、插入模式下的相关操作 五、末行模式下的相关操…

FreeRTOS任务的创建(动态方法和静态方法)

文章目录 前言一、FreeRTOS任务基本概念二、动态创建任务三、静态创建任务四、静态创建任务和动态创建任务的区别五、任务的删除总结 前言 本篇文章将介绍FreeRTOS任务的创建(动态方法和静态方法),了解什么是任务和任务的具体创建方法。 一…

文件 IO 操作

文章目录 一 文件1.1 文本模式1.2 二进制模式 二 函数2.1fopen()2.2 getc() 和 putc()2.3 fclose()2.4 fprintf() 和 fscanf()2.5 fgets() 和 fputs()2.6 rewind()2.7 fseek() 和 ftell()2.8 fflush()2.9 fgetpos() 和 fsetpos()2.10 feof() 和 ferror()2.11 ungetc()2.12 setv…

[python][vpython]用vpython实现小球砸弹簧代码

代码: from vpython import * # 加载vpython模块s1 canvas(width1200, height500, backgroundcolor.white, centervector(0, 1, 0)) # 定义画布 L0 1.4 # 定义初始高度 natural_length 0.9 # 设置弹簧原长 base_spring box(posvector(0, 0, 0), sizevector…

solidity 安全 如何阻止重入攻击

什么是可重入攻击? 我们使用合约的过程中,经常会遇到这种情况,智能合约能够调用外部的合约;这些外部合约又可以回调到调用他们的智能合约;在这种情况下,我们说智能合约被重新输入,这种情况被称为…

守护进程Daemon

进程组、对话期和控制终端关系 每个会话有且只有一个前台进程组,但会有0个或者多个后台进程组。产生在控制终端上的输入(Input)和信号(Signal)将发送给会话的前台进程组中的所有进程。对于输出(Output&…

给大家介绍几个手机冷门但好用的小技巧

技巧一:拍照识别植物 手机的拍照识别植物功能是指在使用手机相机时,可以通过对植物进行拍照,并通过植物识别技术,获取植物的相关信息和资料。其主要优点如下: 方便实用:使用拍照识别植物功能,…

Small Tip: 怎么去Schedule一个Analysis for Office的workbook

workbook的query不能是本地的,也就是说不能是在包$Tmp里面的。这种的没办法在BO里面用SSO。也就没办法Schedule。 前提条件有: 1.BO和BW系统的SSO配置得OK。 如果没有SSO,那么每次打开workbook就会有一个要登录BW的弹窗,这样是…

从零开始学习Linux运维,成为IT领域翘楚(三)

文章目录 🔥Linux超级用户与伪用户🔥Linux文件基本属性🔥Linux权限字与权限操作 🔥Linux超级用户与伪用户 Linux下用户分为三类:超级用户、普通用户、伪用户 ⭐ 超级用户:用户名为root,具有一切…

初识 OPC

为什么需要OPC? 随着自动化的发展,工厂的自动化程度越来越高,面临着问题: 设备之间,设备与应用程序之间交互数据 不同产商设备/应用程序具有不同接口/通信协议,如何简单快速连接?采集的数据及…

【计算机网络】学习笔记:第四章 网络层【王道考研】更新中....

基于本人观看学习b站王道计算机网络课程所做的笔记&#xff0c;不做任何获利 仅进行交流分享 特此鸣谢王道考研 若有侵权请联系&#xff0c;立删 如果本篇笔记帮助到了你&#xff0c;还请点赞 关注 支持一下 ♡>&#x16966;<)!! 主页专栏有更多&#xff0c;如有疑问欢迎…

计算机组成原理4.2.2汉明码

编码的最小距离 奇校验和偶校验 看1的个数是奇数 还是偶数 汉明码 汉明码的配置 根据不等式&#xff0c;确定增添几位&#xff0c;根据指数放置增添位 汉明码的检错 分不同检测小组 分组规则&#xff1a;哪位为’1‘就是哪组元素。 1号位为‘1’的都是第一组元素&#…

JUnit 5 使用教程 及 JUnit 4/5的差异

1. JUnit 5产生的原因 JDK 8在java中带来了迷人的功能,最值得注意的是lambda表达式 为了适应 Java 8 风格的编码和新的功能特性,JUnit 提供了JUnit 5 2. JUnit 5 架构 与 JUnit 4 相比,JUnit 5 由来自三个不同子项目的几个不同模块组成:JUnit 5 = JUnit Platform + JUni…

controlnet1.1模型和预处理器功能详解(各预处理器出稿对比及对应模型说明)

ControlNet 1.1 与 ControlNet 1.0 具有完全相同的体系结构,ControlNet 1.1 包括所有以前的模型&#xff0c;具有改进的稳健性和结果质量&#xff0c;且增加并细化了多个模型。 命名规范 项目名版本号标识基础模型版本功能名文件后缀名 control 官方总是以control为项目名&…

Java NIO(Java Non-Blocking IO:非阻塞式IO)(2)

1.NIO非阻塞网络编程原理分析 1>.NIO非阻塞网络编程相关的(Selector、SelectionKey、ServerScoketChannel和SocketChannel)关系梳理图: 说明: ①.当客户端连接时,会通过服务器端ServerSocketChannel得到/生成对应的SocketChannel; ②.通过register(Selector sel,int ops)…

SpringBoot 如何防御 CSRF 攻击

SpringBoot 如何防御 CSRF 攻击 CSRF 原理CSRF实践CSRF防御前后端不分离方案前后端分离方案 CSRF 就是跨域请求伪造&#xff0c;英文全称是 Cross Site Request Forgery。 这是一种非常常见的Web攻击方式&#xff0c;其实是很好防御的&#xff0c;但是由于经常被很多开发者忽略…

压缩HTML引用字体

内容简介 有些网站为了凸显某部分字体&#xff0c;而引入自定义字体&#xff0c;但由于自定义字体相对都比较大&#xff08;几M&#xff09;,导致页面加载缓慢&#xff1b;所以本文介绍三种压缩字体的方法&#xff0c;可根据项目情况自行选择。 压缩方法 1、利用Fontmin程序&a…

ETL工具 - Kettle 输入输出算子介绍

一、Kettle 输入输出算子介绍 上篇文章对 Kettle 进行了简单的介绍及做了个简单的案例&#xff0c;但是对 Kettle 的Step算子工具没有做过多的解释&#xff0c;本篇文章从输入输出算子工具开始进行介绍。 下面是上篇文章的地址&#xff1a; ETL工具 - Kettle 介绍及基本使用 …