Unity 检测手机性能,区分高中低端机型(URP)
有兴趣可查看之前写的标准渲染管线的版本
适配了URP渲染管线,并增加了抛弃第一次采样的数据(涉及Shader编译会影响采样数据)
可设置隔帧采样不影响游戏运行
一般在游戏启动进登录界面时可以开始,Camera设置为场景相机
注意:
Maximum Sample Counter和Draw Times Per Batch不宜设置太高,否则可能出现在UPR或者UWA报告中看到DrawCall和面数超高的情况
Mesh最好在500面左右
using Logic;
using Sirenix.OdinInspector;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using UnityEngine;
using UnityEngine.Rendering;public class GPUPerformanceTest : MonoBehaviour
{public Camera Camera;public Material Material;public Mesh Mesh;RenderTexture texture;float startTestTime;int sampleCounter;int skipCounter;public int skipSample = 1; // 丢弃采样,第一次渲染可能涉及shader编译,会影响统计数据public int maximumSampleCounter = 5;public int DrawTimesPerBatch = 100;public int BatchCountPerFrame = 1;public int FrameTimeMS = 10;public int DelayFramePerTest = 5;public float ScoreScale = 1;public float ScoreAdjust = 0;//public int MaximumDrawCount = 5000;long elapsedMS;[HideInInspector]public float TestScore = 0;// 性能测试评分private int _TotalDrawTimes = 0;private long _TotalDrawMilliseconds = 0;int delayFrameCounter;public bool RunOnStart = true;public Action OnComplete;enum TestState{Waiting,Tasting,Delaying,Completed,Freeze,}TestState State;private void Awake(){State = TestState.Waiting;}private void Start(){if (RunOnStart){StartTest();}}[Button]public void StartTest(){sampleCounter = 0;skipCounter = 0;delayFrameCounter = 0;startTestTime = Time.realtimeSinceStartup;if (!this.gameObject.activeSelf){this.gameObject.SetActive(true);}State = TestState.Tasting;Common.Log.Info("Performance test begin-------------");}private void OnEnable(){//texture = RenderTexture.GetTemporary(Camera.pixelWidth, Camera.pixelHeight, 0, UnityEngine.Experimental.Rendering.GraphicsFormat.R16G16B16A16_SFloat);RenderPipelineManager.endCameraRendering += RenderPipelineManager_endCameraRendering;}void TestDrawMesh(){long milliseconds = 0;int draw_times = 0;var stopwatch = Stopwatch.StartNew();for (int n = 0; n < BatchCountPerFrame; ++n){{for (int i = 0; i < DrawTimesPerBatch; ++i){CommandBuffer commandBuffer = new CommandBuffer();Vector3 look = this.Camera.transform.TransformDirection(Vector3.forward);Vector3 pos = this.Camera.transform.position + look.normalized * 10;RenderTargetIdentifier targetIdentifier = new RenderTargetIdentifier(texture);commandBuffer.DrawMesh(Mesh, Matrix4x4.TRS(pos, Quaternion.identity, Vector3.one), Material);Graphics.ExecuteCommandBuffer(commandBuffer);draw_times++;}}if (stopwatch.ElapsedMilliseconds > FrameTimeMS){break;}// if (_TotalDrawTimes >= MaximumDrawCount)// {// break;// }}stopwatch.Stop();milliseconds = stopwatch.ElapsedMilliseconds;_TotalDrawTimes += draw_times;_TotalDrawMilliseconds += milliseconds;}private void RenderPipelineManager_endCameraRendering(ScriptableRenderContext arg1, Camera arg2){if (State != TestState.Tasting)return;TestDrawMesh();sampleCounter++;if (skipCounter < skipSample){skipCounter++;sampleCounter = 0;_TotalDrawTimes = 0;_TotalDrawMilliseconds = 0;}if (sampleCounter >= maximumSampleCounter)//if (_TotalDrawTimes >= MaximumDrawCount){State = TestState.Completed;}else{delayFrameCounter = 0;State = TestState.Delaying;}}private void Update(){switch (State){case TestState.Delaying:{if (delayFrameCounter >= DelayFramePerTest){State = TestState.Tasting;}delayFrameCounter++;}break;case TestState.Completed:{TestScore = 1.0f * _TotalDrawTimes / Mathf.Max(1, _TotalDrawMilliseconds);TestScore = TestScore * ScoreScale + ScoreAdjust;Common.Log.Info($"Performance test draw mesh time(MS): {_TotalDrawMilliseconds}, draw times: {_TotalDrawTimes}, score: {TestScore}. ({Time.realtimeSinceStartup - startTestTime}s");State = TestState.Freeze;OnComplete?.Invoke();}break;case TestState.Freeze:{this.gameObject.SetActive(false);}break;}}private void OnDisable(){RenderPipelineManager.endCameraRendering -= RenderPipelineManager_endCameraRendering;//RenderTexture.ReleaseTemporary(texture);}
}
Unity 检测手机性能,区分高中低端机型(URP)相关推荐
- Unity 检测手机性能,区分高中低端机型
项目中针对高中低端机型需做不同的适配,如低端机型不开启全屏泛光,降低阴影质量,关闭抗锯齿效果等等.首先我在项目中用到的测试机都安装上安兔兔并进行跑分,当然这个跑分不是给游戏用,而是我们先确定手机是什么 ...
- Android区分高低端机型
一.背景 某些APP项目中需要针对高中低端安卓机型做不同的适配,例如:特效的开关.动画效果的调整等.怎么在项目中对Android进行高低端机型的区分?接下来的内容会进行分析. 二.区分标准 区分的标准 ...
- unity3d 优化 高中低端机 机型分类
unity 开发移动端游戏众多, 此文章为优化考虑, 对不同的手机分类为高中低端, 分类标准如下 Android 需要综合架构(这问题自己想).核心数(代码请在blog里找).主频(代码请在blog里 ...
- Unity针对高低端机型的优化
1.为什么要区分高低端机型 我们在制作游戏项目时,画质和流畅度都是非常重要的.市面上的游戏设备百花齐放,各大厂商推出不同型号.不同性能的设备来满足大众的需求. 一款游戏的画质和流畅度是决定游戏能否畅销 ...
- 芯片短缺蔓延至手机市场:骁龙888短缺 三星中低端机型生产受阻
近日,据国外媒体报道,自2020年下半年以来,芯片短缺问题就成为半导体行业的主旋律.如今,芯片短缺问题日益严重,包括汽车.手机.游戏机.PC在内的产业相继受到影响. 据悉,高通是HTC.索尼.诺基亚. ...
- android 主流机型排行,安卓手机性能排行:华为Mate40 Pro仅排第四,第一名无可撼动...
对于现在的智能手机市场,很多人都说其实性能已经足够使用,甚至已经处于性能过剩的阶段,但事实上这个说法也不完全对,如果买手机只是单纯地用来上网.看视频,聊天等常用功能,其实骁龙845都完全够用,但是如果 ...
- android 主流机型排行,安卓手机性能排行:小米10 Pro第八,第一名果然是它
原标题:安卓手机性能排行:小米10 Pro第八,第一名果然是它 时间终于来到了9月份,不出意外的话,万众期待的iPhone 12系列和华为Mate 40系列将于本月正式亮相,而随着这两款手机的发布,意 ...
- 可以检测手机帧率和温度的软件_主流手机芯片性能排行,看看哪款可以满足你!...
" 选购手机时,手机性能也是需要关注的一大要点,手机性能会影响到流畅度.游戏体验等,其中手机芯片性能起到决定性作用.目前5G手机所采用的芯片非常多,我们一起来了解下主流5G手机芯片性能,可以 ...
- Unity手游性能蓝皮书
作为游戏行业的服务商,UWA不仅为游戏开发者提供高效的性能优化工具,也致力于为行业提供更全面.更具体的信息和服务.为此,UWA今天发布2020-2021年度手游蓝皮书,从测试机型分布.引擎各模块开销. ...
最新文章
- CMake结合PCL库学习(1)
- 网站发布问题及使用Web Deployment Projects
- PostgreSQL字符集问题
- php对提交数据转码,如何使用php程序实现媒体转码消息的接收
- TODO:Go语言goroutine和channel使用
- Spark _17 _SparkShuffle、HashShuffleManager、SortShuffleManager
- 5 压缩上传图片_推荐一个干净纯粹的网站,专注图片压缩、pdf相关操作
- 少儿编程100讲轻松学python(七)-pycharm怎么删除项目
- soapui自带的webservice实例 MockService
- 一个完美网站的101项指标.第一部分.概述
- 采用nettcp绑定的wcf宿主到iis7
- Ajax学习笔记-get请求参数-3
- mega linux教程,LINUX 安装MegaRAID Storage Manager (MSM)安装使用教程
- 虚拟机ip地址怎么设置
- 15个经典面试问题及回答思路,知乎上转疯了!
- 工业互联网大数据之数据管理与治理的简易理解
- Stm32F4以太网远程固件升级BootLoader踩过官方的坑
- 03 循环、字符串、列表、元祖、字典
- NFT国内化的“数字藏品” 国内互联网龙头的入局
- B站网页视频加速设置
热门文章
- [SDOI2009]虔诚的墓主人
- 图片怎么缩小到300k?如何将图片缩小到300k以内?
- (干货)备战2021年软考中级网络工程师-04知识产权与标准化
- 让图片说出声音来(利用讯飞API实现图片转文字和文字转语音)
- 你为你的BLOG找了经纪人了吗?
- 视频局部区域的马赛克处理
- 记录一次有点意思的阿里云服务器被黑的经历
- java预研项目_YAML预研文档
- 接口测试及接口抓包常用的测试工具有哪些?
- arm架构linux系统平板电脑推荐,x86平板电脑排行_X86平板电脑推荐成垃圾,ARM架构平板电脑品牌是王道...