FSR-Unity-URP 1.0 的性能和兼容性问题

news2024/11/27 4:03:58

1)FSR-Unity-URP 1.0 的性能和兼容性问题
​2)计算大文件MD5耗时问题
3)如何监听Unity即将Reload Script
4)如何对Unity游戏的Android崩溃和ANR问题进行符号化解析


这是第315篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

Rendering

Q:关于FSR-Unity-URP 1.0 的性能和兼容性问题:

测试环境:
Unity版本:2020.3.3
URP版本:10.4.0
Graphics API:Vulkan
设备:OPPO K1

1. 兼容性问题
场景相机开启了HDR,URP下渲染目标RT的默认格式为B10G11R11_UFloatPack32,在设备上会报错:Format unsupported for random writes - RG11B10。该纹理格式不支持随机写入,之后强制把格式设置为R16G16B16A16_SFloat,问题解决,但是想找到更为正规的做法。

2. 性能问题:
在OPPO K1上,场景正常渲染状态下GPU耗时为20ms左右,开启FSR Performance Level后,GPU耗时飙升到100ms左右,同时在HUAWEI P30 Pro上做了测试,FPS下降了3FPS左右。

用RenderDoc在Editor做了抓帧,性能热点集中在FSR的Compute Shader中:

Compute Shader单个Thread的采样次数为12次。

另外,使用集成后处理的方式后,在OPPO K1上做了测试,发现后处理的开销比把RenderScale改成0.5后节省的开销还要大很多,整体帧率反而下降了。

不知道各位同学是否有把FSR落地到项目的经验,希望可以分享下。

A1:不要用Compute Shader版本的实现,参考URP12里后处理方式的实现。

前一段时间我试了下,在晓龙660这个级别是不太行,670上消耗和节约的差不多,670再往上的才开FSR好一点。

感谢金喆@UWA问答社区提供了回答

A2:以下回答供参考:

  1. 兼容性问题
    请教了一下Unity的朋友,对于B10G11R11_UFloatPack32 这个Format,实现里面有个默认是桌面系统的OpenGL标准的要求,OGLES默认无法开启的,所以暂时来说你的做法是一个正确的操作。或者只能等Unity更新Code来支持OGLES下的B10G11R11_UFloatPack32。

  2. 性能问题:
    不是很熟悉URP12上的后处理方式和Compute Shader实现的具体内容,上面金喆大佬的回答应该更靠谱。就当前贴出来的内容来看Compute的实现,仅从Driver和HW角度,可能有两个地方会导致一定的性能问题:即vkCmdBeginRenderPass(C=Load, DS=load)和vkCmdEndRenderPass(C=store, DS=store),这两个地方Load Store都是必须的吗?尤其是DS部分?

    Store和Load会消耗GPU带宽去同步Mem读写vkCmdDispatch(188,94,1)和vkCmdDispatch(1,1,1),这两个WorkItem都不是一个很理想的设置,一般的手机平台的GPU配置,都希望这两个是一个2的某个次方的,典型的是32的倍数或者64/128/256/512之类的倍数,若太大(比如超过2048,只是举例)或者太小(比如小于32)都会比较影响GPU执行计算时候的并行度。

    这两个可能是在骁龙660的K1上Compute执行时间很长的部分原因。至于HUAWEI的Core,类似Turbo之类的技术会在底层考虑一些优化而更改了APP的请求,从而导致性能波动情况不太一致。

感谢Seague@UWA问答社区提供了回答


Scripting

Q:在计算大文件MD5的时候,存在耗时严重问题,大概2分钟,在手机上接受不了,有大佬有方法吗?

测试发现:改Buffer大小到1MB,由2200毫秒变成了1980毫秒,优化效果并不明显。
C# – the fastest way to create a checksum for large files in C# – iTecNote

A:可以尝试使用xxHash算法,对比过性能数据,比MD5算法快很多。
https://github.com/uranium62/xxHash
https://github.com/Cyan4973/xxHash

感谢马三小伙儿@UWA问答社区提供了回答


