shader練習 ブラーシェーダー
環境
Unity2018.2.8f1
目的
画面をぼかす処理を作成したい。
そのためのブラーシェーダを作成します。
実装
画面をぼかす処理で一番簡単なのは、表示解像度を下げることになります。
要はテクスチャを解像度を下げたテクスチャに書き込み、それを引き伸ばして表示すれば、ボケて表示されることになりますね。
解像度を下げる、つまり数ピクセルの情報を一つのピクセルにまとめる際に、数ピクセル内の色の平均値をとるのか、それとも1つのピクセルの色だけを使用するかによって、ボケ方が変わってくると思います。
今回はshaderで実装するということになりますので、考え方は前者の数ピクセル内の色の平均値をとる方になります。
上記の考え方をshaderで実装するには、あるピクセルの色を決定する際に、周辺のピクセルからも色をとって加えてしまえばいいわけですね。
下記は平均を取る際の一番簡単な実装方法になります。
単純なブラー処理を行うピクセルシェーダー
これは中心のピクセルと周辺の4ピクセルの色を平均して色情報を決定したものとなります。
この他にも、「周辺8ピクセルの色をとる」「平均と取る時に中心ピクセルからの距離に応じて重みをつける」「隣接ピクセルだけでなく、数ピクセル離れたピクセルの色を取る」などができると思います。、
それぞれ、ぼかしが綺麗になると思いますので、ぜひ試していただければと思います。
画面全体に効果をかける
今までは、マテリアルにshaderをセットし、特定のテクスチャをぼかす事をして来ました。
次に画面全体をぼかす事を試してみます。
Unity2018ですと、CommandBufferやRenderPipelineを実装してやるやり方もあるかもしれませんが、いかんせん私自身がまだ習得していないので、そのやり方はいずれできたら。
今回はCameraにアタッチするComponentを用意し、OnRenderImageでshaderの効果を画面全体にかけるようにします。
※過去のImageEffectのやり方ですね。現在のPostProcessingStackがどうかはわかりませんが・・・
shaderの効果を画面全体にかけるために、MonoBehaviourのOnRenderImageを ...
上記スクリプトをCameraにアタッチすると、いい感じに画面全体がぼやけました。