【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つあります.
- 追加するパスを定義するScriptableRenderPassを継承したクラス
- レンダリング順番を制御する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を使用したステンシルを用いたアウトラインの例
RenderTransparentForwardPass2
CustomRendererSetupにRenderTransparentForwardPass3のパスも追加したソースコード