Scripting

Q:请问如何监听Unity即将Reload Script?

有找到方法 [UnityEditor.Callbacks.DidReloadScripts(0)] ,这个是Reload Script之后的回调,但未找到Reload之前的监听方法,请问有办法监听到吗?

A:以下两个事件,在一开始配合InitializeOnLoadMethod或者InitializeOnLoad使用:
AssemblyReloadEvents.beforeAssemblyReload
AssemblyReloadEvents.afterAssemblyReload

再说个模式切换事件:EditorApplication.playModeStateChanged,我自己写了一个手动Reload Script,参考如下:
https://github.com/ZeroUltra/UnityManualReload/blob/main/ScriptCompileReloadTools.cs

感谢zerolj@UWA问答社区提供了回答


Scripting

Q:如何对Unity游戏的Android崩溃和ANR问题进行符号化解析?

A1:Google Play支持在Play管理中心为每个应用版本上传调试符号文件。这样可以更轻松地分析和修复崩溃和ANR问题。

从Unity 2020.3及更高版本开始,您可以按照Unity的指南生成Android符号,然后将符号化解析文件上传到Google Play管理中心,以便在Android Vitals信息中心查看人类可读懂的堆栈轨迹。

否则,您可以按照Unity中的对Android崩溃进行符号化解析一文,手动解析堆栈轨迹或为较低版本的Unity生成符号文件。

感谢I’m@UWA问答社区提供了回答

A2:Android上的崩溃和ANR问题会生成堆栈轨迹,这是您的游戏在崩溃之前调用过的嵌套函数序列的快照。这些快照可帮助您找出并修正源代码中的任何问题。

不过,当您在发布模式下使用Unity构建游戏时,符号不会随APK一起打包。如果您的游戏崩溃或出现ANR问题,调用堆栈将仅显示内存地址。

05-26 18:06:51.311: A/libc(26986): Fatal signal 11 (SIGSEGV) at 0x000004e4 (code=1), thread 27024 (Worker Thread)
05-26 18:06:51.411: I/DEBUG(242): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
05-26 18:06:51.411: I/DEBUG(242): Build fingerprint: 'Xiaomi/cancro_wc_lte/cancro:4.4.4/KTU84P/V6.7.1.0.KXDCNCH:user/release-keys’
05-26 18:06:51.411: I/DEBUG(242): Revision: '0’
05-26 18:06:51.411: I/DEBUG(242): pid: 26986, tid: 27024, name: Worker Thread >>> com.u.demo <<<
05-26 18:06:51.411: I/DEBUG(242): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 000004e4
I/DEBUG(242): backtrace:
I/DEBUG(242): #00 pc 006d4960 /data/app-lib/com.u.demo-1/libunity.so
I/DEBUG(242): #01 pc 006d4c0c /data/app-lib/com.u.demo-1/libunity.so
I/DEBUG(242): #02 pc 006d4c0c /data/app-lib/com.u.demo-1/libunity.so
I/DEBUG(242): #03 pc 006d4c0c /data/app-lib/com.u.demo-1/libunity.so
I/DEBUG(242): #04 pc 006d4c0c /data/app-lib/com.u.demo-1/libunity.so
I/DEBUG(242): #05 pc 001c5510 /data/app-lib/com.u.demo-1/libunity.so
I/DEBUG(242): #06 pc 001c595c /data/app-lib/com.u.demo-1/libunity.so
I/DEBUG(242): #07 pc 001c4ec0 /data/app-lib/com.u.demo-1/libunity.so
I/DEBUG(242): #08 pc 0043a05c /data/app-lib/com.u.demo-1/libunity.so
I/DEBUG(242): #09 pc 0000d248 /system/lib/libc.so (__thread_entry+72)
I/DEBUG(242): #10 pc 0000d3e0 /system/lib/libc.so (pthread_create+240)

感谢anan@UWA问答社区提供了回答

封面图来源于网络


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
问答社区:answer.uwa4d.com

 

 

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

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

