Unity

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

URPでOverdrawを確認できるOverdrawForURP【Unity】
記事内に商品プロモーションを含む場合があります

UnityでSceneビューをOverdraw表示にできる機能ですが、UniversalRenderPipeline(URP)では消えていたので復活させる拡張を作成しました。

今後のバージョンで搭載されるかもしれませんが確認した中ではUnity2020.3.2f1(URP10.4.0)まで搭載されていません。

URP12(Unity2021.2)からRenderingDebuggerという機能でOverdraw表示がサポートされるようになりました。

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」を選択

注意点

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

デフォルトの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がある場合