1)FSR-Unity-URP 1.0 的性能和兼容性問題
?2)計(jì)算大文件MD5耗時(shí)問題
3)如何監(jiān)聽Unity即將Reload Script
4)如何對(duì)Unity游戲的Android崩潰和ANR問題進(jìn)行符號(hào)化解析

這是第315篇UWA技術(shù)知識(shí)分享的推送。今天我們繼續(xù)為大家精選了若干和開發(fā)、優(yōu)化相關(guān)的問題,建議閱讀時(shí)間10分鐘,認(rèn)真讀完必有收獲。
RenderingQ:關(guān)于FSR-Unity-URP 1.0 的性能和兼容性問題:
測(cè)試環(huán)境:
Unity版本:2020.3.3
URP版本:10.4.0
Graphics API:Vulkan
設(shè)備:OPPO K1
1. 兼容性問題
場(chǎng)景相機(jī)開啟了HDR,URP下渲染目標(biāo)RT的默認(rèn)格式為B10G11R11_UFloatPack32,在設(shè)備上會(huì)報(bào)錯(cuò):Format unsupported for random writes - RG11B10。該紋理格式不支持隨機(jī)寫入,之后強(qiáng)制把格式設(shè)置為R16G16B16A16_SFloat,問題解決,但是想找到更為正規(guī)的做法。
2. 性能問題:
在OPPO K1上,場(chǎng)景正常渲染狀態(tài)下GPU耗時(shí)為20ms左右,開啟FSR Performance Level后,GPU耗時(shí)飆升到100ms左右,同時(shí)在HUAWEI P30 Pro上做了測(cè)試,F(xiàn)PS下降了3FPS左右。
用RenderDoc在Editor做了抓幀,性能熱點(diǎn)集中在FSR的Compute Shader中:

Compute Shader單個(gè)Thread的采樣次數(shù)為12次。
另外,使用集成后處理的方式后,在OPPO K1上做了測(cè)試,發(fā)現(xiàn)后處理的開銷比把RenderScale改成0.5后節(jié)省的開銷還要大很多,整體幀率反而下降了。
不知道各位同學(xué)是否有把FSR落地到項(xiàng)目的經(jīng)驗(yàn),希望可以分享下。
A1:不要用Compute Shader版本的實(shí)現(xiàn),參考URP12里后處理方式的實(shí)現(xiàn)。
前一段時(shí)間我試了下,在曉龍660這個(gè)級(jí)別是不太行,670上消耗和節(jié)約的差不多,670再往上的才開FSR好一點(diǎn)。
感謝金喆@UWA問答社區(qū)提供了回答
A2:以下回答供參考:
兼容性問題
請(qǐng)教了一下Unity的朋友,對(duì)于B10G11R11_UFloatPack32 這個(gè)Format,實(shí)現(xiàn)里面有個(gè)默認(rèn)是桌面系統(tǒng)的OpenGL標(biāo)準(zhǔn)的要求,OGLES默認(rèn)無法開啟的,所以暫時(shí)來說你的做法是一個(gè)正確的操作。或者只能等Unity更新Code來支持OGLES下的B10G11R11_UFloatPack32。性能問題:
不是很熟悉URP12上的后處理方式和Compute Shader實(shí)現(xiàn)的具體內(nèi)容,上面金喆大佬的回答應(yīng)該更靠譜。就當(dāng)前貼出來的內(nèi)容來看Compute的實(shí)現(xiàn),僅從Driver和HW角度,可能有兩個(gè)地方會(huì)導(dǎo)致一定的性能問題:即vkCmdBeginRenderPass(C=Load, DS=load)和vkCmdEndRenderPass(C=store, DS=store),這兩個(gè)地方Load Store都是必須的嗎?尤其是DS部分?
Store和Load會(huì)消耗GPU帶寬去同步Mem讀寫vkCmdDispatch(188,94,1)和vkCmdDispatch(1,1,1),這兩個(gè)WorkItem都不是一個(gè)很理想的設(shè)置,一般的手機(jī)平臺(tái)的GPU配置,都希望這兩個(gè)是一個(gè)2的某個(gè)次方的,典型的是32的倍數(shù)或者64/128/256/512之類的倍數(shù),若太大(比如超過2048,只是舉例)或者太小(比如小于32)都會(huì)比較影響GPU執(zhí)行計(jì)算時(shí)候的并行度。
這兩個(gè)可能是在驍龍660的K1上Compute執(zhí)行時(shí)間很長(zhǎng)的部分原因。至于HUAWEI的Core,類似Turbo之類的技術(shù)會(huì)在底層考慮一些優(yōu)化而更改了APP的請(qǐng)求,從而導(dǎo)致性能波動(dòng)情況不太一致。
感謝Seague@UWA問答社區(qū)提供了回答
Q:在計(jì)算大文件MD5的時(shí)候,存在耗時(shí)嚴(yán)重問題,大概2分鐘,在手機(jī)上接受不了,有大佬有方法嗎?
測(cè)試發(fā)現(xiàn):改Buffer大小到1MB,由2200毫秒變成了1980毫秒,優(yōu)化效果并不明顯。
C# – the fastest way to create a checksum for large files in C# – iTecNote
A:可以嘗試使用xxHash算法,對(duì)比過性能數(shù)據(jù),比MD5算法快很多。
https://github.com/uranium62/xxHash
https://github.com/Cyan4973/xxHash
感謝馬三小伙兒@UWA問答社區(qū)提供了回答
Q:請(qǐng)問如何監(jiān)聽Unity即將Reload Script?
有找到方法 [UnityEditor.Callbacks.DidReloadScripts(0)] ,這個(gè)是Reload Script之后的回調(diào),但未找到Reload之前的監(jiān)聽方法,請(qǐng)問有辦法監(jiān)聽到嗎?
A:以下兩個(gè)事件,在一開始配合InitializeOnLoadMethod或者InitializeOnLoad使用:
AssemblyReloadEvents.beforeAssemblyReload
AssemblyReloadEvents.afterAssemblyReload
再說個(gè)模式切換事件:EditorApplication.playModeStateChanged,我自己寫了一個(gè)手動(dòng)Reload Script,參考如下:
https://github.com/ZeroUltra/UnityManualReload/blob/main/ScriptCompileReloadTools.cs
感謝zerolj@UWA問答社區(qū)提供了回答
Q:如何對(duì)Unity游戲的Android崩潰和ANR問題進(jìn)行符號(hào)化解析?
A1:Google Play支持在Play管理中心為每個(gè)應(yīng)用版本上傳調(diào)試符號(hào)文件。這樣可以更輕松地分析和修復(fù)崩潰和ANR問題。
從Unity 2020.3及更高版本開始,您可以按照Unity的指南生成Android符號(hào),然后將符號(hào)化解析文件上傳到Google Play管理中心,以便在Android Vitals信息中心查看人類可讀懂的堆棧軌跡。
否則,您可以按照Unity中的對(duì)Android崩潰進(jìn)行符號(hào)化解析一文,手動(dòng)解析堆棧軌跡或?yàn)檩^低版本的Unity生成符號(hào)文件。
感謝I’m@UWA問答社區(qū)提供了回答
A2:Android上的崩潰和ANR問題會(huì)生成堆棧軌跡,這是您的游戲在崩潰之前調(diào)用過的嵌套函數(shù)序列的快照。這些快照可幫助您找出并修正源代碼中的任何問題。
不過,當(dāng)您在發(fā)布模式下使用Unity構(gòu)建游戲時(shí),符號(hào)不會(huì)隨APK一起打包。如果您的游戲崩潰或出現(xiàn)ANR問題,調(diào)用堆棧將僅顯示內(nèi)存地址。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問答社區(qū)提供了回答
封面圖來源于網(wǎng)絡(luò)
今天的分享就到這里。當(dāng)然,生有涯而知無涯。在漫漫的開發(fā)周期中,您看到的這些問題也許都只是冰山一角,我們?cè)缫言赨WA問答網(wǎng)站上準(zhǔn)備了更多的技術(shù)話題等你一起來探索和分享。歡迎熱愛進(jìn)步的你加入,也許你的方法恰能解別人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官網(wǎng):www.uwa4d.com
問答社區(qū):answer.uwa4d.com
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
                當(dāng)前名稱:FSR-Unity-URP1.0的性能和兼容性問題-創(chuàng)新互聯(lián)
                
                網(wǎng)站網(wǎng)址:http://chinadenli.net/article48/djooep.html
            
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站營(yíng)銷、網(wǎng)站設(shè)計(jì)、標(biāo)簽優(yōu)化、網(wǎng)站建設(shè)、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容