しゅみぷろ読者になるしゅみぷろプログラミングとかこの広告は、90日以上更新していないブログに表示しています。Unityはじめに今までにも何度かCommandBufferを用いたエフェクトについて書いてきたので今更なのですが、Unityのコミュニティでの会話でなんとなくきっかけがあったので書いてみることにしました。今回は1つのカメラでMRTによる出力を使ったPostEffectをしてみようと思います。DeferredShadingで行っていることですね。DeferredShadingでは1つのパスで複数のデータを出力し、後のパスで利用できるようになっています。しゅみぷろPostEffectをかけようと思うと、通常スクリプトでカメラのOnRenderImageイベント関数を用いると思います。Temp」に設定されます。o;}というように複数の出力をする場合、当然といえば当然ですがこの2つのバッファは正常に出力されます。Temp」にすり替わってしまいます。MRTによる出力が上手くいかなくなってしまうわけです。これを解決するために今回用いる手法が、「Unity標準のImageEffectパスを使わず独自に拡張したImageEffect用のパスでエフェクトをかける」ことです。良い方法をご存知でしたらご教示下さいませ。今回作成したサンプルのリポジトリは以下で公開しています。github.com実装についてまずはMRTによる複数の出力をもつシェーダーを作ります。}}次に、カメラのレンダリングターゲットの設定とコマンドバッファーによるレンダリングパイプラインを拡張するスクリプトを作成します。Effectsパスの前にCustomImageEffectを構築してます。長くなるので細かい部分や最適化の余地がある部分はそのままです。imgEffMatはPostEffectのシェーダーを設定したマテリアルで、これにバッファとして作成したRenderTextureをセットしています。PostEffectのシェーダーは以下のような感じで書きました。}}作成したバッファを見ると以下のようになっています。buf1,buf2は任意の情報をRenderTextureに書き込んだ結果で、tarはbuf1,buf2を用いたPostEffectの出力結果です。あとはこのバッファを好きに使えます。まとめ駆け足でしたが、CommandBufferを使い、1つのカメラでMRTとPostEffectを併用する方法を簡単に見ていきました。Modelは3.0以降が要求されますのでご注意下さい。サンプルは上のリンクから。UnityでMatcapシェーダー書いたのでメモ。)はてなブログをはじめよう!es_programさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。