相关文章

2022年GPS广播星历精密星历如何下载

注意&#xff1a;&#xff01;&#xff01;网上现有很多教程的星历下载地址 ftp://cddis.gsfc.nasa.gov/已经访问不了了&#xff0c;最新的方法见下文&#xff0c;亲测有效~ 1、星历下载网址&#xff08;需要注册一下&#xff09;Earthdata Loginhttps://cddis.nasa.gov/archiv…

我的居家生活--爱摸鱼的美工(二)

-----------作者&#xff1a;天涯小Y 这失败的拉花叫”海上升明月” 呜一 做自己&#xff0c;不太好也没关系 我给自己居家的时间不多了 11月30日我决定”解封” 从身心开始&#xff0c;愿脚步跟上 突如其来的“银丝” 让我沮丧 黑芝麻的疗法因快递又安排不上 算了.幼笑吧 白发…

C#线程的参数传递、获取线程返回值以及处理多线程冲突

C#作为一门优秀的开发语言&#xff0c;现在国内的流行度貌似不如以前&#xff0c;大家都不在意它的无所不能了。 C#的灵活与强大只有在经常使用中才会有所领悟&#xff0c;适当地掌握它还是有必要的。 在这里总结一下线程的传递参数以及获取线程的返回值&#xff0c;还有处理多…

【毕业设计】17-基于单片机的矿井提升机_步进电机控制装置设计(原理图+仿真+源代码+实物图+答辩论文+答辩PPT)

typora-root-url: ./ 【毕业设计】17-基于单片机的矿井提升机_步进电机控制装置设计&#xff08;原理图仿真源代码实物图答辩论文答辩PPT&#xff09; 文章目录typora-root-url: ./【毕业设计】17-基于单片机的矿井提升机_步进电机控制装置设计&#xff08;原理图仿真源代码实…

IB中文(语言与文学)介绍分析

Intro to Group 1 Subjects&#xff1a;语言A 语言A科目主要针对学生的母语语言运用与文学鉴赏能力进行考核&#xff0c;旨在培养学生文学素养的同时注重社会关怀、全球视角与批判性思维的意识形成。 IB文凭要求每位学生至少在语言A中学习一门课程。 今天我们就来仔细介绍一下其…

全波形反演的深度学习方法: 第三章 常规反演

本章介绍反演的基础知识, 以及工程中的常规反演. 仅供内部培训. 3.1 地震数据采集 地震勘探中常使用人工激发的振动进行数据采集. 相应装置包括: 激发器是产生震动的装置, 如炸药, 地震车 (撞击地面). 在城市道路等具有车辆会产生振动的地方, 也可以不安装这类装置;地震检波…

为什么我推荐用户故事地图?

最近在给几个客户的培训和辅导中&#xff0c;都用到了用户故事地图(User Story Mapping or USM)&#xff0c;越来越发现USM是一个强大的工具。USM有它特殊的妙用之处和适用范围&#xff0c;我们不用指望USM能解决多的问题&#xff0c;比如产品架构和用户体验旅程就不在USM的范围…

TSN新技术,让您的设备网络“更实时、更确定、更安全”

近日,工业和信息化部发布了2022年第23号公告,批准发布行业标准YD/T 4134-2022《工业互联网时间敏感网络需求及场景》。该标准是国内首个时间敏感网络(TSN)技术标准,标志着我国TSN技术标准体系建设迈出了坚实的一步,对构建工业互联网网络标准体系具有重要意义。 TSN源于Time…

【解决方法】错误:无法和SFTP服务器建立FTP连接,请选择合适的协议

在家连实验室的服务器时&#xff0c;出现了如下的情况&#xff1a;当时一直在想为啥协议不合适。 解决方案&#xff1a; 1. 点击【文件】->【站点管理器】&#xff0c;出现如下界面&#xff1a; 可能你的那里没有新站点&#xff0c;如果没有就点击新站点哦。 2. 点击【协议…

社区系统项目复盘-4

