1)FSR-Unity-URP 1.0 的性能和兼容性問題
?2)計算大文件MD5耗時問題
3)如何監(jiān)聽Unity即將Reload Script
4)如何對Unity游戲的Android崩潰和ANR問題進行符號化解析
這是第315篇UWA技術知識分享的推送。今天我們繼續(xù)為大家精選了若干和開發(fā)、優(yōu)化相關的問題,建議閱讀時間10分鐘,認真讀完必有收獲。
RenderingQ:關于FSR-Unity-URP 1.0 的性能和兼容性問題:
測試環(huán)境:
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,問題解決,但是想找到更為正規(guī)的做法。
2. 性能問題:
在OPPO K1上,場景正常渲染狀態(tài)下GPU耗時為20ms左右,開啟FSR Performance Level后,GPU耗時飆升到100ms左右,同時在HUAWEI P30 Pro上做了測試,F(xiàn)PS下降了3FPS左右。
用RenderDoc在Editor做了抓幀,性能熱點集中在FSR的Compute Shader中:
Compute Shader單個Thread的采樣次數(shù)為12次。
另外,使用集成后處理的方式后,在OPPO K1上做了測試,發(fā)現(xiàn)后處理的開銷比把RenderScale改成0.5后節(jié)省的開銷還要大很多,整體幀率反而下降了。
不知道各位同學是否有把FSR落地到項目的經(jīng)驗,希望可以分享下。
A1:不要用Compute Shader版本的實現(xiàn),參考URP12里后處理方式的實現(xiàn)。
前一段時間我試了下,在曉龍660這個級別是不太行,670上消耗和節(jié)約的差不多,670再往上的才開FSR好一點。
感謝金喆@UWA問答社區(qū)提供了回答
A2:以下回答供參考:
兼容性問題
請教了一下Unity的朋友,對于B10G11R11_UFloatPack32 這個Format,實現(xiàn)里面有個默認是桌面系統(tǒng)的OpenGL標準的要求,OGLES默認無法開啟的,所以暫時來說你的做法是一個正確的操作。或者只能等Unity更新Code來支持OGLES下的B10G11R11_UFloatPack32。性能問題:
不是很熟悉URP12上的后處理方式和Compute Shader實現(xiàn)的具體內(nèi)容,上面金喆大佬的回答應該更靠譜。就當前貼出來的內(nèi)容來看Compute的實現(xiàn),僅從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的倍數(shù)或者64/128/256/512之類的倍數(shù),若太大(比如超過2048,只是舉例)或者太?。ū热缧∮?2)都會比較影響GPU執(zhí)行計算時候的并行度。
這兩個可能是在驍龍660的K1上Compute執(zhí)行時間很長的部分原因。至于HUAWEI的Core,類似Turbo之類的技術會在底層考慮一些優(yōu)化而更改了APP的請求,從而導致性能波動情況不太一致。
感謝Seague@UWA問答社區(qū)提供了回答
Q:在計算大文件MD5的時候,存在耗時嚴重問題,大概2分鐘,在手機上接受不了,有大佬有方法嗎?
測試發(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算法,對比過性能數(shù)據(jù),比MD5算法快很多。
https://github.com/uranium62/xxHash
https://github.com/Cyan4973/xxHash
感謝馬三小伙兒@UWA問答社區(qū)提供了回答
Q:請問如何監(jiān)聽Unity即將Reload Script?
有找到方法 [UnityEditor.Callbacks.DidReloadScripts(0)] ,這個是Reload Script之后的回調(diào),但未找到Reload之前的監(jiān)聽方法,請問有辦法監(jiān)聽到嗎?
A:以下兩個事件,在一開始配合InitializeOnLoadMethod或者InitializeOnLoad使用:
AssemblyReloadEvents.beforeAssemblyReload
AssemblyReloadEvents.afterAssemblyReload
再說個模式切換事件:EditorApplication.playModeStateChanged,我自己寫了一個手動Reload Script,參考如下:
https://github.com/ZeroUltra/UnityManualReload/blob/main/ScriptCompileReloadTools.cs
感謝zerolj@UWA問答社區(qū)提供了回答
Q:如何對Unity游戲的Android崩潰和ANR問題進行符號化解析?
A1:Google Play支持在Play管理中心為每個應用版本上傳調(diào)試符號文件。這樣可以更輕松地分析和修復崩潰和ANR問題。
從Unity 2020.3及更高版本開始,您可以按照Unity的指南生成Android符號,然后將符號化解析文件上傳到Google Play管理中心,以便在Android Vitals信息中心查看人類可讀懂的堆棧軌跡。
否則,您可以按照Unity中的對Android崩潰進行符號化解析一文,手動解析堆棧軌跡或為較低版本的Unity生成符號文件。
感謝I’m@UWA問答社區(qū)提供了回答
A2:Android上的崩潰和ANR問題會生成堆棧軌跡,這是您的游戲在崩潰之前調(diào)用過的嵌套函數(shù)序列的快照。這些快照可幫助您找出并修正源代碼中的任何問題。
不過,當您在發(fā)布模式下使用Unity構建游戲時,符號不會隨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)絡
今天的分享就到這里。當然,生有涯而知無涯。在漫漫的開發(fā)周期中,您看到的這些問題也許都只是冰山一角,我們早已在UWA問答網(wǎng)站上準備了更多的技術話題等你一起來探索和分享。歡迎熱愛進步的你加入,也許你的方法恰能解別人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官網(wǎng):www.uwa4d.com
問答社區(qū):answer.uwa4d.com
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
當前名稱:FSR-Unity-URP1.0的性能和兼容性問題-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://www.rwnh.cn/article48/djooep.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供服務器托管、網(wǎng)站營銷、網(wǎng)站設計、標簽優(yōu)化、網(wǎng)站建設、網(wǎng)站維護
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容