ikoan unity 開発メモ

Unityに関するアレコレを日々つづっていこうと思います

shader練習 ブラーシェーダー

環境

Unity2018.2.8f1

目的

画面をぼかす処理を作成したい。
そのためのブラーシェーダを作成します。

実装

画面をぼかす処理で一番簡単なのは、表示解像度を下げることになります。
要はテクスチャを解像度を下げたテクスチャに書き込み、それを引き伸ばして表示すれば、ボケて表示されることになりますね。
解像度を下げる、つまり数ピクセルの情報を一つのピクセルにまとめる際に、数ピクセル内の色の平均値をとるのか、それとも1つのピクセルの色だけを使用するかによって、ボケ方が変わってくると思います。
今回はshaderで実装するということになりますので、考え方は前者の数ピクセル内の色の平均値をとる方になります。

上記の考え方をshaderで実装するには、あるピクセルの色を決定する際に、周辺のピクセルからも色をとって加えてしまえばいいわけですね。
下記は平均を取る際の一番簡単な実装方法になります。

単純なブラー処理を行うピクセルシェーダー

これは中心のピクセルと周辺の4ピクセルの色を平均して色情報を決定したものとなります。
この他にも、「周辺8ピクセルの色をとる」「平均と取る時に中心ピクセルからの距離に応じて重みをつける」「隣接ピクセルだけでなく、数ピクセル離れたピクセルの色を取る」などができると思います。、
それぞれ、ぼかしが綺麗になると思いますので、ぜひ試していただければと思います。

f:id:ikoans:20180920195837g:plain

画面全体に効果をかける

今までは、マテリアルにshaderをセットし、特定のテクスチャをぼかす事をして来ました。
次に画面全体をぼかす事を試してみます。
Unity2018ですと、CommandBufferやRenderPipelineを実装してやるやり方もあるかもしれませんが、いかんせん私自身がまだ習得していないので、そのやり方はいずれできたら。
今回はCameraにアタッチするComponentを用意し、OnRenderImageでshaderの効果を画面全体にかけるようにします。
※過去のImageEffectのやり方ですね。現在のPostProcessingStackがどうかはわかりませんが・・・


shaderの効果を画面全体にかけるために、MonoBehaviourのOnRenderImageを ...

上記スクリプトをCameraにアタッチすると、いい感じに画面全体がぼやけました。
f:id:ikoans:20180920203839g:plain