ゆにてく備忘録

Unityやその他学んだ事を忘れないために書くぶろぐ

【Unity】LWRPの任意の場所にカスタムレンダーパスを追加する方法

Unity2019でのやり方は以下

Lightweight Render Pipeline(LWRP) のパイプラインを拡張する - Unity Connect

 

Unity 2018.3からLWRPの任意のタイミングでカスタムレンダーパスを追加することができるようになりました.Unity 2018.3 リリース – Unity Blog

そのやり方を書こうと思います.

Unity2018.3.1f1 LWRPのバージョンは4.6.0を使用してます.

必要クラス

Transparentのパスを追加する例で説明します.必要なクラスは2つあります.

  1. 追加するパスを定義するScriptableRenderPassを継承したクラス
  2. レンダリング順番を制御するIRendererSetupとMonoBehaviourを継承したクラス

追加するパス

追加するパスのクラスを以下ではRenderTransparentForwardPass2とする.

RenderTransparentForwardPass2は以下のように作成

  • LWRPのRenderTransparentForwardPassクラスをコピーして作成.
  • LWRPではShaderのLightModeタグで描画するShaderを決めています.作成したコンストラクタでそのタグの名前を定義しているので RenderTransparentForwardPassで使用している文字列"LightweightForward"とは別のものにします. ここでは"LightweightForward2"とします

RenderTransparentForwardPass2のソースコードは記事の最後

レンダリング順番を制御

LWRPではDefaultRendererSetupというクラスをデフォルトで定義しています.DefaultRendererSetupでは,パスの描画順を制御しています.

そのクラスを丸々自分で作成したクラスに置き換えることでパスを追加します.

レンダリング順番を制御するクラスを以下ではCustomRendererSetupとする.

CustomRendererSetupは以下のように作成

  • LWRPのDefaultRendererSetupのクラスをコピーして作成(※CustomRendererSetupはMoneBehaviourを継承させる)
  • 他のパスと同じようにRenderTransparentForwardPass2を宣言してnewを追加
  • 追加したいタイミングでRenderTransparentForwardPass2のSetUp関数をよび,renderer.EnqueuePassに追加

CustomRendererSetupのソースコードは記事の最後

使い方

上のクラスを作成して,パスを追加したいカメラに対してCustomRendererSetupコンポーネントをつけるだけで,カスタムレンダーパスを追加できます.

demo

上記を用いて3Pathを使用したステンシルを用いたアウトラインの例

github.com

f:id:n_taku:20190112183357p:plain

RenderTransparentForwardPass2

LWRPに追加するカスタムパス(Transparent)

CustomRendererSetupにRenderTransparentForwardPass3のパスも追加したソースコード

LWRP のレンダラーを上書きするためのカスタムしたRendererSetup