Unity

URPでOverdrawを確認できるOverdrawForURP【Unity】

URPでOverdrawを確認できるOverdrawForURP【Unity】

Built-InパイプラインにあったSceneビューのOverdraw表示ですがUniversalRenderPipeline(URP)では消えていました。

今後のバージョンで搭載されるかもしれませんが、確認した中ではUnity2020.1、URP8.2まで搭載されていなかったので確認用に作成したものを公開しました。

GameビューもOverdraw表示にできます。

OverdrawForURPOverdrawForURP

GitHub

導入方法

PackageManagerからインストール

中身を編集して使う場合はGitHubから直接ダウンロードをお願いします。

Window > Package Manager を開き、左上の+ボタンから「Add package from git URL…」を選択して下さい。

Add package from git URL...を押す

表示されるURL入力欄に、以下のURLを入力して「Add」ボタンを押して下さい。

https://github.com/ina-amagami/OverdrawForURP.git

リストに追加されたらインストール完了です(画像はUnity2020.1の表示)。

インストール完了インストール完了

アセットの設定

使用しているパイプラインアセットの General > Renderer List に「OverdrawRenderer」を追加して下さい(順番は何番目でもOKです)。

OverdrawRendererを追加OverdrawRendererを追加

追加時の選択リストに「OverdrawRenderer」が表示されない場合は、右のほうにある目のマークを押せば表示されます。

以上で設定は完了です。

使い方

Sceneビューの左上、通常「Shaded」と表示されているボタンをクリックすると「Overdraw」の項目が追加されているので、こちらをクリックすると有効になります。戻す時は「Shaded」をクリックして下さい。

「Overdraw」を選択「Overdraw」を選択

注意点

ツール使用中はパイプラインアセットを保存できない

DefaultのRendererを変更する(パイプラインアセットの中身を書き換える)という仕組み上、ツール使用中に保存すると変更されたままになってしまうため、ツール使用中は対象のパイプラインアセットだけ保存できないようにしています。

パイプラインアセットを更新する際は、Overdraw表示をオフにしてから保存するようお願いします。

従来のOverdrawと違うところ

不透明オブジェクトはZTestを行う

Built-Inでは全てのオブジェクトを半透明として扱ってOverdraw表示をしていますが、これだと他のオブジェクトに隠れて描画されないピクセルまで上塗りされているかのような表示になってしまうのでZTestを行うようにしました。参考↓

AlphaClipは反映されないので厳密に正しい表示とは言えませんが、大まかにピクセルが塗られた回数を確認するにはこちらの方が正しいかと思います。

UIなどの半透明オブジェクトは、従来のOverdrawと同じです。

従来のように不透明オブジェクトも半透明としてOverdraw表示を行いたい場合は、以下のように「OverdrawRenderer」アセット設定内の「Opaque Shader」を「Overdraw-Transparent」に変更すればOKです。

PackageManagerから導入した場合は変更ができないので、新規でForwardRendererを作成し、設定を合わせて下さい。その際、Nameは必ず「OverdrawRendererFeature」として下さい。

ビルド後アプリでの利用

ビルド後のアプリでもカメラ単位で有効化できます。
利用する場合は Scripting Define Symbols に以下を追加します。

USE_RUNTIME_OVERDRAW

メインカメラをOverdraw表示にするスクリプト例 ※RendererListの1番にOverdrawRendererがある場合