グラフィック

シェーダーを使って画像を加工してみた

グラフィック
この記事は約2分で読めます。


こんにちは。
プログラマの中村です。

このブログのアイコンとして自分の写真を使う際に、
無加工だと少し恥ずかしいので加工したいと思います。

今回はそれに用いた手法について書いていきます。

※本来画像の加工等は専用のツールを使うのが普通ですが、面白そうなのでシェーダーを使います。

画像にかける処理について

画像には、
「ぼかし」を表現できるブラーと、
イラスト風に加工できるポスタリゼーションをかけたいと思います。

ブラー

ブラーは画像処理やゲームグラフィックスで頻繁に用いられる処理の1つです。

隣接するピクセルの色の平均をとることで、ぼかされたような画像を作ることができます。

ポスタリゼーション

ポスタリゼーション(ポスタライズ)とは、色を256階調から指定の階調数まで減らすことで、イラスト風に見せる加工です。

一般的に、ポスタライズの処理は以下の式で表せます。

$$out = floor( in * step ) / step$$

inは入力、outは出力、stepは階調数になります。

シェーダーを描く

ブラーについては、単純に中心のピクセルと周辺8ピクセルの平均をとりたいと思います。
実際に実装する場合はガウシアンブラーやバイラテラルフィルタなどを使う場合が多いです。

次にポスタリゼーションの処理を書いてきます。
上述の式をそのまま実装すればいいので以下のようになります。

2つを組み込んだ最終的なシェーダーが以下になります。

クリックしてソースコード全文を見る

結果

シェーダーを確認するためにUnityを使用します。
詳細は省略しますが、シェーダーの確認にはUGUIを、画像の出力にはCustom Render Textureを使用しました。

通勤経路で撮った井の頭公園の桜を使って、結果を確認してみます。



無事に元画像の感じを保ちつつ、ぼかせたのではないでしょうか。

まとめ

今回は、シェーダーを使って画像の加工を行ってみました。

画像処理の手法はポストプロセスなどで使用するので、ゲーム開発において重要な技術の1つです。
もちろん、弊社で開発されたゲームでも多用されています。

Unityなどのゲームエンジンを使えば手軽に結果が確認できるので、
興味のある方は試してみてはいかがでしょうか。

タイトルとURLをコピーしました