文章目录Redis高性能存储什么是Redis&#xff1f;为什么使用Redis&#xff1f;Spring是怎么整合Redis的&#xff1f;Redis事务管理点赞关注优化登录模块Redis高性能存储 使用redis实现了点赞、关注相关的功能&#xff0c;优化了登录模块。 什么是Redis&#xff1f; Redis是一…

[附源码]计算机毕业设计springboot基于vue的软件谷公共信息平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

力扣(LeetCode)895. 最大频率栈(C++)

设计 ①维护最大频率&#xff0c;②维护每个数的出现次数&#xff0c;③维护出现次数对应的栈。 压栈时&#xff0c;新数压入出现次数对应的栈&#xff0c;每次压入新数&#xff0c;维护最大频率(所有出现次数中的最大出现次数)。 弹栈时&#xff0c;找最大频率对应的栈&…

RealEvo许可证协议

一直使用RealEvo V4.0.0版&#xff0c;今天因license到期&#xff0c;索性一同安装下新版的IDE。 当前最新RealEvo IDE版本为 V5.0.5&#xff0c;V5.0.0~V5.0.3版本存在一些bug&#xff0c;建议更新。 SylixOS 许可信息如下&#xff08;开源版本&#xff09; SylixOS嵌入式实…

【毕业设计】前后端分离——实现登录注册功能

&#x1f308;据说&#xff0c;看我文章时 关注、点赞、收藏 的 帅哥美女们 心情都会不自觉的好起来。 前言&#xff1a; &#x1f9e1;作者简介&#xff1a;大家好我是 user_from_future &#xff0c;意思是 “ 来自未来的用户 ” &#xff0c;寓意着未来的自己一定很棒~ ✨个…

Word控件Spire.Doc 【图像形状】教程(8): 如何借助C#/VB.NET在 Word 中插入艺术字

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

基于51单片机的智能蓝牙路灯街灯控制系统proteus仿真原理图PCB

功能&#xff1a; 0.本系统采用STC89C52作为单片机 1.液晶实时显示时间/环境光强/工作模式 2.每隔5s向蓝牙串口发送一次信息 3.支持路灯故障检测 4.工作时间18~24时&#xff0c;两个路灯同时点亮&#xff0c;24时以后&#xff0c;B路灯关闭&#xff0c;若检测到由物体通过&…

【Kafka】Kafka的重复消费和消息丢失问题

文章目录前言一、重复消费1.1 重复消费出现的场景1.1.1 Consumer消费过程中&#xff0c;进程挂掉/异常退出1.1.2 消费者消费时间过长1.2 重复消费解决方案1.2.1 针对于消费端挂掉等原因造成的重复消费问题1.2.2 针对于Consumer消费时间过长带来的重复消费问题二、消息丢失2.1 生…

Multipass,多平台本地轻量级Linux体验!

Multipass 是由Ubuntu官方提供&#xff0c;在Linux&#xff0c;MacOS和Windows上快速生成 Ubuntu虚拟机 的工具。它提供了一个简单但功能强大的CLI&#xff0c;可让我们在本地快速进入Ubuntu系统环境并使用Linux命令&#xff0c;亦可以在本地计算机创建自己的迷你型云服务器。总…

zabbix监控网络连接状态

目录 一、环境准备 二、网络连接状态介绍 三、自定义监控key 四、给主机添加监控项 一、环境准备 1、搭建zabbix基础环境 zabbix基础环境部署参照&#xff1a;zabbix基础环境部署_桂安俊kylinOS的博客-CSDN博客 2、给web1安装nginx环境&#xff0c;并加载status模块 以…

SpringCloud学习笔记 - 链路监控 - SpringCloud Sleuth

1. Sleuth简介 在微服务框架中&#xff0c;一个由客户端发起的请求&#xff0c;在后端系统中会调用多个不同的的服务节点&#xff0c;来协同产生最后的响应结果&#xff0c;因此每一个前端请求都会形成一条复杂的分布式服务调用链路&#xff0c;链路中的任何一环出现高延时或错…