【Unity】自作PostProcessingでRenderTextureを使う


UnityのPostProcessingでこの自作のポストエフェクトを作るとき、RenderTextureを使いたかったので


今はURPの自作PostProcessingは公式の方法がないらしいのでビルトイン版でのやり方を書いていきます(URPでも同じような感じでできましたが)

とりあえずこんな感じのを作ります


シェーダーを作成する

ポストエフェクトに使うためのシェーダーを作成します。

今回は適当にこんな感じにします。ここはカメラに写ってるものを表示する用(_MainTex)と、RenderTextureのものを表示する用の2つのTextureを用意しておけばなんでもいいです。


PostProcessEffectSettingsを書く

PostProcessingにエフェクトを追加するためのクラスを書きます。

ここでインスペクターから値を編集できるようにするのですが、〇〇Parameterというものでインスペクターから変更できる数値などの変数を作ってあげる必要があります。

が、用意されている〇〇ParameterはFloatやVector2などの基本的なものしかなく、RenderTextureはどうやって受け付ければ良いんだ…で少し悩んでました

ParameterOverrideを継承すれば用意されてないものもできるよ!とのことでしたがアセットを指定するだけならParameterOverride<T>を使えばいけました。値によって処理を分けをする場合は継承する必要があるようですが


PostProcessEffectRendererを書く

先程作ったPostProcessEffectSettingsから設定した値をシェーダーに渡してレンダリングするためのクラスを書きます。

RenderTextureはTexture2Dに変換しなくてもSetTextureで直接指定できるようです。


PostProcessingで使う

あとは使うだけです。なのですがRenderTextureを設定したカメラが作成した先程作成したポストエフェクトの影響を受けてしまうと上手くレンダリングされない場合があるのでPostProcessはIsGrobalのチェックを外してLocalで使用する必要があります(Localにするとそれぞれのカメラで別のポストエフェクトをかけるなどもできますし)

あとは普通にPostProcessのエフェクトとして使えます

ページめくりシェーダーはゲームで使いやすいようにもう少し整えてから配布したい


参考

Unity

guest
0 コメント
Inline Feedbacks
全てのコメントを見る