FSR-Unity-URP 1.0 のパフォーマンスと互換性の問題

1) FSR-Unity-URP 1.0 のパフォーマンスと互換性の問題
2) 大きなファイルの MD5 の計算に時間がかかる問題
3) Unity の今後のリロード スクリプトを監視する方法
4) Unity ゲームで Android のクラッシュと ANR の問題をシンボリックに分析する方法


これは、第 315 回 UWA 技術知識共有のプッシュです。今日も引き続き、開発と最適化に関連するいくつかの問題を選択します. 10 分間読むことをお勧めします. 注意深く読むと何かを得ることができます.

レンダリング

Q: FSR-Unity-URP 1.0 のパフォーマンスと互換性の問題について:

テスト環境:
Unity バージョン: 2020.3.3
URP バージョン: 10.4.0
グラフィック API: Vulkan
デバイス: OPPO K1

1. 互換性の問題
シーン カメラは HDR を有効にしており、URP でのレンダリング ターゲット RT のデフォルト フォーマットは B10G11R11_UFloatPack32 であり、デバイスでエラーが報告されます: ランダム書き込みでサポートされていないフォーマット - RG11B10。テクスチャ形式がランダム書き込みに対応しておらず、強制的に R16G16B16A16_SFloat に設定することで問題は解決しましたが、もっと正式な方法を見つけたいです。

2. パフォーマンスの問題:
OPPO K1 では、GPU の所要時間は、シーンの通常のレンダリング状態で約 20 ミリ秒です.FSR パフォーマンス レベルをオンにした後、GPU の所要時間は約 100 ミリ秒に急上昇します.同時に、 HUAWEI P30 Proでテストしたところ、FPSが約3FPS落ちました。

RenderDoc を使用してエディターでフレームをキャプチャすると、パフォーマンスのホットスポットが FSR のコンピュート シェーダーに集中します。

Compute Shader の 1 スレッドのサンプル数は 12 回です。

さらに、統合された後処理方法を使用した後、OPPO K1 でテストしたところ、後処理のコストが、RenderScale を 0.5 に変更した後に節約されたコストよりもはるかに大きく、代わりに全体的なフレーム レートが低下することがわかりました。

あなたの学生が FSR をプロジェクトに実装した経験があるかどうかはわかりませんが、共有していただければ幸いです。

A1: コンピュート シェーダー バージョンの実装を使用しないでください。URP12 の後処理メソッドの実装を参照してください。

少し前に試してみましたが、小龍660はこのレベルではあまり良くありません.670の消費と節約はほぼ同じであり、670以上でFSRを開く方が良いです.

回答を提供してくれた Jin Zhe@UWA Q&A コミュニティに感謝します

A2: 以下の回答は参考用です。

  1. 互換性問題
    Unityの友人に聞いてみたところ B10G11R11_UFloatPack32のフォーマットについては実装にデスクトップシステムのOpenGL規格のデフォルト要件がある OGLESはデフォルトでは有効にできないのでとりあえずはあなたのやり方が正しい運用である. または、Unity が OGLES で B10G11R11_UFloatPack32 をサポートするようにコードを更新するのを待つしかありません。

  2. パフォーマンスの問題:
    URP12 での後処理方法とコンピュート シェーダーの実装の具体的な内容についてはあまり詳しくありません. 上記の Jin Zhe 氏の回答はより信頼できるはずです. 現在投稿されているコンテンツから Compute の実装を見ると、Driver と HW の観点からのみ、vkCmdBeginRenderPass(C=Load, DS=load) と vkCmdEndRenderPass(C=store, DS =store)、この 2 か所 Load Store は必要ですか? 特にDS部分?

    Store と Load は、Mem の読み取りと書き込みを同期するために GPU 帯域幅を消費します vkCmdDispatch(188,94,1) と vkCmdDispatch(1,1,1). これら 2 つの WorkItem は理想的な設定ではありません. 一般的な携帯電話プラットフォームの GPU 構成は、どちらも、これらの 2 つが 2 の特定の累乗、通常は 32 の倍数または 64/128/256/512 の倍数であることを期待しています。 32 未満など) は、計算の実行時に GPU の並列処理に影響します。

    これら 2 つは、Snapdragon 660 K1 で Compute の実行時間が非常に長い理由の一部である可能性があります。HUAWEI の Core に関しては、Turbo などのテクノロジーが最下層でいくつかの最適化を検討し、APP 要求を変更するため、一貫性のないパフォーマンスの変動が生じます。

回答を提供してくれた Seague@UWA Q&A コミュニティに感謝します


スクリプティング

Q: 大きなファイルの MD5 を計算すると、時間がかかるという深刻な問題があり、2 分ほどかかり、携帯電話では受け付けられません。

テストの結果、バッファ サイズを 1MB に、2200 ミリ秒から 1980 ミリ秒に変更すると、最適化の効果は明ら​​かではありません。
C# – C# で大きなファイルのチェックサムを作成する最速の方法 – iTecNote

A: MD5 アルゴリズムよりもはるかに高速な xxHash アルゴリズムを使用してパフォーマンス データを比較できます。
https://github.com/uranium62/xxHashhttps://github.com/Cyan4973/xxHash_
_

回答を提供してくれた Ma San の男性 @UWA の質疑応答コミュニティに感謝します


スクリプティング

Q: Unity の今後のリロード スクリプトを監視するにはどうすればよいですか?

Reload Script後のコールバックであるメソッド[UnityEditor.Callbacks.DidReloadScripts(0)]は見つかりましたが、Reload前の監視メソッドが見つかりません.監視する方法はありますか?

A: 次の 2 つのイベントは、最初に InitializeOnLoadMethod または InitializeOnLoad と組み合わせて使用​​されます:
AssemblyReloadEvents.beforeAssemblyReload
AssemblyReloadEvents.afterAssemblyReload

別のモード切り替えイベント: EditorApplication.playModeStateChanged、次のように手動の Reload Script を作成しました:
https://github.com /ZeroUltra/UnityManualReload/blob/main/ScriptCompileReloadTools.cs

回答を提供してくれた zerolj@UWA Q&A コミュニティに感謝します


スクリプティング

Q: Unity ゲームで Android のクラッシュと ANR の問題をシンボリックに分析するにはどうすればよいですか?

A1: Google Play は、Play Console での各アプリ バージョンのデバッグ シンボル ファイルのアップロードをサポートしています。これにより、クラッシュや ANR の問題の分析と修正が容易になります。

Unity 2020.3 以降では、Unity のガイドに従って Android シンボルを生成し、シンボリケーション分析ファイルを Google Play コンソールにアップロードして、人間が読み取れるスタック トレースを Android Vitals ダッシュボードで表示できます。

それ以外の場合は、Unity での Android クラッシュのシンボリック化の記事に従って、スタック トレースを手動で解析するか、Unity の下位バージョン用のシンボル ファイルを生成できます。

回答を提供してくれた I'm@UWA Q&A コミュニティに感謝します

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 Q&A コミュニティに感謝します

表紙画像はネットより


今日の分かち合いは以上です。もちろん、人生に制限はありませんが、知識にも制限はありません。長い開発サイクルの中で、あなたが目にするこれらの質問は氷山の一角に過ぎないかもしれません. UWA Q&A Web サイトには、より多くの技術的なトピックが既に用意されています. 進歩を愛するあなたの参加を歓迎します.あなたの方法は他の人の緊急のニーズを解決できるかもしれません.他の山の「石」はあなたの「翡翠」を攻撃することもできます.

公式ウェブサイト: www.uwa4d.com
Q&A コミュニティ: answer.uwa4d.com

 

 

おすすめ

転載: blog.csdn.net/UWA4D/article/details/128110433